我有一个嵌入式设备(Linux + BusyBox),我在上面加载了一个文件"my_file.txt"
。我曾经cat
检查过文件的内容,它是令人满意的。然后,我拔掉插头,重新启动后,我看到文件仍然存在,但大小为 0 字节...
这可能是由不同步的文件系统引起的吗?这实际上是一个双面问题:
cat "my_file.txt"
],但我实际看到的是一个缓存版本,在重新启动后不会存在,除非 async
将被调用?“不在那里”是指内容,因为文件本身仍然存在顺便说一句,Linux 何时刷新文件系统?我知道stdout
,例如,在"\n"
引入a 时会刷新(默认情况下)[并且可以以某种方式配置,不记得具体是如何配置的]。文件系统也有规则吗?
文件的创建和内容的复制是否发生在不同的阶段?(允许存在 0 字节文件的阶段)
是的。对文件的正常操作是
我是否有可能“看到”该文件 [意味着我成功地管理了“my_file.txt”],但我实际看到的是一个缓存版本,在重新启动后不会存在,除非调用同步?
是的。如果上述步骤 1 已同步到硬盘驱动器,但步骤 2 未同步,则您将丢失文件内容。
顺便说一句,Linux 何时刷新文件系统?例如,我知道 stdout 在引入 "\n" 时会刷新(默认情况下)[并且可以以某种方式配置,不记得具体是如何配置的]。文件系统也有规则吗?
不,没有一般规则 - 这很复杂。操作系统/内核和文件系统将数据缓存在 RAM 中,并在其内部算法认为是这样做的好时机时将其写入磁盘。
请注意,许多级别都有刷新/同步。您所说的“当引入“\n”时”的刷新只是从程序到操作系统的刷新。然后操作系统可能只将数据保存在 RAM 中,稍后将其刷新到硬盘驱动器中。硬盘驱动器甚至可能将其缓存在硬盘驱动器上的 RAM 中,然后将其写入永久存储。
通常,您可以sync
在命令行上运行该命令以确保所有缓存数据都从操作系统写入硬盘驱动器。(尽管在低端硬盘上没有电池备份的板载 RAM,如果断电,这仍然可能丢失驻留在硬盘驱动器上的 RAM 中的数据)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句