我正在尝试让 systemd 通过符号链接挂载卷。不幸的是,当我尝试等待 systemd 设备出现时超时。
# systemctl start mnt-ephemeral0.mount
A dependency job for mnt-ephemeral0.mount failed. See 'journalctl -xn' for details.
# journalctl -xn
Aug 04 17:02:09 i-c7a88499 systemd[1]: Expecting device dev-block-ec2-ephemeral0.device...
Aug 04 17:03:39 i-c7a88499 systemd[1]: Job dev-block-ec2-ephemeral0.device/start timed out.
Aug 04 17:03:39 i-c7a88499 systemd[1]: Timed out waiting for device dev-block-ec2-ephemeral0.device.
Aug 04 17:03:39 i-c7a88499 systemd[1]: Dependency failed for /mnt/ephemeral0.
消息说正在等待dev-block-ec2-ephemeral0.device
。我的单元文件指定了What=/dev/block/ec2/ephemeral0
,它是 的符号链接/dev/xvdb
。
man 5 systemd.device
说:
systemd 将为所有标有“systemd”udev 标签的内核设备动态创建设备单元
然而,它似乎只为/sys
路径创建设备单元。
# systemctl list-units | grep 'xvdb\|ephemeral0'
sys-devices-vbd\x2d2064-block-xvdb.device loaded active plugged /sys/devices/vbd-2064/block/xvdb
这ephemeral0
是一个正确识别的 udev 符号链接:
# udevadm info -q symlink -n /dev/xvdb
block/ec2/ephemeral0 disk/by-uuid/d57e2dd9-0062-448c-a914-0b6df045dafb
# ls -l /dev/block/ec2/ephemeral0
lrwxrwxrwx 1 root root 10 Aug 4 16:59 /dev/block/ec2/ephemeral0 -> ../../xvdb
这是当前的单元文件:
[Unit]
After=ephemeral0-format.service
[Mount]
What=/dev/block/ec2/ephemeral0
Where=/mnt/ephemeral0
有什么方法可以通过 systemd.mount 单元安装它吗?
我可以像 systemd 那样创建一个假单元吗sys-devices-vbd...
?
答案1
事实证明,问题是 systemd 忽略了里面的所有内容/dev/block
。
这/dev/block/ec2/ephemeral0
是由 udev 规则创建的符号链接,因此解决方案是简单地调整 udev 规则并将符号链接放在其他位置。我选择将其放置在/dev/disk/ec2/ephemeral0
。
$ udevadm info -q symlink -n /dev/xvdb
disk/by-uuid/ae145d53-9501-419f-b9b1-7416e5c4fec9 disk/ec2/ephemeral0
$ systemctl list-units -a | grep 'xvdb\|ephemeral0'
dev-disk-ec2-ephemeral0.device loaded active plugged /dev/disk/ec2/ephemeral0
dev-xvdb.device loaded active plugged /dev/xvdb
sys-devices-vbd\x2d2064-block-xvdb.device loaded active plugged /sys/devices/vbd-2064/block/xvdb
来源:http://lists.freedesktop.org/archives/systemd-devel/2014-August/021919.html