为什么这个 LVM RAID1 系统无法启动?

为什么这个 LVM RAID1 系统无法启动?

上下文:在尝试使用 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。

笔记:

  1. Arch Wiki 上的 LVM 文章表示,您应该确保内核参数“root”指向映射设备,“例如 /dev/[斜体]vg-name[/italic]/[斜体]lv-name[/italic] ”。在我的例子中,该参数指向 /dev/mapper/volumegroup0-systemvolume_raid1,但是将其更改为 wiki 推荐的形式不会更改任何内容,除了启动时错误消息中的设备名称(它成为正如人们所期望的那样,“根”)。

  2. 我正在使用 GRUB,通过 grub-mkconfig 生成配置(如果相关的话)。

  3. 我的问题似乎类似于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 自定义挂钩来手动激活卷,但无法以这种方式修复它,可能只是因为我不确定该挂钩是否正在运行。

相关内容