例如三個硬碟sda, sdb, sdc整個不分割直接做RAID5
# mdadm -C /dev/md5 -l 5 -n 3 /dev/sd{a,b,c}
在這種情況下,md5這個磁碟陣列的訊息metadata分別會存在整個硬碟sda, sdb, sdc的superblock上面。
如果當把sda, sdb, sdc用fdisk分割如下:
# fdisk /dev/sda
n > p > 1 > enter > enter > t > fd > w
# sfdisk -d /dev/sda | sfdisk /dev/sdb
# sfdisk -d /dev/sda | sfdisk /dev/sdc
用這些硬碟,再多加一個硬碟sdd,做一個RAID出來的時候
# mdadm -C /dev/md6 -l 5 -n 4 /dev/sd{a,b,c,d}1
新的RAID的metadata就都會存放在sda1, sdb1, sdc1等分割區的superblock上面
問題就會出現在這邊!!
原本存在sda, sdb, sdc的superblock上舊的metadata並不會消失,現在又有新的metadata存放在sda1, sdb1, sdc1上面,所以重開機後,mdadm去掃描硬碟的時候會先去認整個硬碟的superblock,而不是分割區的superblock,所以說組出來的會是舊的三個硬碟組成的RAID,而不是後來新的四個硬碟組成的RAID。
上述問題解決的方法就是拿到舊硬碟的時候要先把superblock給清除乾淨
# mdadm --zero-superblock /dev/sda
# mdadm --zero-superblock /dev/sda1
清除乾淨後用下面指令來看每個硬碟的superblock資訊
# mdadm --examine /dev/sda
# mdadm --examine /dev/sda1
如果沒有RAID相關資訊的話,那就是metadata已經被清除乾淨了
注意事項
mdadm裡面RAID的配置訊息叫做metadata,而存放的位置叫做superblock。這和平常理解的metadata與superblock不太一樣,注意不要搞混了。mdadm的superblock在硬碟上面的位址則會根據不同的metadata版本放在不一樣的位置:- metadata 0.9, 硬碟的最後面
- metadata 1.0, 硬碟的最後面
- metadata 1.1, 硬碟的最前面
- metadata 1.2, 硬碟前面數來4k的位置
相關superblock上面資料儲存的格式請參考raid.wiki.kernel.org上面的文章,這邊有許多有用的參考資訊。
沒有留言:
張貼留言