【发布时间】:2014-04-25 21:17:18
【问题描述】:
我正在尝试复制 U 盘上的一些文件夹和文件,并在一切完成后立即移除 U 盘。实现是这样的:
- 使用
mkdir在U盘上创建相应的文件夹结构 -
fsync创建文件夹后的每个目录描述符 - 复制文件内容(使用 C++ 流)
-
fsync复制每个文件后的每个文件描述符
在最后一个文件被复制后,我移除了 U 盘(~500ms - 1s)。但有时会丢失整个文件夹结构。为了避免这种情况,我在复制最后一个文件后在每个目录描述符上再次使用了fsync。这次所有文件和文件夹都存在于 U 盘上,但有时我的文件夹结构中有垃圾或 U 盘损坏。 U 盘文件系统是 vfat。关于如何正确保存数据的任何想法?
【问题讨论】:
-
最初的建议是最后用单个 sync() 替换单个 fsync,希望您忘记同步其他内容。如果这不起作用,您可以在同步后强制卸载设备吗?
-
使用sync(),整个文件系统将被同步,我试图避免这种情况。 umount 是我目前的解决方案,但如果任何其他进程正在使用 U 盘,umount 将失败。
-
所以你正在移除 U 盘,而另一个进程正在使用它,那么文件系统很可能会损坏。
-
有可能被另一个进程使用(仅用于阅读),我无法控制。但文件系统似乎已损坏,即使我是唯一使用 U 盘的人。 (没有 umonut)