Raid

新的 RAID 陣列不會自動組裝,導致啟動問題

  • June 5, 2021

我剛剛問了這個問題,安裝新的 RAID1 陣列後無法啟動。我能夠到達終端,但是一旦我解決了這個問題,我意識到我的問題與其說是 fstab 引導問題,不如說是 mdadm 自動組裝問題。

我的系統上有三個 RAID1 陣列,/dev/md1安裝在//dev/md0安裝為swap,並且這些目前執行沒有問題。我沒有創建這些數組。我創建了一個新的 RAID1 陣列,我使用本指南/dev/md2將其格式化為 ext4 ,並在此過程中創建了一個新分區(唯一一個)(儘管 fdisk 從未明確要求提供名稱,但該指南還創建了一個類似命名的分區)。md2p1

創建這個新陣列後,我可以使用手動安裝

mount -t ext4 /dev/md2p1 /srv/Waveforms

這很好用。我能夠訪問該目錄並向其中添加了大約 700 GB 的數據。這樣做之後,我得到

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md2 : active raid1 sdc1[0] sdd1[1]
     1953423552 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
     961136576 blocks [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[1]
     15624128 blocks [2/2] [UU]

unused devices: <none>

,所以電腦清楚地辨識出數組。然後我用

sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf 

文件現在包含

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=afa7ccee:df4dfa79:a84dbc05:35401226
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=a0c526cc:6de93504:c8b94301:85474c49
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=1ac720e1:192b2c38:f6e0357b:f3e0074f

# This file was auto-generated on Thu, 10 Mar 2011 00:57:55 -0700
# by mkconf $Id$
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=afa7ccee:df4dfa79:a84dbc05:35401226
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=a0c526cc:6de93504:c8b94301:85474c49
ARRAY /dev/md2 level=raid1 num-devices=2 metadata=0.90 UUID=1ac720e1:192b2c38:f6e0357b:f3e0074f

這裡需要注意兩點。原始文件有metadata=00.90,但我將其修改為,metadata=0.90因為這解決了元數據無法辨識的小問題(快速Google搜尋將解釋這一點)。

第二個需要注意的是 auto 設置為 yes,這意味著系統應該在啟動時自動組裝所有陣列。一定是這種情況,因為我能夠啟動的事實必須意味著 /dev/md1 已經組裝好。

無論如何,現在麻煩了。重新啟動後,我的機器掛起並告訴我

fsck from util-linux-ng 2.17.2
/dev/md1: clean, 3680768/60071936 files, 208210802/240284144 blocks

我的 fstab 目前讀取

# /etc/fstab: static file system information.
#
# Use 'blkid -o value -s UUID' to print the universally unique identifier
# for a device; this may be used with UUID= as a more robust way to name
# devices that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/md1 during installation
UUID=1d3cb392-f522-485b-8516-a7791fc23c4d /               ext4    errors=remount-ro 0       1
# swap was on /dev/md0 during installation
UUID=6eb8e6f2-3166-4f77-883c-26268d636b0b none            swap    sw              0       0
/dev/md2p1 /srv/Waveforms            ext4    defaults,noauto              0       0

blkid
/dev/sda1: UUID="afa7ccee-df4d-fa79-a84d-bc0535401226" TYPE="linux_raid_member" 
/dev/sda2: UUID="a0c526cc-6de9-3504-c8b9-430185474c49" TYPE="linux_raid_member" 
/dev/sdb1: UUID="afa7ccee-df4d-fa79-a84d-bc0535401226" TYPE="linux_raid_member" 
/dev/sdb2: UUID="a0c526cc-6de9-3504-c8b9-430185474c49" TYPE="linux_raid_member" 
/dev/sdc1: UUID="1ac720e1-192b-2c38-f6e0-357bf3e0074f" TYPE="linux_raid_member" 
/dev/sdd1: UUID="1ac720e1-192b-2c38-f6e0-357bf3e0074f" TYPE="linux_raid_member" 
/dev/md0: UUID="6eb8e6f2-3166-4f77-883c-26268d636b0b" TYPE="swap" 
/dev/md1: UUID="1d3cb392-f522-485b-8516-a7791fc23c4d" TYPE="ext4" 
/dev/md2p1: UUID="867ee91e-527e-435b-b6bc-2f6d89d2d8c6" TYPE="ext4" 

我以前用過UUID=867ee91e-527e-435b-b6bc-2f6d89d2d8c6代替/dev/md2p1,但這沒有給我任何結果。我也嘗試過使用這個 md2p1 作為預設選項,defaults+noatime,errors=remount-ro,但沒有一個有效。

我可以通過修改 fstab 以排除我的新 md2p1 行來啟動。使用此配置啟動後,我得到

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sda1[0] sdb1[1]
     15624128 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
     961136576 blocks [2/2] [UU]

所以系統還沒有組裝md2。然後我可以執行

sudo mdadm --assemble --scan
[sudo] password for zach: 
mdadm: /dev/md2 has been started with 2 drives.

何處

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md2 : active raid1 sdc1[0] sdd1[1]
     1953423552 blocks [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[1]
     15624128 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
     961136576 blocks [2/2] [UU]

我現在可以像上面那樣手動安裝。所以問題似乎是 RAID1 陣列在啟動時沒有組裝,因此 fstab 無法辨識,因此我根本無法啟動,除非在恢復模式下。

我找到了這篇文章,但我認為它不適用於我,因為答案似乎是將 auto 設置為 yes,然後在啟動時自動組裝陣列。我的配置已經設置為執行此操作,所以我很茫然。

該文章中有一個似乎確實適用的答案,但我不明白他的解決方案是什麼。這是 Deplicator 的文章,上面寫著

重新啟動後,我再也看不到 /dev/md0。再次執行 mdadm –detail –scan (不將結果放入文件中)我會看到

ARRAY /dev/md/ubuntu:0 metadata=1.2 name=ubuntu:0 UUID=a8a570c6:96f61865:05abe131:5c2e2f7e

並手動安裝 /dev/md/ubuntu:0 會起作用。最後,這也是我放入 fstab 文件的內容。

fstab 中放入了什麼?問題似乎是我沒有在啟動時組裝 md2,因此每次 fstab 嘗試掛載 md2p1 分區時我都會掛起。這實際上可能與 md2 被分區而其他人沒有被分區有關,但我不明白為什麼會這樣。

編輯:以防萬一

uname -a
Linux ccldas2 2.6.32-74-server #142-Ubuntu SMP Tue Apr 28 10:12:19 UTC 2015 x86_64 GNU/Linux

兩個問題浮現在腦海

  1. 您在mdadm.conf. 替換(或註釋掉)ARRAY後面的三行塊,# definitions of existing MD arrays以便每個數組僅由您最近的掃描聲明。
  2. 無法在引導時建構的 RAID 陣列的典型情況是它們尚未在其中更新initramfs或未設置為在引導時執行。快速瀏覽您引用的指南似乎沒有提到這些步驟,但我可能是錯的。在 Debian 系統上,命令是:
dpkg-reconfigure mdadm    # Choose "all" disks to start at boot
update-initramfs -u       # Updates the existing initramfs

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