有时我拔掉 USB 驱动器,却发现文件未被写入其中。
我想确保文件写入其中的唯一方法是右键单击桌面上的 USB 驱动器,然后选择“卸载”,但有时我会忘记。
确保文件立即写入 USB 驱动器的最佳方法是什么?这样,当我注意到 USB 驱动器上的 LED 灯停止闪烁时,我就可以移除 USB 驱动器。
操作系统:CentOS 6
答案1
如果您sync
在可移动驱动器上使用挂载选项,则所有写入都会立即写入磁盘,因此您不会丢失尚未写入的文件中的数据。这是一个坏主意,但它确实满足了您的要求。
注意sync
不保证您不会丢失数据。卸载可移动驱动器还可以确保没有应用程序打开文件。如果您在拔掉插头之前没有卸载,您将不会注意到是否有未保存的数据,直到为时已晚。在文件打开时卸载也会增加损坏的机会,无论是在文件系统级别(操作系统可能已将某些操作排队直到文件关闭)还是在应用程序级别(例如,如果应用程序放置了锁定文件,则它不会)不被删除)。
此外,sync
对设备的使用寿命不利。如果没有该sync
选项,内核会对写入重新排序并分批写入。使用该sync
选项,内核将按照应用程序请求的顺序写入每个扇区。在不重新分配扇区的廉价闪存介质上(意味着几乎所有较旧的 USB 记忆棒,我不知道最近的 USB 记忆棒是否仍然如此),重复写入 (V)FAT 上的文件分配表或日志在典型的现代文件系统上可以很快地杀死棍子。
因此我不建议使用sync
mount 选项。
在 FAT 文件系统上,您可以使用flush
安装选项。这是async
(默认)和之间的中间值sync
:使用该flush
选项,一旦驱动器空闲,内核就会刷新所有写入,但它不会保留写入顺序(因此,例如对 FAT 的所有写入都会合并)。
答案2
通常,大容量存储设备(例如 USB 拇指驱动器)是使用命令 挂载的mount
。需要使用此命令的补充来显式卸载它们umount
(这不是拼写错误)。有些工具可以检测硬件级别的事件,例如 USB 设备刚刚插入。然后这些“服务”将自动为您进行安装。这就是当您使用 GNOME 桌面时发生的情况,您通常会看到 USB 驱动器显示为已安装在文件浏览器 Nautilus 中。
知道设备何时不再被写入有点棘手。您必须为此编写自己的处理程序,利用 Udev 和 DBUS 消息来了解每次设备写入完成的时间,然后将其明确保持在“未安装”状态。
如果不更深入地集成到 Linux 的各个子系统中,我看不到任何其他方法可以做到这一点,而且据我所知,目前还不存在这种方法。
操作系统
我的猜测是,在 OSX 上,他们正在执行sync
命令并让设备保持“安装”状态,这可以被认为是一件危险的事情,但对操作员来说很方便。