如何真正正確地重新創建 RAID1
系統:
裝有 Linux Mint 17.3 的筆記型電腦,1 個用於系統的 SSD 和 2 個用於 RAID1 的 HDD,使用
mdadm
.情況:
在不知道如何正確創建 RAID1 的情況下,我創建得很糟糕。
- GParted 顯示一個警告,主
gpt
分區表不存在,並且它正在使用備份分區表,我認為它顯示了兩次- GParted 顯示兩個 HDD 上的分區包含
ext4
文件系統,而不是linux-raid
文件系統- GParted 沒有
raid
在兩個 HDD 上顯示標誌- 重啟導致陣列無法工作,我的意思是它不僅沒有自動掛載,而且如果不停止陣列並重新組裝它就無法掛載
- 可能還有其他我沒有註意到的事情,比如我不知道陣列(我的意思是鏡像)是否正常工作
在這個答案中,請明確您的所有數據都將在兩個陣列成員(驅動器)上被銷毀,因此請先備份它!
打開終端變成
root
(su
);如果您已sudo
啟用,您也可以這樣做sudo -i
;查看man sudo
所有選項):sudo -i
檢查
mdX
數組的編號 ( ):cat /proc/mdstat
假設它是
md0
並且它已安裝在 上/mnt/raid1
,首先我們必須解除安裝並停止陣列:umount /mnt/raid1 mdadm --stop /dev/md0
我們需要擦除兩個驅動器上的超級塊,假設
sda
和sdb
:mdadm --zero-superblock /dev/sda1 mdadm --zero-superblock /dev/sdb1
讓我們開始工作吧;如果之前有任何數據和文件系統,我們應該擦除驅動器。假設我們有 2 個成員:
sda
,sdb
:pv < /dev/zero > /dev/sda pv < /dev/zero > /dev/sdb
如果您出於自己的原因跳過上一步,則需要擦除兩個驅動器上的所有文件系統。然後檢查是否沒有留下任何東西,您可以在兩個驅動器上使用 GParted 偷看,如果有任何文件系統以外的文件系統
unknown
,請擦除它。首先,我們擦除所有現有分區,假設
sda
包含 3 個分區,則:wipefs --all /dev/sda3 wipefs --all /dev/sda2 wipefs --all /dev/sda1
在兩個驅動器上使用它並執行所有分區。
然後,我們使用以下命令擦除分區方案:
wipefs --all /dev/sda wipefs --all /dev/sdb
然後,我們使用 GUID 分區表 (GPT) 初始化兩個驅動器:
gdisk /dev/sda gdisk /dev/sdb
在這兩種情況下都使用以下內容:
o
Enter
用於新的空 GUID 分區表 (GPT)
y
Enter
以確認您的決定
w
Enter
寫入更改
y
Enter
以確認您的決定現在,我們需要對兩個驅動器進行分區,但不要對 GParted 執行此操作,因為它會在程序中創建一個文件系統,我們不希望
gdisk
再次使用它:gdisk /dev/sda gdisk /dev/sdb
在這兩種情況下都使用以下內容:
n
Enter
對於第一個分區的新分區
Enter
對於第
Enter
一個扇區的預設值對於 Linux RAID 類型
Enter
的最後一個扇區的預設值寫入更改以確認您的決定
fd00
Enter
w
Enter
y
Enter
要三重檢查是否沒有遺留任何東西,您可以使用 GParted 查看兩個新創建的分區,如果它們包含除 之外的任何文件系統
unknown
,請擦除它:wipefs --all /dev/sda1 wipefs --all /dev/sdb1
您現在可以檢查驅動器:
mdadm --examine /dev/sda /dev/sdb
它應該說:
(type ee)
如果是這樣,我們現在檢查分區:
mdadm --examine /dev/sda1 /dev/sdb1
它應該說:
No md superblock detected
如果是這樣,我們可以創建 RAID1 陣列:
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
我們將等到數組完全創建,我們可以觀察這個過程:
watch -n 1 cat /proc/mdstat
創建數組後,我們應該查看它的詳細資訊:
mdadm --detail /dev/md0
它應該說:
State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0
現在我們在陣列上創建文件系統,如果您使用
ext4
,最好避免這樣做,因為這ext4lazyinit
會花費大量時間,因此名稱為“lazyinit”,因此我建議您避免使用這個:mkfs.ext4 /dev/md0
相反,您應該使用以下命令強制進行完整的即時初始化:
mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0
通過指定這些選項,inode 和日誌將在創建期間立即初始化,這對於更大的數組很有用。
如果您選擇走捷徑並
ext4
使用“更好地避免命令”創建文件系統,請注意ext4lazyinit
初始化所有 inode 將花費大量時間,您可以觀察它直到完成,例如:iotop
無論選擇哪種方式進行文件系統初始化,都應該在它完成初始化後掛載它。
我們現在為這個 RAID1 陣列創建一些目錄:
mkdir --parents /mnt/raid1
只需安裝它:
mount /dev/md0 /mnt/raid1
由於我們基本上完成了,我們可以再次使用 GParted 來快速檢查它是否顯示
linux-raid
文件系統,以及raid
兩個驅動器上的標誌。如果是這樣,我們正確地創建了帶有 GPT 分區的 RAID1 陣列,現在可以在其上複製文件。
查看
md0
文件系統的 UUID:blkid /dev/md0
將 UUID 複製到剪貼板。
現在我們需要
fstab
使用您最喜歡的文本編輯器進行編輯:nano /etc/fstab
並添加一個條目:
UUID=<the UUID you have in the clipboard> /mnt/raid1 ext4 defaults 0 0
保存更改後,您可以檢查它是否正確:
mount --all --verbose | grep raid1
它應該說:
already mounted
如果是,我們保存數組配置;如果您還沒有創建任何
md
設備,您可以簡單地執行以下操作:mdadm --detail --scan >> /etc/mdadm/mdadm.conf
如果已經存在數組,只需執行前面的命令而不重定向到 conf 文件:
mdadm --detail --scan
mdadm.conf
並手動將新數組添加到文件中。最後,不要忘記更新您的 initramfs:
update-initramfs -u
檢查您是否按計劃完成了一切,如果是,您可以重新啟動:
reboot --reboot