linux - 系统关闭后嵌入式文件系统 UBIFS 中的数据丢失

标签 linux linux-kernel embedded-linux

每当我在 UBIFS 文件系统上运行我的应用程序并对任何文件执行写操作(前提是文件具有适当的读写模式),在断电和打开后,我立即看到写入文件的内容丢失了。文件的大小为零。如果在 JFFS2 文件系统上执行同样的操作,则不会出现此问题。我已尝试使用同步命令,但仍然很少出现此问题。

例如:

我需要在一个名为 myfile 的文件中写入一些数据,在运行时我打开它并写入一些数据为“Hi..Hello..”(如果我打开文件并在写入操作后检查,则数据写入正确), 然后关机/重启后,我发现内容“Hi..Hello..”不存在,文件大小为零字节。

注意:只有在关闭或重启系统后才会出现问题。

最佳答案

UBIFS 的同步频率较低。所以如果文件是重要的调用,在用户应用程序中你必须调用 fsync()。我建议您执行以下操作之一以防止 UBIFS 中的数据丢失:

  • 关键写入调用后 fsync()
  • 打开带有 O_SYNcflags的文件
  • 使用 -o sync 挂载 ubifs(写入缓冲区被绕过)

Why is my file empty after an unclean reboot?

Few notes with regards to synchronization

关于linux - 系统关闭后嵌入式文件系统 UBIFS 中的数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34409726/

相关文章:

linux - 模拟硬件路由器上的用户负载

linux - 剪切并tr : command not found

android - 从哪里获得这个丢失的文件 - Android Studio,模拟器

c++ - 为什么这个应用程序没有像预期的那样消耗内存

linux - 是什么改变了我的鼠标选择行为?

linux-kernel - Linux编译 |入口点无效

linux - 如何在 Linux 中停止/禁用 IPI(进程间中断)?

linux-kernel - 如何创建 100 M 字节缓冲区

embedded-linux - 有没有办法在不修改 Yocto 的情况下为机器 ID 创建链接?

c - 闪存和 tft LCD 共享 SPI 硬件的问题