我正在使用以下命令为 VM 原始映像备份文件设置循环设备:
sudo losetup /dev/loop0 "/home/asus/VirtualBox VMs/Windows RAW/Windows 10.img"
它工作正常。
$ losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/loop0 0 0 0 0 /home/asus/VirtualBox VMs/Windows RAW/Windows 10.img 0 512
但我想让这个更改永久化,所以我创建了这个.sevice
在启动时运行:
$ cat /etc/systemd/system/loops-setup.service
[Unit]
Description=Setup loop devices
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target
After=systemd-udev-settle.service
Required=systemd-udev-settle.service
[Service]
Type=oneshot
ExecStart=/sbin/losetup /dev/loop0 "/home/asus/VirtualBox VMs/Windows RAW/Windows 10.img"
ExecStop=/sbin/losetup -d /dev/loop0
TimeoutSec=60
RemainAfterExit=yes
[Install]
WantedBy=local-fs.target
Also=systemd-udev-settle.service
此服务也可以手动启动:
sudo systemctl start loops-setup
但它在启动时无法启动,并显示此错误:
May 11 19:57:17 ubuntu losetup[308]: losetup: /dev/loop0: failed to set up loop device: No such file or directory
我猜是因为服务的层次结构,我应该改变Before
和After
选择,但我不知道该怎么做。
提前致谢。
这个问题是由两个原因引起的:
1.正如@CharlesGreen提到的
systemd-udev-settle.service
无法激活:因此,此服务保持非活动状态:
2.第二个问题是
losetup
命令需要访问home
分区才能设置Windows 10.img
。并且这个分区在启动时没有挂载。因此以这种方式更改服务,解决了问题: