systemd 使用设备符号链接挂载卷

systemd 使用设备符号链接挂载卷

我正在尝试让 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

相关内容