重新組裝 mdadm-raid5
我的一個朋友有一個帶有 9 個磁碟的 mdadm-raid5,它不再重新組裝。
查看系統日誌後,我發現磁碟 sdi 已從陣列中踢出:
Jul 6 08:43:25 nasty kernel: [ 12.952194] md: bind<sdc> Jul 6 08:43:25 nasty kernel: [ 12.952577] md: bind<sdd> Jul 6 08:43:25 nasty kernel: [ 12.952683] md: bind<sde> Jul 6 08:43:25 nasty kernel: [ 12.952784] md: bind<sdf> Jul 6 08:43:25 nasty kernel: [ 12.952885] md: bind<sdg> Jul 6 08:43:25 nasty kernel: [ 12.952981] md: bind<sdh> Jul 6 08:43:25 nasty kernel: [ 12.953078] md: bind<sdi> Jul 6 08:43:25 nasty kernel: [ 12.953169] md: bind<sdj> Jul 6 08:43:25 nasty kernel: [ 12.953288] md: bind<sda> Jul 6 08:43:25 nasty kernel: [ 12.953308] md: kicking non-fresh sdi from array! Jul 6 08:43:25 nasty kernel: [ 12.953314] md: unbind<sdi> Jul 6 08:43:25 nasty kernel: [ 12.960603] md: export_rdev(sdi) Jul 6 08:43:25 nasty kernel: [ 12.969675] raid5: device sda operational as raid disk 0 Jul 6 08:43:25 nasty kernel: [ 12.969679] raid5: device sdj operational as raid disk 8 Jul 6 08:43:25 nasty kernel: [ 12.969682] raid5: device sdh operational as raid disk 6 Jul 6 08:43:25 nasty kernel: [ 12.969684] raid5: device sdg operational as raid disk 5 Jul 6 08:43:25 nasty kernel: [ 12.969687] raid5: device sdf operational as raid disk 4 Jul 6 08:43:25 nasty kernel: [ 12.969689] raid5: device sde operational as raid disk 3 Jul 6 08:43:25 nasty kernel: [ 12.969692] raid5: device sdd operational as raid disk 2 Jul 6 08:43:25 nasty kernel: [ 12.969694] raid5: device sdc operational as raid disk 1 Jul 6 08:43:25 nasty kernel: [ 12.970536] raid5: allocated 9542kB for md127 Jul 6 08:43:25 nasty kernel: [ 12.973975] 0: w=1 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 6 08:43:25 nasty kernel: [ 12.973980] 8: w=2 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 6 08:43:25 nasty kernel: [ 12.973983] 6: w=3 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 6 08:43:25 nasty kernel: [ 12.973986] 5: w=4 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 6 08:43:25 nasty kernel: [ 12.973989] 4: w=5 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 6 08:43:25 nasty kernel: [ 12.973992] 3: w=6 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 6 08:43:25 nasty kernel: [ 12.973996] 2: w=7 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 6 08:43:25 nasty kernel: [ 12.973999] 1: w=8 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 6 08:43:25 nasty kernel: [ 12.974002] raid5: raid level 5 set md127 active with 8 out of 9 devices, algorithm 2
不幸的是,這未被辨識,現在另一個驅動器被踢了(sde):
Jul 14 08:02:45 nasty kernel: [ 12.918556] md: bind<sdc> Jul 14 08:02:45 nasty kernel: [ 12.919043] md: bind<sdd> Jul 14 08:02:45 nasty kernel: [ 12.919158] md: bind<sde> Jul 14 08:02:45 nasty kernel: [ 12.919260] md: bind<sdf> Jul 14 08:02:45 nasty kernel: [ 12.919361] md: bind<sdg> Jul 14 08:02:45 nasty kernel: [ 12.919461] md: bind<sdh> Jul 14 08:02:45 nasty kernel: [ 12.919556] md: bind<sdi> Jul 14 08:02:45 nasty kernel: [ 12.919641] md: bind<sdj> Jul 14 08:02:45 nasty kernel: [ 12.919756] md: bind<sda> Jul 14 08:02:45 nasty kernel: [ 12.919775] md: kicking non-fresh sdi from array! Jul 14 08:02:45 nasty kernel: [ 12.919781] md: unbind<sdi> Jul 14 08:02:45 nasty kernel: [ 12.928177] md: export_rdev(sdi) Jul 14 08:02:45 nasty kernel: [ 12.928187] md: kicking non-fresh sde from array! Jul 14 08:02:45 nasty kernel: [ 12.928198] md: unbind<sde> Jul 14 08:02:45 nasty kernel: [ 12.936064] md: export_rdev(sde) Jul 14 08:02:45 nasty kernel: [ 12.943900] raid5: device sda operational as raid disk 0 Jul 14 08:02:45 nasty kernel: [ 12.943904] raid5: device sdj operational as raid disk 8 Jul 14 08:02:45 nasty kernel: [ 12.943907] raid5: device sdh operational as raid disk 6 Jul 14 08:02:45 nasty kernel: [ 12.943909] raid5: device sdg operational as raid disk 5 Jul 14 08:02:45 nasty kernel: [ 12.943911] raid5: device sdf operational as raid disk 4 Jul 14 08:02:45 nasty kernel: [ 12.943914] raid5: device sdd operational as raid disk 2 Jul 14 08:02:45 nasty kernel: [ 12.943916] raid5: device sdc operational as raid disk 1 Jul 14 08:02:45 nasty kernel: [ 12.944776] raid5: allocated 9542kB for md127 Jul 14 08:02:45 nasty kernel: [ 12.944861] 0: w=1 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 14 08:02:45 nasty kernel: [ 12.944864] 8: w=2 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 14 08:02:45 nasty kernel: [ 12.944867] 6: w=3 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 14 08:02:45 nasty kernel: [ 12.944871] 5: w=4 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 14 08:02:45 nasty kernel: [ 12.944874] 4: w=5 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 14 08:02:45 nasty kernel: [ 12.944877] 2: w=6 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 14 08:02:45 nasty kernel: [ 12.944879] 1: w=7 pa=0 pr=9 m=1 a=2 r=9 op1=0 op2=0 Jul 14 08:02:45 nasty kernel: [ 12.944882] raid5: not enough operational devices for md127 (2/9 failed)
現在陣列不再啟動。然而,似乎每個磁碟都包含 raid 元數據:
/dev/sda: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : b8a04dbb:0b5dffda:601eb40d:d2dc37c9 Name : nasty:stuff (local to host nasty) Creation Time : Sun Mar 16 02:37:47 2014 Raid Level : raid5 Raid Devices : 9 Avail Dev Size : 7814035120 (3726.02 GiB 4000.79 GB) Array Size : 62512275456 (29808.18 GiB 32006.29 GB) Used Dev Size : 7814034432 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : clean Device UUID : 8600bda9:18845be8:02187ecc:1bfad83a Update Time : Mon Jul 14 00:45:35 2014 Checksum : e38d46e8 - correct Events : 123132 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 0 Array State : AAA.AAA.A ('A' == active, '.' == missing) /dev/sdc: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : b8a04dbb:0b5dffda:601eb40d:d2dc37c9 Name : nasty:stuff (local to host nasty) Creation Time : Sun Mar 16 02:37:47 2014 Raid Level : raid5 Raid Devices : 9 Avail Dev Size : 7814035120 (3726.02 GiB 4000.79 GB) Array Size : 62512275456 (29808.18 GiB 32006.29 GB) Used Dev Size : 7814034432 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : clean Device UUID : fe612c05:f7a45b0a:e28feafe:891b2bda Update Time : Mon Jul 14 00:45:35 2014 Checksum : 32bb628e - correct Events : 123132 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 1 Array State : AAA.AAA.A ('A' == active, '.' == missing) /dev/sdd: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : b8a04dbb:0b5dffda:601eb40d:d2dc37c9 Name : nasty:stuff (local to host nasty) Creation Time : Sun Mar 16 02:37:47 2014 Raid Level : raid5 Raid Devices : 9 Avail Dev Size : 7814035120 (3726.02 GiB 4000.79 GB) Array Size : 62512275456 (29808.18 GiB 32006.29 GB) Used Dev Size : 7814034432 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : clean Device UUID : 1d14616c:d30cadc7:6d042bb3:0d7f6631 Update Time : Mon Jul 14 00:45:35 2014 Checksum : 62bd5499 - correct Events : 123132 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 2 Array State : AAA.AAA.A ('A' == active, '.' == missing) /dev/sde: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : b8a04dbb:0b5dffda:601eb40d:d2dc37c9 Name : nasty:stuff (local to host nasty) Creation Time : Sun Mar 16 02:37:47 2014 Raid Level : raid5 Raid Devices : 9 Avail Dev Size : 7814035120 (3726.02 GiB 4000.79 GB) Array Size : 62512275456 (29808.18 GiB 32006.29 GB) Used Dev Size : 7814034432 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : active Device UUID : a2babca3:1283654a:ef8075b5:aaf5d209 Update Time : Mon Jul 14 00:45:07 2014 Checksum : f78d6456 - correct Events : 123123 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 3 Array State : AAAAAAA.A ('A' == active, '.' == missing) /dev/sdf: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : b8a04dbb:0b5dffda:601eb40d:d2dc37c9 Name : nasty:stuff (local to host nasty) Creation Time : Sun Mar 16 02:37:47 2014 Raid Level : raid5 Raid Devices : 9 Avail Dev Size : 7814035120 (3726.02 GiB 4000.79 GB) Array Size : 62512275456 (29808.18 GiB 32006.29 GB) Used Dev Size : 7814034432 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : clean Device UUID : e67d566d:92aaafb4:24f5f16e:5ceb0db7 Update Time : Mon Jul 14 00:45:35 2014 Checksum : 9223b929 - correct Events : 123132 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 4 Array State : AAA.AAA.A ('A' == active, '.' == missing) /dev/sdg: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : b8a04dbb:0b5dffda:601eb40d:d2dc37c9 Name : nasty:stuff (local to host nasty) Creation Time : Sun Mar 16 02:37:47 2014 Raid Level : raid5 Raid Devices : 9 Avail Dev Size : 7814035120 (3726.02 GiB 4000.79 GB) Array Size : 62512275456 (29808.18 GiB 32006.29 GB) Used Dev Size : 7814034432 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : clean Device UUID : 2cee1d71:16c27acc:43e80d02:1da74eeb Update Time : Mon Jul 14 00:45:35 2014 Checksum : 7512efd4 - correct Events : 123132 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 5 Array State : AAA.AAA.A ('A' == active, '.' == missing) /dev/sdh: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : b8a04dbb:0b5dffda:601eb40d:d2dc37c9 Name : nasty:stuff (local to host nasty) Creation Time : Sun Mar 16 02:37:47 2014 Raid Level : raid5 Raid Devices : 9 Avail Dev Size : 7814035120 (3726.02 GiB 4000.79 GB) Array Size : 62512275456 (29808.18 GiB 32006.29 GB) Used Dev Size : 7814034432 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : clean Device UUID : c239f0ad:336cdb88:62c5ff46:c36ea5f8 Update Time : Mon Jul 14 00:45:35 2014 Checksum : c08e8a4d - correct Events : 123132 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 6 Array State : AAA.AAA.A ('A' == active, '.' == missing) /dev/sdi: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : b8a04dbb:0b5dffda:601eb40d:d2dc37c9 Name : nasty:stuff (local to host nasty) Creation Time : Sun Mar 16 02:37:47 2014 Raid Level : raid5 Raid Devices : 9 Avail Dev Size : 7814035120 (3726.02 GiB 4000.79 GB) Array Size : 62512275456 (29808.18 GiB 32006.29 GB) Used Dev Size : 7814034432 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : active Device UUID : d06c58f8:370a0535:b7e51073:f121f58c Update Time : Mon Jul 14 00:45:07 2014 Checksum : 77844dcc - correct Events : 0 Layout : left-symmetric Chunk Size : 512K Device Role : spare Array State : AAAAAAA.A ('A' == active, '.' == missing) /dev/sdj: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : b8a04dbb:0b5dffda:601eb40d:d2dc37c9 Name : nasty:stuff (local to host nasty) Creation Time : Sun Mar 16 02:37:47 2014 Raid Level : raid5 Raid Devices : 9 Avail Dev Size : 7814035120 (3726.02 GiB 4000.79 GB) Array Size : 62512275456 (29808.18 GiB 32006.29 GB) Used Dev Size : 7814034432 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : clean Device UUID : f2de262f:49d17fea:b9a475c1:b0cad0b7 Update Time : Mon Jul 14 00:45:35 2014 Checksum : dd0acfd9 - correct Events : 123132 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 8 Array State : AAA.AAA.A ('A' == active, '.' == missing)
但正如您所見,兩個驅動器(sde、sdi)處於活動狀態(但raid 已停止),sdi 是備用的。雖然 sde 的事件計數比大多數其他驅動器(123123 而不是 123132)略低,但 sdi 的事件計數為 0。所以我認為 sde 幾乎是最新的。但是sdi不…
現在我們在網上讀到硬關機可能會導致這些“踢不新鮮”的消息。確實,我的朋友造成了一兩次硬關機。所以我們按照我們在網上找到的說明,嘗試將 sde 重新添加到數組中:
$ mdadm /dev/md127 --add /dev/sde mdadm: add new device failed for /dev/sde as 9: Invalid argument
但這失敗了,現在
mdadm --examine /dev/sde
sde 的事件計數也顯示為 0(+ 現在像 sdi 一樣是備用的):/dev/sde: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : b8a04dbb:0b5dffda:601eb40d:d2dc37c9 Name : nasty:stuff (local to host nasty) Creation Time : Sun Mar 16 02:37:47 2014 Raid Level : raid5 Raid Devices : 9 Avail Dev Size : 7814035120 (3726.02 GiB 4000.79 GB) Array Size : 62512275456 (29808.18 GiB 32006.29 GB) Used Dev Size : 7814034432 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : clean Device UUID : 689e0030:142122ae:7ab37935:c80ab400 Update Time : Mon Jul 14 00:45:35 2014 Checksum : 5e6c4cf7 - correct Events : 0 Layout : left-symmetric Chunk Size : 512K Device Role : spare Array State : AAA.AAA.A ('A' == active, '.' == missing)
我們知道 2 個故障驅動器通常意味著 raid5 的死亡。但是,有沒有辦法將至少 sde 添加到 raid 以便保存數據?
好的,看起來我們現在可以訪問突襲了。至少第一個檢查的文件看起來不錯。所以這就是我們所做的:
kernel.org wiki 上的raid 恢復文章為我們的問題提出了兩種可能的解決方案:
- 使用
--assemble --force
(也被derobert提到)文章說:
$$ … $$如果事件計數相差小於 50,則驅動器上的資訊可能仍然正常。$$ … $$如果事件計數非常匹配但不完全匹配,請使用“mdadm –assemble –force /dev/mdX”強制 mdadm 組裝數組$$ … $$. 如果驅動器的事件計數遠未結束$$ … $$那個驅動器$$ … $$不應包含在程序集中。
在我們的例子中,驅動器
sde
的事件差異為 9。所以很有可能--force
會起作用。然而,在我們執行--add
命令後,事件計數下降到 0,驅動器被標記為備用。所以我們最好不要使用
--force
. 2. 重新創建數組這個解決方案被明確標記為危險,因為如果你做錯了,你可能會失去數據。然而,這似乎是我們唯一的選擇。
這個想法是在現有的 raid 設備上創建一個新的 raid(即覆蓋設備的超級塊),並使用與舊 raid 相同的配置,並明確告訴 mdadm 該 raid 已經存在並且應該假定為乾淨。
由於事件計數差異僅為 9,唯一的問題是我們失去了超級塊,
sde
因此編寫新的超級塊很有可能讓我們訪問我們的數據……而且它奏效了 :-)我們的解決方案
注意:此解決方案專門針對我們的問題,可能不適用於您的設置。您應該記下這些筆記,以了解如何完成這些事情。但是您需要研究什麼是最適合您的情況。
備份
我們已經失去了一個超級塊。所以這次我們
sd[acdefghij]
在進行 raid 之前使用 dd 保存了每個 raid 設備 () 的第一個和最後一個 GB。我們對每個 raid 設備都這樣做了:# save the first gigabyte of sda dd if=/dev/sda of=bak_sda_start bs=4096 count=262144 # determine the size of the device fdisk -l /dev/sda # In this case the size was 4000787030016 byte. # To get the last gigabyte we need to skip everything except the last gigabyte. # So we need to skip: 4000787030016 byte - 1073741824 byte = 3999713288000 byte # Since we read blocks auf 4096 byte we need to skip 3999713288000/4096=976492502 blocks. dd if=/dev/sda of=bak_sda_end bs=4096 skip=976492502
收集資訊
重新創建raid 時,使用與舊raid 相同的配置很重要。如果您想使用不同的 mdadm 版本在另一台機器上重新創建陣列,這一點尤其重要。在這種情況下,mdadm 的預設值可能不同,並且可能創建不適合現有團隊的超級塊(請參閱 wiki 文章)。
在我們的例子中,我們使用相同的機器(因此使用相同的 mdadm-version)來重新創建數組。然而,數組首先是由第 3 方工具創建的。所以我們不想在這裡依賴預設值,不得不收集一些關於現有團隊的資訊。
從我們的輸出中
mdadm --examine /dev/sd[acdefghij]
我們得到了關於 raid 的以下資訊(注意:sdb 是包含作業系統的 ssd 並且不是raid 的一部分):Raid Level : raid5 Raid Devices : 9 Used Dev Size : 7814034432 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors Layout : left-symmetric Chunk Size : 512K Device Role : Active device 0
以
Used Dev Size
512 字節的塊為單位。你可以檢查一下:
7814034432*512/1000000000 ~= 4000.79
但是 mdadm 需要千比字節的大小:
7814034432*512/1024 = 3907017216
重要的是
Device Role
. 在新的 RAID 中,每個設備都必須具有與以前相同的角色。在我們的例子中:device role ------ ---- sda 0 sdc 1 sdd 2 sde 3 sdf 4 sdg 5 sdh 6 sdi spare sdj 8
注意:驅動器號(因此順序)可以在重新啟動後更改!
下一步我們還需要佈局和塊大小。
重新創建raid
我們現在可以使用上一步的資訊重新創建陣列:
mdadm --create --assume-clean --level=5 --raid-devices=9 --size=3907017216 \ --chunk=512 --layout=left-symmetric /dev/md127 /dev/sda /dev/sdc /dev/sdd \ /dev/sde /dev/sdf /dev/sdg /dev/sdh missing /dev/sdj
以正確的順序傳遞設備很重要!
此外,我們沒有添加
sdi
,因為它的事件計數太低。所以我們將第 7 個突襲插槽設置為missing
. 因此,raid5 包含 9 個設備中的 8 個,並將以降級模式組裝。並且由於它缺少備用設備,因此不會自動開始重建。然後我們用來
--examine
檢查新的超級塊是否適合我們的舊超級塊。它確實做到了:-) 我們能夠掛載文件系統並讀取數據。下一步是備份數據,然後重新添加sdi
並開始重建。