上下文:在尝试使用 LVM 设置(包括根卷的 RAID1)安装 Arch Linux 时,我遇到了我所描述的问题在 Arch Linux 论坛上。我从未找到解决此问题的方法,但在我从头开始重新安装整个系统后,除了交换文件(我创建了一个交换分区)之外,它消失了,所以我忘记了它。
在系统暂停时,意外地关闭了我的系统的电源(上面的“从头开始重新安装”系统,加上使用了几个月),然后我重新启动了系统,再次出现相同的错误。
问题就像上面链接中详细描述的那样。为了使 Stack Exchange 成为一个自我完善的知识库,我将帖子的内容包含在这里:
我正在使用 LVM 安装 Arch Linux。大约是我第三次或第四次安装 Arch,但我第一次尝试 LVM。这是我的磁盘布局:
我有两个物理存储介质,/dev/sda(SSD,容量约100GB)和/dev/sdb(HDD,容量约1TB)。
使用LVM,我创建了一个卷组volumegroup0,其中包含:
- 使用 raid1 在 SSD 和 HDD 之间镜像的系统卷,占用 SSD 的大部分容量 (volumegroup0/systemvolume_raid1),具有 ext4 文件系统(包含 16GB 的交换文件)
- SSD 上的启动卷大约 500MB (volumegroup0/boot),带有 btrfs 文件系统
- HDD 上的主卷,SSD 上有 10GB 缓存池,可实现更快的访问(volumegroup0/home),具有 btrfs 文件系统
- HDD 上的 var 卷 (volumegroup0/var),SSD 上有 2GB 缓存池,与主卷一样,具有 ext4 文件系统
- 用于备份系统卷的快照卷,称为volumegroup0/systemvolume_snapshot。
现在,昨晚系统可以启动了,我以为我已经成功完成安装了。但今天早上启动时,系统无法挂载根卷,并让我进入紧急 shell。
使用默认 GRUB 参数启动(我使用的是 GRUB),“安静”,关闭,这是启动失败后的屏幕显示:
:: 运行早期钩子 [udev] 开始版本 242.29-2-arch :: 运行早期钩子 [lmv2] :: 运行钩子 [udev] :: 触发 uevents...
在出现以下内容之前,该信息会在屏幕上停留大约 30 秒左右:
等待设备 /dev/mapper/volumegroup0-systemvolume_raid1 10 秒 ...
然后,10 秒后:
错误:找不到设备“/dev/mappervolumegroup0-systemvolume_raid1”。跳过 fsck。 :: 在真实根挂载上挂载“/dev/mappervolumegroup0-systemvolume_raid1”:/new_root:未指定文件系统类型。您现在被放入紧急外壳中。 sh: 无法访问 tty;作业控制已关闭。 [根文件系统]#
在通过从 archiso live USB 启动来寻找问题的解决方案时,我注意到一些奇怪的事情。启动后立即,如果我
ls /dev/映射器
或者
ls /dev/卷组0
,输出包含我期望的每个逻辑卷——除了 systemvolume_raid1。即使volumegroup0-systemvolume_raid1_rimage0和1以及volumegroup0-systemvolume_raid1_rmeta0和1也存在于/dev/mapper中,但根卷本身不存在。但如果我跑
扫描仪
(使用或不使用 --mknodes 然后再次列出其中一个目录,systemvolume_raid1 存在并且正确,就好像没有任何问题一样。我可以毫无问题地安装它 - 我已经这样做了,以便在检查后尝试重新生成 initramfs必要的模块和钩子存在于 mkinitcpio.conf 中(它们是),并且在没有交换文件的情况下重新生成 /etc/fstab (使用 genfstab -U)(因为重新生成 /etc/fstab 以包含自动激活交换的行是我的最后一件事做过)。
[ 的内容/etc/fstab
包含在原始论坛帖子中,但这些内容并不完全相同,因为 ;请参阅下面的正确版本]
更新:
如果我跑
lvs-a
当 systemvolume_raid1 不可见时,我在包含 lvs -a 正确输出的表上方得到很多行以下输出:
预期的 raid 段类型,但结果为 NULL。
笔记:
Arch Wiki 上的 LVM 文章表示,您应该确保内核参数“root”指向映射设备,“例如 /dev/[斜体]vg-name[/italic]/[斜体]lv-name[/italic] ”。在我的例子中,该参数指向 /dev/mapper/volumegroup0-systemvolume_raid1,但是将其更改为 wiki 推荐的形式不会更改任何内容,除了启动时错误消息中的设备名称(它成为正如人们所期望的那样,“根”)。
我正在使用 GRUB,通过 grub-mkconfig 生成配置(如果相关的话)。
我的问题似乎类似于Unix & Linux Stack Exchange 上这个悬而未决的问题。
以下是 /etc/fstab 的正确内容与上面链接的论坛帖子中的版本不同:
#/dev/mapper/volumegroup0-systemvolume_raid1
UUID=... / ext4 rw,relatime 0 1
#/dev/mapper/volumegroup0-var
UUID=... /var ext4 rw,relatime,stripe=16 0 2
#/dev/mapper/volumegroup0-boot
UUID=... /boot btrfs rw,relatime,ssd,space_cache,subvolid=5,subvol=/ 0 0
#/dev/mapper/volumegroup0-home
UUID=... /home btrfs rw,relatime,ssd,space_cache,subvolid=5,subvol=/ 0 0
#/dev/mapper/volumegroup0-swap
UUID=... none swap defaults 0 0
我确信该问题与系统启动时未能“激活”根卷或根本检查根卷有关,但我不知道以什么方式。
lvscan
一个相关点可能是从实时 USB 启动后的输出是:
ACTIVE '/dev/volumegroup0/home' [500.00 GiB] inherit
ACTIVE '/dev/volumegroup0/var' [50.00 GiB] inherit
ACTIVE Original '/dev/volumegroup0/systemvolume_raid1' [83.50 GiB] inherit
inactive '/dev/volumegroup0/boot' [500.00 MiB] inherit
ACTIVE Snapshot '/dev/volumegroup0/systemvolume_snapshot' [40.00 GiB] inherit
inactive '/dev/volumegroup0/swap' [16.00 GiB] inherit
inactive Snapshot '/dev/volumegroup0/systemvolume_pre_dwarf' [3.00 GiB] inherit
pvscan
运行诸如或 之类的命令后vgscan
(我说“诸如”是因为其他命令可能具有相同的效果,但我没有测试每个可能的 LVM 命令),上面标记为的所有卷都inactive
变为active
.这似乎支持我的假设,即启动时某些东西没有被正确激活,但我不能肯定地说任何事情。
为什么系统无法启动?我该如何解决这个问题?
答案1
我可以通过删除 raid 1 来解决这个问题:
lvconvert -m 0 lv /dev/to/remove
我无法弄清楚为什么 raid 1 卷在启动期间没有激活。我可以在启动后激活它们,没有问题。我尝试添加一个 initcpio 自定义挂钩来手动激活卷,但无法以这种方式修复它,可能只是因为我不确定该挂钩是否正在运行。