我编写了一个脚本,用于加载 VHD 文件,使用 对其进行修复,ntfsfix
以便可以将其挂载为 rw,然后将其挂载。当使用 通过终端运行此脚本时,效果非常好,但当通过或通过启动应用程序sudo
运行它时,它不起作用。有问题的脚本是crontab
~/.profile
#!/bin/sh
rmmod nbd
modprobe nbd max_part=16
qemu-nbd -c /dev/nbd0 '/media/tygo/1.8TB Drive/MEGA.vhdx'
ntfsfix /dev/nbd0p2
mount -o rw /dev/nbd0p2 /home/tygo/MEGA
答案1
要使用 crontab 运行脚本,请确保指定完整路径:
#!/bin/sh
/usr/sbin/rmmod nbd
/usr/sbin/modprobe nbd max_part=16
/usr/bin/qemu-nbd -c /dev/nbd0 '/media/tygo/1.8TB Drive/MEGA.vhdx'
/usr/bin/ntfsfix /dev/nbd0p2
/usr/bin/mount -o rw /dev/nbd0p2 /home/tygo/MEGA
whereis
您可以使用命令查找路径: whereis mount
。
然后使用sudo
:运行 crontabsudo crontab -e
并将完整路径添加到脚本:
@reboot /home/user/scripts/vhdscript.sh
利用你自己的时间而不是@reboot
要查看它是否被执行,您可以向脚本添加一些其他信息。例如,在脚本末尾添加:
echo "VHD file loading have been completed" | logger
然后,使用终端,通过出现的消息监视脚本的执行情况:
journalctl -f | grep VHD
答案2
我最终设法修复了这个问题,方法是在使用 qemu 加载 VHD 后休眠一秒钟,然后每半分钟使用 cronjob 和 sudo 运行它,使用以下两行:
* * * * * sudo /etc/megaMount.sh > /var/log/megaMount.log
* * * * * (sleep 30; sudo /etc/megaMount.sh > /var/log/megaMount.log)
编辑后的脚本如下,第一行检查是否已经挂载:
if ! grep -qs '/home/tygo/MEGA' /proc/mounts;
then
sleep 1
rmmod nbd
modprobe nbd max_part=16
qemu-nbd -c /dev/nbd0 '/media/tygo/1.8TB Drive/MEGA.vhdx'
sleep 1
ntfsfix /dev/nbd0p2
mount -o rw /dev/nbd0p2 /home/tygo/MEGA
fi
编辑:忘了提及使用添加作业sudo crontab -e
,不太清楚为什么我还需要使用运行脚本sudo
,但没有它就无法工作。