ILD

RAID1 bitmap is dangerous
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2026-6-22 站点:Inside Linux Development

创建一个RAID1,开启bitmap。磁盘初始内容为全0。

mdadm --create /dev/md0 /dev/vdc /dev/vdd --level=1 --raid-devices=2 --metadata=1.0 --bitmap=internal --bitmap-chunk=128K


停止它,然后单独assemble第一块磁盘。

mdadm --stop /dev/md0

mdadm --assemble --run /dev/md0 /dev/vdc


前4M写入1

./host/image/wr.sh /dev/md0 4M 0 1


停止它,然后单独assemble第二块磁盘。

mdadm --stop /dev/md0

mdadm --assemble --run /dev/md0 /dev/vdd


然后把第1块磁盘,加入进来

mdadm --add /dev/md0 /dev/vdc


此时,不会同步任何内容,因为md没有写入数据。没有脏。这就导致两块盘的内容不一致。

root@Xrouter-qemu:/mnt# hexdump -n $((8*1024*1024)) -C /dev/vdc
00000000  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
*
00400000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00800000
root@Xrouter-qemu:/mnt# hexdump -n $((8*1024*1024)) -C /dev/vdd
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00800000
root@Xrouter-qemu:/mnt# hexdump -n $((8*1024*1024)) -C /dev/md0
00000000  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
*
00400000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00800000


这种场景,还好,md数据是某一块盘的。


如果单独assemble vdd的时候,写入后4M数据。那么加入vdc时,只同步后4M数据。

如果md选择vdc读取内容。那么读到的内容是vdc的前4M+vdd的后4M,这可能导致文件系统损坏。


总结

mdadm -add的时候,只同步当前md bitmap dirty的chunk。

如果其它部分,不一致,那就很危险。



Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.