使用 GPT 分區的 mdadm RAID 實現
我目前的想法是創建一個軟體陣列,RAID-6 類,有 4 個成員驅動器,使用
mdadm
.具體來說,驅動器將是小型伺服器戴爾 T20 中 SATA 上的 1 TB 硬碟驅動器。
作業系統為GNU/Linux Debian 8.6(後升級:Jessie ⟶ Stretch ⟶ Buster)
在我的情況下,這將產生 2 TB 的磁碟空間和 2 TB 的奇偶校驗。
我還想將它與 GPT 分區表一起使用,為了讓它工作,我不確定如何具體進行,假設我更願意純粹在終端上執行此操作。
由於我從未創建過 RAID 陣列,您能否指導我應該如何進行?
筆記:
- 該數組將僅用於唯一數據。沒有啟動或作業系統。
- 由於這個陣列的目的,我選擇了 RAID-6。陣列必須能夠承受兩個驅動器故障。由於我被硬體限制為 4 個驅動器,因此我所知道的 RAID-6 沒有替代品。(不管 RAID-6 的減速看起來多麼醜陋,在這個陣列中都沒有關係。)
在這個答案中,明確表示所有陣列成員(驅動器)上的所有數據都將被銷毀,因此請先備份它!
打開終端變成
root
(su
);如果您已sudo
啟用,您也可以這樣做sudo -i
;查看man sudo
所有選項):sudo -i
首先,我們應該擦除驅動器,如果之前有任何數據和文件系統,那就是。假設我們有 4 個成員:
sdi
,sdj
,sdk
,sdl
。為了直覺地獲得此過程的回饋,此處使用了pv
(管道查看器):pv < /dev/zero > /dev/sdi pv < /dev/zero > /dev/sdj pv < /dev/zero > /dev/sdk pv < /dev/zero > /dev/sdl
或者,要檢查是否沒有遺留任何東西,您可以在所有驅動器上使用 GParted 偷看,如果有任何分區有或沒有任何文件系統,擦除它就足夠了,儘管我自己更喜歡上面的歸零所有所涉及的驅動器,記得在這樣做之前解除安裝所有分區,它可以類似於這些單行:
umount /dev/sdi?; wipefs --all --force /dev/sdi?; wipefs --all --force /dev/sdi umount /dev/sdj?; wipefs --all --force /dev/sdj?; wipefs --all --force /dev/sdj umount /dev/sdk?; wipefs --all --force /dev/sdk?; wipefs --all --force /dev/sdk umount /dev/sdl?; wipefs --all --force /dev/sdl?; wipefs --all --force /dev/sdl
然後,我們使用 GUID 分區表 (GPT) 初始化所有驅動器,我們需要對所有驅動器進行分區,但不要使用 GParted 執行此操作,因為它會在此過程中創建一個我們不想要的文件系統,改用
gdisk
:gdisk /dev/sdi gdisk /dev/sdj gdisk /dev/sdk gdisk /dev/sdl
在所有情況下,請使用以下內容:
o
Enter
用於新的空 GUID 分區表 (GPT)
y
Enter
以確認您
n
Enter
對新分區的決定
Enter
預設為第一個分區
Enter
預設為第一個扇區
Enter
預設為最後一個扇區
fd00
Enter
Linux RAID 類型
w
Enter
寫入更改
y
Enter
以確認您的決定您現在可以檢查驅動器:
mdadm --examine /dev/sdi /dev/sdj /dev/sdk /dev/sdl
它應該說:
(type ee)
如果是這樣,我們現在檢查分區:
mdadm --examine /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
它應該說:
No md superblock detected
如果是這樣,我們可以創建 RAID6 陣列:
mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
我們應該等到數組完全創建,這個過程我們可以很容易地
watch
:watch cat /proc/mdstat
創建數組後,我們應該看一下它的細節:
mdadm --detail /dev/md0
它應該說:
State : clean
Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0
現在我們在數組上創建一個文件系統,如果你使用,最好避免使用
ext4
下面的隱藏ext4lazyinit
命令,因為在大數組的情況下會花費大量時間,因此名稱為“ lazyinit ”,因此我推薦你為了避免這個:
mkfs.ext4 /dev/md0
相反,您應該強制進行完整的即時初始化(保留 0%,
root
因為它是一個數據數組):mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0
通過指定這些選項,inode 和日誌將在創建期間立即初始化,這對於更大的數組很有用。
如果您選擇走捷徑並
ext4
使用“更好地避免命令”創建文件系統,請注意ext4lazyinit
初始化所有 inode 將花費大量時間,您可以觀察它直到完成,例如使用iotop
ornmon
。無論選擇哪種方式進行文件系統初始化,都應該在它完成初始化後掛載它。
我們現在為這個 RAID6 陣列創建一些目錄:
mkdir -p /mnt/raid6
只需安裝它:
mount /dev/md0 /mnt/raid6
由於我們基本上完成了,我們可以再次使用 GParted 來快速檢查它是否顯示
linux-raid
文件系統,以及raid
所有驅動器上的標誌。如果是這樣,我們正確地創建了帶有 GPT 分區的 RAID6 陣列,現在可以在其上複製文件。
查看
md
文件系統的 UUID:blkid /dev/md0
將 UUID 複製到剪貼板。
現在我們需要
fstab
用你最喜歡的文本編輯器來編輯 ,我用過nano
,但sudoedit
最好用:nano /etc/fstab
並添加一個條目:
UUID=<the UUID you have in the clipboard> /mnt/raid6 ext4 defaults 0 0
我自己不建議使用
defaults
一組標誌,我只是希望這條線不要過於復雜。這是我在 UPS 備份數據 RAID 上使用的掛載標誌(而不是
defaults
): nofail,nosuid,nodev,noexec,nouser,noatime,auto,async,rw,data=journal,errors=remount-ro您可以在保存更改後檢查它是否正確:
mount -av | grep raid6
它應該說:
already mounted
如果是,我們保存數組配置;如果您還沒有創建任何
md
設備,您可以簡單地執行以下操作:mdadm --detail --scan >> /etc/mdadm/mdadm.conf
如果已經存在數組,只需執行前面的命令而不重定向到配置文件:
mdadm --detail --scan
並手動將新數組添加到配置文件中。
最後,不要忘記更新你的
initramfs
,否則你的新數組只會自動只讀組裝,可能是/dev/md127
或類似的:update-initramfs -u -k all
檢查您是否按計劃完成了一切,如果是,您可以重新啟動:
reboot