媽媽;以前工作;“失敗”後,由於磁碟大小無法加入陣列
抽象的
我有一個功能正常的 Raid 5 陣列,我重新啟動了盒子,然後 mdadm 無法重新組裝一個元件。
看到它只是一個部分,我認為重新同步很容易。但事實證明這不起作用,因為顯然現在設備不夠大,無法加入陣列!?
初始突襲設置
可悲的是相當複雜。我有一個 Raid 5,它結合了兩個 3 TB 磁碟和兩個線性 RAID(由 1tb+2tb 組成)。我沒有對磁碟進行分區,也就是說,raid 跨越物理磁碟。事後看來,這可能是導致最初失敗的原因。
命運重啟後
mdadm 將拒絕組裝其中一個線性陣列,聲稱不存在超級塊(使用 mdadm –examine 檢查兩者都沒有返回任何內容)。更奇怪的是,顯然他們仍然有一些分區表。
在這一點上,我認為最快的解決方案是重新創建線性陣列,將其添加到更大的 raid5 陣列,然後重新同步。因此,我選擇只刪除那些分區表條目,即:將它們分區到空閒空間。然後我創建了一個跨越兩個磁碟的線性陣列。
# mdadm --create /dev/md2 --level=linear --raid-devices=2 /dev/sda /dev/sdc
但是,當嘗試將它們添加回數組時,我得到
# mdadm --add /dev/md0 /dev/md2 mdadm: /dev/md2 not large enough to join array
所以我正確地猜測磁碟縮小了嗎?
計數塊
我想是時候進行一些塊計數了!
線性陣列的兩個組成部分:
RO RA SSZ BSZ StartSec Size Device rw 256 512 4096 0 1000204886016 /dev/sda RO RA SSZ BSZ StartSec Size Device rw 256 512 4096 0 2000398934016 /dev/sdc
如果 mdadm 的線性模式沒有成本,則兩種大小的總和將大於 3tb 驅動器之一 (3000592982016)。但事實並非如此:
/proc/mdstat 報告線性數組的大小為 2930015024,比要求的少 120016
# mdadm --detail /dev/md0 | grep Dev\ Size Used Dev Size : 2930135040 (2794.39 GiB 3000.46 GB)
但這……太可惡了!在重新啟動之前(儘管是更早的化身),這個線性陣列是更大陣列的一部分!
我相信的事情發生了
重新啟動後,mdadm 發現陣列的一部分失去。由於它是最小的成員,因此陣列設備的大小會自動增長以填充下一個最小的設備。
但這聽起來不像呃,明智的行為,不是嗎?
另一種選擇是,由於某種原因,我不再創建最大尺寸的線性突襲,但是……這也有點荒謬。
我一直在思考要做的事情
縮小退化的陣列以排除“損壞”的線性陣列,然後再次嘗試 –add 和 –grow。但恐怕實際上並沒有改變設備大小。
由於我不明白到底出了什麼問題,我寧願先了解是什麼導致了這個問題,然後再匆忙做任何事情。
所以呃……我猜……嗯……磁碟……縮小了?
預設情況下,元數據的區域
mdadm
儲備可能會增加……我最近遇到了一些案例,mdadm
無緣無故浪費了高達 128MiB。您要檢查mdadm --examine /dev/device*
條目data offset
。理想情況下,它應該不超過 2048 個扇區。如果這確實是問題所在,您可以
mdadm --create
與--data-offset=
參數一起使用以mdadm
減少元數據的浪費空間。如果這仍然不夠,您必須嘗試使用舊
0.90
元數據(這可能是最節省空間的,因為它不使用此類偏移),或者稍微縮小 RAID 的另一端(記得縮小LV /文件系統優先)。