在 Windows 中,有一个“安全删除硬件”的选项。
忽略它几乎总是失败的事实,并且大多数时候我只需拔掉设备,我就掌握了它背后的主动权(尽管不完全)。
那么,当使用 Debian 时,什么时候移除我的外部硬盘是“安全”的(即不会对任何一方造成损害)?
卸载后(Xfce 似乎使用术语“弹出”,但我猜这是同一件事)?或者只是当没有程序使用该磁盘时?
答案1
卸载外部驱动器后,将其移除是“安全”的。
如果程序不使用它,它可能不安全,原因是 Linux 内核确实会写入缓存。这意味着当程序写入磁盘时,该数据可能不在物理上位于磁盘上,它可能仍然在内存中(除非程序使用fsync
或fdatasync
)。 Linux 这样做是为了以大块的形式执行磁盘写入,从而优化吞吐量。
当您卸载文件系统时,它会确保无法对磁盘执行进一步的写入操作。它还执行一个sync
调用,确保所有缓存的数据都刷新到磁盘。
答案2
在断开连接之前,您必须先卸载它。有些界面会使用术语“弹出”,它应该做同样的事情。
如果在没有取消挂载/弹出的情况下断开连接,会造成多少损坏取决于所使用的文件系统、硬件和缓存。其效果与断电基本相同,这意味着大多数文件系统都设计为从这种情况下恢复,但不能保证,并且对于类 UNIX 操作系统本机的文件系统通常需要进行文件系统检查。因此,在 Linux 下唯一安全的删除时间是在卸载/弹出完成后。
答案3
我有两个通过 USB3 安装的希捷外置 2TB“扩展台式机硬盘”。使用 rsync 备份我的系统后,即使在同步和 umount.crypt 之后,驱动器在 umount 后仍会继续移动磁头相当长的一段时间 - 也许 30 秒到一分钟(基于我把手放在上面时的感觉)驱动器)。我认为这可能是由于外部驱动器的一些内部缓存造成的。在我感觉不到任何头部运动之前,拔掉它们的插头是不安全的。
我怀疑我需要关闭驱动器的写入缓存。我的驱动器通常是 /dev/sdg,因此当我使用该驱动器时,我可以以 root 身份发出以下命令:
hdparm -W0 /dev/sdg
但我还没有验证这是否能解决问题。