为什么 mac 需要弹出 USB 驱动器,而 Windows 和 Linux 不需要?mac 上是否发生了 umount?如果是,为什么 Linux 不需要 umount?如果是,那么 Windows 上与 umount 等效的是什么?
似乎 mac 还会警告“丢失数据”,就好像它一直在传输数据一样……这是为什么呢?
在 Mac 上不卸载闪存驱动器就拔下它,最糟糕的情况是什么?为什么在 Linux 上不会发生这种情况?
在复制文件时拔下闪存驱动器的最坏情况是什么(在列出的所有操作系统上)。
答案1
Windows 和 Linux 确实需要弹出,即使它们具有某些保护措施。它们只是不一定对用户教育那么认真。(即警告你)。卸载/“弹出”可让操作系统确保它不再是“传输数据”了。
您的复制应用程序可能要等到所有数据都写入设备后才会返回。(您对复制应用程序的理解有多深?)但是,一个示例场景是,您的文件管理器显示图像缩略图,并在您没有意识到的情况下开始在设备上写入缩略图缓存。
在写入过程中移除设备会损坏文件系统。我不知道其他操作系统如何处理可移动设备上未干净卸载的 FAT 文件系统,但 Linux 根本检测不到它们。因此下一次挂载不会触发文件系统修复,文件系统仍将损坏。
我不确定损坏的 FAT 随着时间的推移导致数据丢失的可能性有多大。由于人们经常这样做,因此在 Windows 和 Linux 等开发良好的内核上可能会有合理的尝试来防止这种情况发生。(类似地,Linux 有一个 mount 选项,它试图匹配 Windows 可移动 FAT 行为……它在 close() 上执行 fsync(),或类似操作)。
然而,不让文件系统损坏是一种良好的习惯。至少,这意味着如果您被迫非正常关机(例如由于电源故障),那么您可以在事后扫描文件系统以查找损坏情况,并且您只需要面对最近发生的情况。
至于最坏的情况?你的 USB 设备是一个非常便宜的 SSD。昂贵的SSD 断电后会严重损坏,包括丢失设备上的所有数据。睡个好觉并妥善备份。 https://www.usenix.org/conference/fast13/understanding-robustness-ssds-under-power-fault
即使你很幸运,你也可能丢失整个 2Mb 擦除块上的数据 - 当你只写入该 EB 上的 512 字节文件时。使用闪存存储,设备必须先擦除整个 2Mb EB,然后才能重写数据。并且设备会因为几个原因重新映射扇区,因此丢失的 2Mb 数据可能来自文件系统中的多个位置。我在这里参考的是内核开发人员 Pavel Machek 的苦恼,他意识到 Linux ext 文件系统(即使有日志记录)也无法保护他的数据免受这种已知故障模式的影响。(FAT 并没有真正好到哪里去)。
[我在这里不是一个很好的例子,因为我有一台带 SD 卡的笔记本电脑,我经常让它没电,并且它会累积错误,以至于 fsck.vfat 并不总是能够修复它们。另一方面,卡上没有任何东西我在其他地方没有副本 :)。我过去曾遇到过 3 次 SD 卡硬件意外故障]。