Arch不会在启动时挂载btrfs阵列


8

作为数据分区,我有一个多磁盘btrfs文件系统。我的根磁盘是ext4

Fstab:

UUID=290624c6-6b95-41fd-94a1-923ebca64b83   /           ext4        rw,relatime,data=ordered    0 1
/dev/sdc    /mnt/btrfs  btrfs   rw,relatime,compress-force=zlib,autodefrag  0   0

当我启动机器时,它将等待1m30s并显示以下消息

A start job is running for dev-sdc.device

在那之后

Dependency failed for /mnt/btrfs

登录后我可以做

mount /mnt/btrfs
systemctl default

它将起作用。系统将正常启动。

我首先虽然可能需要使用mkinitcpio挂钩来做一些事情,但是此页面显示

Arch的默认mkinitcpio软件包包含一个标准的btrfs挂钩,足以获取多设备(RAID)支持。除此之外,内核还可以引导单设备btrfs根目录而无需任何钩子

因此,一切都应该开箱即用。

为什么它不起作用,我应该怎么做才能解决它?

Answers:


8

两个评论。首先,尝试通过Label或UUID而不是设备进行挂载。设备名称有时可以更改。

否则,btrfs需要先brtfs device scan调用,然后才能知道btrfs您计算机上的文件系统。我希望arch能处理这个问题,但是直到我为此创建了一个服务文件并将其放入后,它才以某种方式无法工作/etc/systemd/system/local-fs-pre.target.wants/btrfs-dev-scan.service

[Unit]
Description=Btrfs scan devices
Before=local-fs-pre.target
DefaultDependencies=false

[Service]
Type=oneshot
ExecStart=/usr/bin/btrfs device scan

[Install]
WantedBy=local-fs-pre.target

DefaultDependencies=false是必需的,否则它会使启动失败。(非Arch用户可能btrfs位于/sbin而不是/usr/bin

这是应该由btrfs钩子处理的(稍后我想了),但是仍然有可能出现问题。

但是,您可能还有其他问题。这Dependency failed表明一些较早的必需服务没有启动。我不知道那是什么,您应该检查journalctl -b并搜索依赖项投诉,它通常会指出确切的内容。至少,您会得到一连串失败的依赖关系-依赖关系失败有可能传播...

您还可以生成systemd-analyze plot > boot.svg并检查序列以什么顺序准确引导了什么。您可以从中猜测到底出了什么问题-谁在等谁?而且,怎么systemctl --failed说呢?


3

mkinitcpio您可以包括一个钩子以确保

btrfs device scan

将在引导过程中在挂载根文件系统之前运行。

您可以通过修改包括这个钩子/etc/mkinitcpio.conf,搜索线HOOKS,把btrfs前面udev

修改后,请务必通过以下方式重新生成initramfs: mkinitcpio -p linux

Arch Wiki实际上建议使用该udev钩子,但是我遇到了同样的问题,并已通过这种方式进行了修复。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.