在 Ubuntu 中强制卸载,以解决上网本睡眠模式后的问题

在 Ubuntu 中强制卸载,以解决上网本睡眠模式后的问题

我在这里实际上唯一需要知道的是如何当设备繁忙时强制卸载。 umount -f不起作用。以下描述只是我需要这样做的背景,以防有人能想出更好的解决方案。如果有的话不可能要执行此卸载,我很乐意接受解释为什么不作为答案。

问题是,每当我将上网本置于睡眠模式时,我的挂载点就会损坏。挂载点仍然存在,并且运行时会mount正常显示:

/dev/mmcblk0p1 on /home/ilari/storage type ext4 (rw,nosuid,nodev,uhelper=hal)

但是,任何读取/写入它的尝试都会失败,并出现Input/output error

如果有任何程序打开,尝试卸载设备,将失败,并显示

umount: /home/ilari/storage: device is busy

问题似乎是设备/dev/mmcblk0在睡眠时从系统中消失了。但奇怪的事情就在这里发生。以前的设备仍然可用,只是现在变成了/dev/mmcblk1!我可以挂载它再次到同一点,这使得输出mount相当有趣

/dev/mmcblk0p1 on /home/ilari/storage type ext4 (rw,nosuid,nodev,uhelper=hal)
/dev/mmcblk1p1 on /home/ilari/storage type ext4 (rw,nosuid,nodev,uhelper=hal)

问题是,当我这样做时,挂载点就像睡眠前一样工作!已打开的程序可以继续使用文件系统,就像什么都没发生过一样。

但让系统累积多个(故障)设备似乎不太现实。因此,我想先卸载之前的挂载点,然后再将“新”设备重新挂载到同一点。

当设备忙时如何强制卸载?最好在唤醒时自动实现,并自动重新挂载。任何帮助都将受到赞赏。

(我当然可以关闭所有打开的程序,然后卸载,但这几乎违背了睡眠模式的目的。)

编辑:正如评论中提到的,卸载系统可能是一个好主意进入睡眠状态,然后在唤醒时重新挂载它。事实上,这似乎甚至阻止了设备更改其索引号,因此它仍保持为/dev/mmcblk0。问题是我只能在关闭所有正在使用它的程序后才能卸载它。(请注意,这在睡眠后也有效 - 通过关闭所有程序,我始终可以卸载断点。)umount -f也无济于事,用额外的响应umount2: Device or resource busy

我在 Acer Aspire One 上使用 Ubuntu Netbook Remix 9.10。挂载点位于 fstab 中,由文件系统的 UUID 指定(当然,这就是为什么即使设备名称已更改,重新挂载仍能正常工作的原因)。当然,另一种解决方案是阻止设备更改其编号,但我担心这将是一个更难解决的问题。

答案1

您尝试过-f标记吗umount

umount -f /home/ilari/storage

自动执行此类操作需要使用一个小脚本/etc/pm/sleep.d/。但我建议您在睡眠时卸载并在唤醒时重新安装。我最近得到了一个好答案它应该会告诉您如何编写该小脚本。

答案2

有用吗umount -l /home/ilari/storage?我实际上没有一个好的分区来测试它,但它可能会满足你的要求。

相关内容