【问题标题】:How to write data on USB stick safely - Linux (ARM) - C++如何安全地在 U 盘上写入数据 - Linux (ARM) - C++
【发布时间】: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)

标签: linux file-io mkdir fsync


【解决方案1】:

在删除设备之前先卸载设备。对于像 VFAT 这样的非日志文件系统,不能保证文件系统在挂载时在磁盘上处于一致的状态。

【讨论】:

    【解决方案2】:

    写入后,使用选项“-o remount,ro”进行“mount”。 这将写入所有内容并更改为只读模式。 其他应用程序可以打开文件。

    对于写作,使用选项“-o remount,rw,noatime”进行“mount”

    【讨论】:

      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2010-12-21
      • 2018-06-08
      • 1970-01-01
      • 2016-10-19
      相关资源
      最近更新 更多