重启后恢复并挂载Raid-1阵列(md1)的技术咨询
问题描述
我之前用标准的mdadm流程给两块硬盘(sde和sdf)创建了Raid-1阵列,命名为md1,挂载到了/mnt/storage。但重启后md1就找不到了,不过/mnt/plex的Raid-5阵列工作正常。我想知道是阵列丢了,还是只需要重新关联分区到正确的挂载点?
以下是相关命令输出:
lsblk 输出
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 63.4M 1 loop /snap/core20/1974 loop1 7:1 0 63.5M 1 loop /snap/core20/2015 loop2 7:2 0 40.8M 1 loop /snap/snapd/19993 loop3 7:3 0 111.9M 1 loop /snap/lxd/24322 loop4 7:4 0 40.8M 1 loop /snap/snapd/20092 sda 8:0 1 7.3T 0 disk └─md0 9:0 0 21.8T 0 raid5 /mnt/plex sdb 8:16 1 7.3T 0 disk └─md0 9:0 0 21.8T 0 raid5 /mnt/plex sdc 8:32 1 7.3T 0 disk └─md0 9:0 0 21.8T 0 raid5 /mnt/plex sdd 8:48 1 7.3T 0 disk └─md0 9:0 0 21.8T 0 raid5 /mnt/plex sde 8:64 0 3.6T 0 disk sdf 8:80 0 3.6T 0 disk nvme0n1 259:0 0 931.5G 0 disk ├─nvme0n1p1 259:1 0 1G 0 part /boot/efi └─nvme0n1p2 259:2 0 930.5G 0 part /
blkid 输出
/dev/nvme0n1p1: UUID="255C-50C9" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="26565297-8615-4534-88b8-a160ab111fe4" /dev/nvme0n1p2: UUID="ac32d63a-e8dc-4f58-b677-507491ed46de" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="25fa09fa-6781-49bf-927c-89e721f71154" /dev/sdd: UUID="8051a9fa-3272-6a40-3950-5897a2b600f4" UUID_SUB="cb838ac3-6c2a-bfb0-fd0d-f7c63c447aa3" LABEL="tron:0" TYPE="linux_raid_member" /dev/sdb: UUID="8051a9fa-3272-6a40-3950-5897a2b600f4" UUID_SUB="e4209087-7804-1e66-c3d2-dfef0f898b73" LABEL="tron:0" TYPE="linux_raid_member" /dev/md0: UUID="f81c3ae4-363f-453a-ab49-1e716b27fc3b" BLOCK_SIZE="4096" TYPE="ext4" /dev/sdc: UUID="8051a9fa-3272-6a40-3950-5897a2b600f4" UUID_SUB="f8da02fe-22e3-6f55-880d-c1d52c78167e" LABEL="tron:0" TYPE="linux_raid_member" /dev/sda: UUID="8051a9fa-3272-6a40-3950-5897a2b600f4" UUID_SUB="d6bfc2f7-056d-441a-023f-25d73804c456" LABEL="tron:0" TYPE="linux_raid_member" /dev/loop1: TYPE="squashfs" /dev/loop4: TYPE="squashfs" /dev/loop2: TYPE="squashfs" /dev/loop0: TYPE="squashfs" /dev/loop3: TYPE="squashfs" /dev/sdf: PTUUID="e6979b33-6f82-11ea-96f0-0026b98cb28a" PTTYPE="gpt" /dev/sde: PTUUID="e6a40000-6f82-11ea-96f0-0026b98cb28a" PTTYPE="gpt"
/etc/fstab 内容
# /etc/fstab: static file system information. # # Use 'blkid' 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> # / was on /dev/nvme0n1p2 during curtin installation /dev/disk/by-uuid/ac32d63a-e8dc-4f58-b677-507491ed46de / ext4 defaults 0 1 # /boot/efi was on /dev/nvme0n1p1 during curtin installation /dev/disk/by-uuid/255C-50C9 /boot/efi vfat defaults 0 1 /swap.img none swap sw 0 0 /dev/md0 /mnt/plex ext4 defaults,nofail,discard 0 0 #UUID=489c654c-58e8-4187-b478-b37bc6af81f9 /mnt/storage auto defaults,x-parent=f87a9a2f:b87b822b:60dc9e96:9d59d84f 0 0 #UUID=489c654c-58e8-4187-b478-b37bc6af81f9 /mnt/storage auto defaults,x-parent=f87a9a2f:b87b822b:60dc9e96:9d59d84f 0 0
注:我把最后两行注释掉了,因为之前会导致启动超时,注释后就不卡了,但这应该是问题的一部分。如果不注释的话,会出现“timed out waiting for device”的错误。
解决方案
先别慌,你的Raid-1阵列大概率没丢,只是重启后系统没自动识别并组装它而已,咱们一步步来恢复:
1. 检查硬盘上的Raid元数据
首先确认sde和sdf上是否还保留着Raid-1的元数据,运行以下命令:
mdadm --examine /dev/sde /dev/sdf
如果输出里能看到Raid相关的信息(比如Raid级别、阵列UUID等),说明阵列数据还在,只是没被组装。
2. 手动组装Raid-1阵列
如果上面的命令确认有元数据,就手动组装阵列:
mdadm --assemble /dev/md1 /dev/sde /dev/sdf
执行完后,再用lsblk或者mdadm --detail /dev/md1检查一下,应该能看到md1已经存在了。
3. 临时挂载阵列验证
组装成功后,先临时挂载到/mnt/storage,确认数据没问题:
mount /dev/md1 /mnt/storage
然后可以进入/mnt/storage看看文件是否都在,确认阵列正常工作。
4. 配置系统重启时自动组装阵列
为了避免下次重启又出现同样的问题,需要把阵列信息保存到mdadm的配置文件里:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
这样系统启动时,mdadm会自动扫描并组装这个阵列。
5. 修复fstab配置,实现自动挂载
接下来修正/etc/fstab里的配置,首先获取md1的正确UUID:
blkid /dev/md1
找到输出里的UUID字段,比如类似UUID="xxxx-xxxx"的内容。
然后打开/etc/fstab,把之前注释的两行替换成正确的配置(把下面的xxx-xxxx换成你实际的UUID):
UUID=xxx-xxxx /mnt/storage ext4 defaults,nofail 0 0
这里用defaults,nofail参数,nofail可以避免阵列没组装成功时导致系统启动超时,和你之前解决的问题对应上。
6. 验证配置并重启测试
最后运行以下命令,验证fstab配置是否正确:
mount -a
如果没有报错,说明配置没问题,现在可以重启系统,看看md1是否会自动组装并挂载到/mnt/storage了。
备注:内容来源于stack exchange,提问作者Adam

