Raid
mdadm 使用 512 字節塊建構遺留數組
我正在嘗試使用 mdadm 建構一個數組。該數組有 512 字節(不是千字節)大小的條帶。因為 mdadm 接受以千字節為單位的塊參數,而不是以字節為單位,所以我無法正確建構此數組。
mdadm --build -n2 -c512 -lraid0 /dev/md0 /dev/sdb /dev/sdc
建構塊大小為 512 KiB 的數組。
mdadm --build -n2 -c.5 -lraid0 /dev/md0 /dev/sdb /dev/sdc
返回錯誤。
有任何想法嗎?我通常會手動重建 RAID。但是這個有 4TB 大。我可以將其重建為 LVM,但我希望避免這種情況。有任何想法嗎?
我有同樣的問題,我通過我寫的一個小 Linux FUSE 程序解決了它。它被命名為xraid,我把它放在Sourceforge 上。
組裝 RAID:
- 下載並編譯 xraid
- 執行:
mkdir mnt ./xraid mnt 512 /dev/sdb /dev/sdc
- 您現在應該能夠訪問 mnt/xraid 下的 RAID。
今天我不得不從一個 2 磁碟機箱中“去 RAID-0”一個原始陣列。這是我用來從具有 1K (1024b) 條帶的 2x1TB 驅動器建構 2TB 磁碟映像文件的腳本。根據需要進行修改。如果您有超過 2 個 RAID-0 磁碟,則需要為每個添加的磁碟複製和修改將輸出推進 1 個塊的行;額外的計數器已經包含在該行中。
格式化(如果願意,可以使用 ksh 而不是 Bash):
#!/bin/bash A=0; C=0; S=0; ERR=0 STRIPE=1024 # Stripe size in bytes (not KiB) FN=raid_recovery.bin # Output file name while [ $ERR -eq 0 ] do # Copy from first device dd if=/dev/sdc of=$FN bs=$STRIPE seek=$C skip=$A count=1 conv=notrunc 2>/dev/null || ERR=1 # Advance output by 1 block; copy from second device # For 3+ disks, copy-paste this line for every added disk and modify 'if=' for each [ $ERR -eq 0 ] && C=$((C + 1)) && dd if=/dev/sdk of=$FN bs=$STRIPE seek=$C skip=$A count=1 conv=notrunc 2>/dev/null || ERR=1 # Update source, dest, and status delay counters A=$((A + 1)); C=$((C + 1)); S=$((S + 1)) # Display current output position periodically [ $S -ge 256 ] && S=0 && echo -n $'\r'"$C blocks done" done
單行版本:
A=0; C=0; S=0; ERR=0; STRIPE=1024; FN=raid_recovery.bin; while [ $ERR -eq 0 ]; do dd if=/dev/sdc of=$FN bs=$STRIPE seek=$C s kip=$A count=1 conv=notrunc 2>/dev/null || ERR=1; [ $ERR -eq 0 ] && C=$((C + 1)) && dd if=/dev/sdk of=$FN bs=$STRIPE seek=$C skip=$A count=1 conv=notr unc 2>/dev/null || ERR=1; A=$((A + 1)); C=$((C + 1)); S=$((S + 1)); [ $S -ge 256 ] && S=0 && echo -n $'\r'"$C blocks done"; done