Pet*_*mit 9 arch-linux systemd btrfs
作为数据分区,我有一个多磁盘 btrfs 文件系统。我的根磁盘是 ext4
表:
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
Run Code Online (Sandbox Code Playgroud)
当我启动机器时,它将等待 1 分 30 秒并显示消息
A start job is running for dev-sdc.device
Run Code Online (Sandbox Code Playgroud)
在那之后
Dependency failed for /mnt/btrfs
Run Code Online (Sandbox Code Playgroud)
当我登录时,我可以做
mount /mnt/btrfs
systemctl default
Run Code Online (Sandbox Code Playgroud)
它会起作用。系统将正常启动。
我首先虽然我可能需要用 mkinitcpio 钩子做一些事情,但这个页面说:
Arch 的默认 mkinitcpio 包包含一个标准的 btrfs 钩子,足以获得多设备 (RAID) 支持。除此之外,内核能够在没有任何钩子的情况下启动单设备 btrfs 根
所以一切都应该开箱即用。
为什么它不起作用,我应该怎么做才能解决它?
两条评论。首先,尝试通过标签或 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
Run Code Online (Sandbox Code Playgroud)
DefaultDependencies=false是必要的,否则它会搞砸引导。(非 Arch 用户可能已经btrfs位于/sbin而不是/usr/bin)
这是btrfshook应该处理的事情(我稍后想到了这一点),但仍然可能存在问题。
但是,您可能还有其他问题。这Dependency failed表明某些早期所需的服务没有启动。我不知道那可能是什么,您应该检查journalctl -b并搜索依赖项投诉,它通常会说明到底缺少什么。或者至少,您会得到一连串失败的依赖项 - 依赖项失败可能会传播......
您还可以生成systemd-analyze plot > boot.svg并检查以何种顺序确切启动的序列。你可以从中猜出到底出了什么问题——谁在等谁?而且,systemctl --failed说什么?
| 归档时间: |
|
| 查看次数: |
6094 次 |
| 最近记录: |