我做了几次测试,在写入过程中拔下 USB 介质。主机系统是 Linux Mint 17.1,安装在带有 USB 2.0 的笔记本电脑上。对于 USB 硬盘,调用“sync”后,数据似乎被安全写入,不会以任何方式损坏,至少在使用带有data=journal
选项的 EXT4 时是这样。这对我来说没问题,我的脚本首先写入临时目录,然后调用“sync”,然后将目录重命名为其最终名称(这应该是一个原子操作)。
但是,我用 USB 棒进行的测试不太令人信服。使用完全相同的脚本和安装选项,我总是遇到损坏。更具体地说:我使用带有--link-dest
备份到 USB 介质选项的“rsync”。我所描述的“损坏”包括备份中的文件,其中数据与主机系统上的文件不同,但修改时间相同。这是一件令人讨厌的事情,因为rsync
会将这些文件视为最新的,而实际上它们已经过时或充满了空字节等。
问题:为什么这种情况只发生在 USB 闪存驱动器上,而硬盘上却没有?还是说到目前为止,我只是在硬盘方面运气好?从其他制造商那里购买闪存驱动器是否合理?我在这里测试的那个驱动器昨天在我热拔下后就彻底停止工作了。所以也许它只是质量差的产物。
答案1
在使用新闪存驱动器进行测试后,似乎所有问题都来自之前的闪存驱动器损坏或质量低劣。使用新闪存驱动器和硬盘驱动器时,我无法通过在写入时拔下驱动器来造成任何损坏。我甚至通过省略来放宽安装选项data=journal
。我的安装选项现在已全部完成rw,noatime,errors=remount-ro
,我正在使用 EXT4。
关于其他文件系统,根据我对 Linux Mint 17.1 的体验:XFS 在热拔出时表现不佳,经常留下不可移除的挂载,需要重新启动。JFS 在这方面还不错,但速度非常慢,几乎无法用于某些操作。BTRFS 看起来不错,但 Mint 附带的版本已过时且仍然不稳定,所以我决定不使用它。同样,NILFS2 和 F2FS 目前在 Mint 上得不到很好的支持。
警告:尽管我无法通过热拔出造成任何损坏,但在将文件放入最终位置之前,用户仍有责任刷新缓冲区。因此,备份程序必须先复制到临时位置,然后调用sync
,然后将文件或目录重命名为其最终名称(将来将在该名称下进行完整复制)。