Linux-Mint

如何真正正確地重新創建 RAID1

  • November 10, 2018

系統:

裝有 Linux Mint 17.3 的筆記型電腦,1 個用於系統的 SSD 和 2 個用於 RAID1 的 HDD,使用mdadm.

情況:

在不知道如何正確創建 RAID1 的情況下,我創建得很糟糕。

  • GParted 顯示一個警告,主gpt分區表不存在,並且它正在使用備份分區表,我認為它顯示了兩次
  • GParted 顯示兩個 HDD 上的分區包含ext4文件系統,而不是linux-raid文件系統
  • GParted 沒有raid在兩個 HDD 上顯示標誌
  • 重啟導致陣列無法工作,我的意思是它不僅沒有自動掛載,而且如果不停止陣列並重新組裝它就無法掛載
  • 可能還有其他我沒有註意到的事情,比如我不知道陣列(我的意思是鏡像)是否正常工作

在這個答案中,請明確您的所有數據都將在兩個陣列成員(驅動器)上被銷毀,因此請先備份它!


打開終端變成rootsu);如果您已sudo啟用,您也可以這樣做sudo -i;查看man sudo所有選項):

sudo -i

檢查mdX數組的編號 ( ):

cat /proc/mdstat

假設它是md0並且它已安裝在 上/mnt/raid1,首先我們必須解除安裝並停止陣列:

umount /mnt/raid1
mdadm --stop /dev/md0

我們需要擦除兩個驅動器上的超級塊,假設sdasdb

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

引用自:https://unix.stackexchange.com/questions/288947