我在双启动设置中从 Linux (Pop_OS) 休眠,并且两个系统之间共享一个分区。我使用确保首先卸载共享分区的脚本进行休眠:
#!/bin/bash
# ~/bin/hibernate
shared=ABCDE12345 # partition UUID
device=$(blkid -U "$shared")
if ! df | grep -q $device || sudo umount UUID=$shared ; then
# unmount the shared partition unless already unmounted
sudo systemctl hibernate
exit 0
fi
exit 1
然后我在 中有以下内容/usr/lib/systemd/system-sleep
,它在从休眠状态恢复时运行。
#!/bin/bash
# /usr/lib/systemd/system-sleep/hibernate
shared=ABCDE12345
device=$(blkid -U "$shared")
logfile=/var/log/hibernate.log
if [ $2 == "hibernate" ] ; then
if [ $1 == "post" ] ; then
if ! df | grep -q $device ; then
echo "shared drive not mounted..." >> $logfile
cat /proc/partitions &>> $logfile
# tried adding a sleep delay after mount failed without
sleep 5
echo "mounting..." >> $logfile
/usr/bin/mount UUID=$shared &>> $logfile
fi
fi
fi
我可以确认(通过日志文件)/usr/lib/systemd/system-sleep/hibernate
从休眠状态恢复时,所有内容都可以运行。cat /proc/partitions
甚至列出了共享分区。但是,恢复后分区仍未挂载,并且命令mount
不会向日志文件输出任何内容。我也尝试过mount
使用设备路径运行,但mount --all
没有成功。恢复后,我可以使用或 GUI 手动重新挂载共享分区,mount
没有任何问题。
为什么这不起作用?我还能尝试其他什么方法在休眠后自动重新挂载此分区吗?
更新
该问题似乎与该驱动器被格式化为 NTFS 文件系统有关。我已使用上述方法创建了一个可以可靠挂载的测试 exFAT 分区。从休眠状态恢复时,我还在系统日志中发现了以下内容:
ntfs-3g[822185]: Version 2021.8.22 integrated FUSE 28
ntfs-3g[822185]: Mounted /dev/nvme0n1p4 (Read-Write, label "Shared", NTFS 3.1)
ntfs-3g[822185]: Cmdline options: rw,nosuid,nodev,nofail
ntfs-3g[822185]: Mount options: nosuid,nodev,nofail,allow_other,nonempty,relatime,rw,fsname=/dev/nvme0n1p4,blkdev,blksize=4096
ntfs-3g[822185]: Ownership and permissions disabled, configuration type 7
ntfs-3g[822185]: Unmounting /dev/nvme0n1p4 (Shared)
该分区在启动时挂载后似乎会悄悄卸载,原因不明。这可能与这个 systemd 问题,该问题已在尚未进入 Pop_OS 的版本中进行了修补。这也可能是 ntfs-3g 的问题,但我尚未发现任何有用的信息。
答案1
可能是以mount
不稳定的方式执行的,即它在脚本进程终止时收到终止信号并自动“重新卸载”。不确定,因为您声明不会将mount
任何内容输出到日志中。无论哪种方式,更可靠的方法是使用Systemd Service
。也许有点(太晚了?)但试试这个:
bash
在您的主目录中创建一个脚本并将其命名为“remount.sh”(例如~/bin/remount.sh
)。向其中添加以下命令:
#!/bin/bash
shared=ABCDE12345 # ***YOUR*** filesystem UUID
device=$(blkid -U "$shared")
# mount the shared partition unless already mounted
if ! df | grep -q $device ; then
if mount UUID=$shared ; then
exit 0
fi
exit 1
fi
exit 0
使上述脚本可执行:
chmod u+x ~/bin/remount.sh
在您的主目录中的某个位置创建一个纯文本文件,并将其命名为“remount.service”(例如
~/bin/remount.service
)。向其中添加以下指令:
[Unit]
Description=Remount partition on resume from hibernate or hybrid-sleep
After=hybrid-sleep.target
After=hibernate.target
#After=suspend.target
[Service]
KillMode=process
ExecStart=~/bin/remount.sh
[Install]
WantedBy=hybrid-sleep.target
WantedBy=hibernate.target
#WantedBy=suspend.target
- 从终端运行以下命令:
sudo mv ~/bin/remount.service /etc/systemd/system/
systemctl enable remount.service
就是这样。现在,每次从休眠或混合睡眠模式恢复时,您的分区都应重新挂载。