mdadm RAID - 在增長(收縮)重塑期間重新啟動 - 不工作(卡住)
我有一個 linux 軟體 Raid6 陣列 (mdadm)。我將它從 6x4TB 磁碟(16TB 可用)增加到 7x4TB(20TB 可用)。重塑很順利,但是當我執行 resize2fs 時,我遇到了眾所周知的 EXT4 16TB 文件系統限制問題。我檢查了一下,文件系統沒有 64 位標誌。因此,為了回收我剛剛添加到陣列中的額外驅動器,我這樣做了:
johnny@debian:~$ sudo resize2fs /dev/md0 16000G johnny@debian:~$ sudo mdadm --grow /dev/md0 --array-size=16000G johnny@debian:~$ sudo mdadm --grow /dev/md0 --raid-devices=6 --backup-file=/tmp/backup
注意備份文件的位置。馬上就會很重要,因為我在 Debian 上。
所以事情進展順利,緩慢但有效。進度達到了 3.7%,並且已經緩慢地爬行。我原以為這是因為我在同一時間重塑了其他幾個數組。當其他工作完成而這一項沒有加快時,我真的很擔心。由於它說需要數年才能完成,所以我決定我應該重新啟動,看看它是否會加速,所以我重新啟動了系統。
這是壞事開始發生的時候……
我在 Debian 上,據我了解,當系統啟動時 /tmp 文件夾已被清除,因此我的 reshape 備份文件失去了。另外,因為我的 /etc/fstab 文件試圖掛載 md0,但現在沒有組裝,系統幾次都無法啟動。我從一張 live cd 開始,修復了 fstab 文件,讓系統重新啟動。
一旦我解決了這個問題,系統就啟動了,那是我第一次看到 md0 沒有簡單地組裝自己並繼續重塑。恐慌在…
我沒有以下命令的輸出,但我設法找到了我輸入的命令。簡要說明接下來發生的事情……
johnny@debian:~$ sudo mdadm --assemble /dev/md0 johnny@debian:~$ sudo mdadm --assemble --force /dev/md0 johnny@debian:~$ sudo mdadm --assemble --force /dev/md0 --backup-file=/tmp/backup
第一個命令失敗,所以我嘗試了 –force 選項,它也失敗了,但是錯誤消息告訴我失敗是因為它需要 –backup-file 選項,所以我執行了第三個命令。我希望備份文件仍然存在,但它沒有,因為它在 /tmp 文件夾中並且已被刪除。但這似乎並沒有引起任何問題,因為陣列已組裝。
這是 md0 現在的樣子。請注意標記為“已刪除”的磁碟。我懷疑這是被移除的光碟,sdj1。
johnny@debian:~$ sudo mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Jan 11 09:59:42 2013 Raid Level : raid6 Array Size : 15627548672 (14903.59 GiB 16002.61 GB) Used Dev Size : 3906887168 (3725.90 GiB 4000.65 GB) Raid Devices : 6 Total Devices : 6 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Sat Mar 5 20:45:56 2016 State : clean, degraded, reshaping Active Devices : 6 Working Devices : 6 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Reshape Status : 3% complete Delta Devices : -1, (7->6) Name : BigRaid6 UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2 Events : 4339739 Number Major Minor RaidDevice State 11 8 224 0 active sync /dev/sdo 2 0 0 2 removed 6 8 80 2 active sync /dev/sdf 7 8 176 3 active sync /dev/sdl 12 8 16 4 active sync /dev/sdb 8 8 32 5 active sync /dev/sdc 9 8 128 6 active sync /dev/sdi
這是重塑的目前進展。請注意,它完全停留在 0K/秒。
johnny@debian:~$ cat /proc/mdstat Personalities : [raid1] [raid6] [raid5] [raid4] md0 : active raid6 sdo[11] sdi[9] sdc[8] sdb[12] sdl[7] sdf[6] 15627548672 blocks super 1.2 level 6, 512k chunk, algorithm 2 [6/5] [U_UUUU] [>....................] reshape = 3.7% (145572864/3906887168) finish=284022328345.0min speed=0K/sec bitmap: 5/30 pages [20KB], 65536KB chunk unused devices: <none>
這是仍然在陣列中的各個光碟。
johnny@debian:~$ sudo mdadm --examine /dev/sd[oflbci] /dev/sdb: Magic : a92b4efc Version : 1.2 Feature Map : 0x5 Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2 Name : BigRaid6 Creation Time : Fri Jan 11 09:59:42 2013 Raid Level : raid6 Raid Devices : 6 Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB) Array Size : 15627548672 (14903.59 GiB 16002.61 GB) Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB) Data Offset : 262144 sectors Super Offset : 8 sectors Unused Space : before=262064 sectors, after=688 sectors State : clean Device UUID : 99b0fbcc:46d619bb:9ae96eaf:840e21a4 Internal Bitmap : 8 sectors from superblock Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB) Delta Devices : -1 (7->6) Update Time : Sat Mar 5 20:45:56 2016 Checksum : fca445bd - correct Events : 4339739 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 4 Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing) /dev/sdc: Magic : a92b4efc Version : 1.2 Feature Map : 0x5 Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2 Name : BigRaid6 Creation Time : Fri Jan 11 09:59:42 2013 Raid Level : raid6 Raid Devices : 6 Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB) Array Size : 15627548672 (14903.59 GiB 16002.61 GB) Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB) Data Offset : 262144 sectors Super Offset : 8 sectors Unused Space : before=262064 sectors, after=688 sectors State : clean Device UUID : b8d49170:06614f82:ad9a38a4:e9e06da5 Internal Bitmap : 8 sectors from superblock Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB) Delta Devices : -1 (7->6) Update Time : Sat Mar 5 20:45:56 2016 Checksum : 5d867810 - correct Events : 4339739 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 5 Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing) /dev/sdf: Magic : a92b4efc Version : 1.2 Feature Map : 0x5 Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2 Name : BigRaid6 Creation Time : Fri Jan 11 09:59:42 2013 Raid Level : raid6 Raid Devices : 6 Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB) Array Size : 15627548672 (14903.59 GiB 16002.61 GB) Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB) Data Offset : 262144 sectors Super Offset : 8 sectors Unused Space : before=262064 sectors, after=688 sectors State : clean Device UUID : dd56062c:4b55bf16:6a468024:3ca6bfd0 Internal Bitmap : 8 sectors from superblock Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB) Delta Devices : -1 (7->6) Update Time : Sat Mar 5 20:45:56 2016 Checksum : 59045f87 - correct Events : 4339739 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 2 Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing) /dev/sdi: Magic : a92b4efc Version : 1.2 Feature Map : 0x5 Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2 Name : BigRaid6 Creation Time : Fri Jan 11 09:59:42 2013 Raid Level : raid6 Raid Devices : 6 Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB) Array Size : 15627548672 (14903.59 GiB 16002.61 GB) Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB) Data Offset : 262144 sectors Super Offset : 8 sectors Unused Space : before=262064 sectors, after=688 sectors State : clean Device UUID : 92831abe:86de117c:710c368e:8badcef3 Internal Bitmap : 8 sectors from superblock Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB) Delta Devices : -1 (7->6) Update Time : Sat Mar 5 20:45:56 2016 Checksum : dd2fe2d1 - correct Events : 4339739 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 6 Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing) /dev/sdl: Magic : a92b4efc Version : 1.2 Feature Map : 0x5 Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2 Name : BigRaid6 Creation Time : Fri Jan 11 09:59:42 2013 Raid Level : raid6 Raid Devices : 6 Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB) Array Size : 15627548672 (14903.59 GiB 16002.61 GB) Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB) Data Offset : 262144 sectors Super Offset : 8 sectors Unused Space : before=262064 sectors, after=688 sectors State : clean Device UUID : 8404647a:b1922fed:acf71f64:18dfd448 Internal Bitmap : 8 sectors from superblock Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB) Delta Devices : -1 (7->6) Update Time : Sat Mar 5 20:45:56 2016 Checksum : 358734b4 - correct Events : 4339739 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 3 Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing) /dev/sdo: Magic : a92b4efc Version : 1.2 Feature Map : 0x5 Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2 Name : BigRaid6 Creation Time : Fri Jan 11 09:59:42 2013 Raid Level : raid6 Raid Devices : 6 Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB) Array Size : 15627548672 (14903.59 GiB 16002.61 GB) Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB) Data Offset : 262144 sectors Super Offset : 8 sectors Unused Space : before=262064 sectors, after=688 sectors State : clean Device UUID : d7e84765:86fb751a:466ab0de:c26afc43 Internal Bitmap : 8 sectors from superblock Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB) Delta Devices : -1 (7->6) Update Time : Sat Mar 5 20:45:56 2016 Checksum : c3698023 - correct Events : 4339739 Layout : left-symmetric Chunk Size : 512K Device Role : Active device 0 Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing
這裡是 /dev/sdj1,它曾經是陣列中唯一不是“整個磁碟”成員的成員。這是在重塑期間從陣列中刪除的那個。我懷疑它仍然需要完成重塑,儘管它目前不是數組的成員,因為它具有重塑之前的數據。
johnny@debian:~$ sudo mdadm --examine /dev/sdj1 mdadm: No md superblock detected on /dev/sdj1.
所以這是我的問題…
我無法完成重塑。
無法掛載陣列。當我嘗試時,我明白了。
johnny@debian:~$ sudo mount /dev/md0 /media/BigRaid6 mount: wrong fs type, bad option, bad superblock on /dev/md0, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so. johnny@debian:~$ sudo dmesg | tail [42446.268089] sd 15:0:0:0: [sdk] [42446.268091] Add. Sense: Unrecovered read error - auto reallocate failed [42446.268092] sd 15:0:0:0: [sdk] CDB: [42446.268093] Read(10): 28 00 89 10 bb 00 00 04 00 00 [42446.268099] end_request: I/O error, dev sdk, sector 2299575040 [42446.268131] ata16: EH complete [61123.788170] md: md1: data-check done. [77423.597923] EXT4-fs (md0): bad geometry: block count 4194304000 exceeds size of device (3906887168 blocks) [77839.250590] EXT4-fs (md0): bad geometry: block count 4194304000 exceeds size of device (3906887168 blocks) [78525.085343] EXT4-fs (md0): bad geometry: block count 4194304000 exceeds size of device (3906887168 blocks)
如果重塑完成,我相信安裝會成功,所以這可能是最重要的。僅供參考,這個陣列上的數據太大而無法備份,所以如果我失去它,數據就消失了。請幫忙!
編輯1:
我可以掏出 1000 美元(或更多)並獲得足夠的磁碟來複製所有內容,但我需要能夠安裝陣列才能使其工作。
另外,我剛剛注意到嘗試掛載陣列時收到的“錯誤幾何”錯誤消息中包含一些感興趣的資訊。
[146181.331566] EXT4-fs (md0): bad geometry: block count 4194304000 exceeds size of device (3906887168 blocks)
設備大小 3906887168 正好是 md0 數組大小 15627548672 的 1/4。來自“mdadm –detail /dev/md0”
Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
我不知道 4194304000 數字是從哪裡來的……但這是否意味著陣列的大小適合這些磁碟?還是這些大小不考慮 mdadm 元數據?4194304000 可能包括元數據嗎?
我可以發誓我在重塑開始之前嘗試了幾次以獲得正確的尺寸,所以我認為一切都很好。也許我錯了。
您的錯誤已經出現在第一個命令中,
16000GiB
根本不是您在 6x4TB 磁碟上所擁有的,甚至16000GB
可能是一個延伸,因為您失去了一些mdadm
元數據等空間。最後一條錯誤消息與這種情況非常相似(bad geometry
文件系統認為設備提供的更大,而文件系統絕對討厭這種情況)。因此,您現在正在查看許多問題:
- 你的文件系統太大
- 你的收縮卡在中途
- 至少有一個磁碟發生故障 (
/dev/sdk
)- 您的備份文件失去了
- 可能的文件系統不一致(顯然)
您的問題的解決方案不是使收縮以某種方式完成,而是在沒有損壞的情況下恢復到以前的狀態……這仍然可以實現,因為幸運的是收縮還沒有進展很遠。
在這種情況下,我會
- 停止 RAID 並確保沒有其他東西啟動它(禁用
udev
自動組裝規則等)- 使用覆蓋文件將硬碟設為只讀 (需要額外的備用磁碟用於臨時儲存)
- 嘗試使用所述覆蓋重新創建 RAID
一般來說,重新創建 RAID 是一個非常非常糟糕的主意,因為它幾乎總是出錯。但是,我認為在您的情況下,它可能比嘗試以任何其他方式扭轉收縮過程造成的損害更小。在 7 磁碟 RAID 6 中,該
16GiB
區域可能仍然保持不變……假設文件系統在 RAID 縮小時處於空閒狀態。否則你會看到更多的文件系統不一致。重新創建 RAID 時,您必須正確設置所有變數:元數據版本、數據偏移量、raid 級別、raid 佈局、塊大小、磁碟順序……並且您必須通過將冗餘磁碟保留為失去來防止重新同步。
它可能是這樣的:
mdadm --create /dev/md0 --assume-clean \ --metadata=1.2 --data-offset=128M --level=6 --layout=ls --chunk=512 \ --raid-devices=7 missing missing /dev/mapper/overlay-{sdf,sdl,sdb,sdc,sdi}
沒有保修,我顯然沒有自己嘗試過。
一旦您確認它可以工作,您就可以將更改送出到磁碟(應用經過驗證的步驟以在沒有覆蓋的情況下工作)。然後這一次,
resize2fs
文件系統正確(14G
應該可以工作),然後縮小 RAID 並希望它不會再次卡住。可能不需要備份文件mdadm --grow
,如果您確實使用了備份文件,請確保不要失去它。