我最近更新了我的系统,重新启动后出现以下情况:
ERROR: device ‘UUID=...’ not found. Skipping fsck.
mount: /new_root: can’t find UUID=...
You are now being dropped into an emergency shell.
我的根文件系统位于 RAID 阵列上,blkid
从紧急 shell 运行显示该阵列未列出。
我在 RAID1 中有/dev/sda2
和通常它会安装到.它们有一个并被组装成一个。而在 RAID0 中,通常安装到.它们有一个并被组装成一个。启动时的错误正在寻找./dev/sdb2
/boot
UUID="b45...
/dev/md1
UUID="436...
/dev/sda3
/dev/sdb3
/
UUID="8dc...
/dev/md2
UUID="d0d...
d0d...
我启动到实时 USB 并运行blkid
,阵列就在那里。所以我安装了数组 、proc
、sys
、dev
和boot
。我检查了一下/etc/mdadm.conf
,发现所有ARRAY
行都被注释掉了,所以我运行了:
# mdadm --detail --scan >> /mnt/etc/mdadm.conf
我检查了 UUID 是否与我在数组(b45...
和8dc...
)中使用的两个分区相匹配。然后我chroot
就加入了。
然后我检查了一下/etc/mkinitcpio.conf
,发现设置mdadm_udev
中缺少该内容HOOKS
。所以我读了那句话。
从那里,我尝试了以下各项,然后重新启动:
# pacman -S linux
# mkinitcpio -p linux
# mkinitcpio -P
对于每个我都可以看到它构建了mdadm_udev
钩子,它告诉我:
Custom /etc/mdadm.conf file will be used in initramfs for assembling arrays
但是当我重新启动时,我收到相同的错误,并且blkid
在紧急 shell 中使用显示我的 RAID 阵列未列出(但组成它的分区在那里,并且 UUID 与 中的内容匹配mdadm.conf
)。
我还添加了内核参数,raid0.default_layout=2
结果相同。它以前从未存在过,但维基似乎表明我需要它。
Linux 软件包是linux-5.12.6.arch1-1
,在启动错误之前它告诉我它是:
Starting version 248.3-2-arch
我错过了什么导致阵列无法在启动时组装?
答案1
我仍然不知道最初是什么导致了这个问题。但解决方案非常简单,我觉得很愚蠢。
问题是我已经运行了:
# mount /dev/md1 /mnt/boot
chroot
在ing 和运行之前从实时 USB 中获取mkinitcpio
,因为我想检查 grub 中的设置。所以initramfs
我创建的映像mdadm
位于 RAID 阵列上。加载的内容initramfs
对此一无所知mdadm
,因此没有构建数组。
mkinitcpio
解决方案是在chroot
不安装数组的情况下运行/boot
。