如果我在“同步”之前关闭设备会发生什么?

CIsForCookies

我有一个嵌入式设备(Linux + BusyBox),我在上面加载了一个文件"my_file.txt"我曾经cat检查过文件的内容,它是令人满意的。然后,我拔掉插头,重新启动后,我看到文件仍然存在,但大小为 0 字节...

这可能是由不同步的文件系统引起的吗?这实际上是一个双面问题:

  1. 文件的创建和内容的复制是否发生在不同的阶段?(允许存在 0 字节文件的阶段)
  2. 我是否有可能“看到”该文件[意味着我成功地做到了cat "my_file.txt"],但我实际看到的是一个缓存版本,在重新启动后不会存在,除非 async将被调用?“不在那里”是指内容,因为文件本身仍然存在

顺便说一句,Linux 何时刷新文件系统?我知道stdout,例如,在"\n"引入a 时会刷新(默认情况下)[并且可以以某种方式配置,不记得具体是如何配置的]。文件系统也有规则吗?

我们

文件的创建和内容的复制是否发生在不同的阶段?(允许存在 0 字节文件的阶段)

是的。对文件的正常操作是

  1. 打开/创建文件
  2. 读/写数据。
  3. 关闭文件。

我是否有可能“看到”该文件 [意味着我成功地管理了“my_file.txt”],但我实际看到的是一个缓存版本,在重新启动后不会存在,除非调用同步?

是的。如果上述步骤 1 已同步到硬盘驱动器,但步骤 2 未同步,则您将丢失文件内容。

顺便说一句,Linux 何时刷新文件系统?例如,我知道 stdout 在引入 "\n" 时会刷新(默认情况下)[并且可以以某种方式配置,不记得具体是如何配置的]。文件系统也有规则吗?

不,没有一般规则 - 这很复杂。操作系统/内核和文件系统将数据缓存在 RAM 中,并在其内部算法认为是这样做的好时机时将其写入磁盘。

请注意,许多级别都有刷新/同步。您所说的“当引入“\n”时”的刷新只是从程序到操作系统的刷新。然后操作系统可能只将数据保存在 RAM 中,稍后将其刷新到硬盘驱动器中。硬盘驱动器甚至可能将其缓存在硬盘驱动器上的 RAM 中,然后将其写入永久存储。

通常,您可以sync在命令行上运行该命令以确保所有缓存数据都从操作系统写入硬盘驱动器。(尽管在低端硬盘上没有电池备份的板载 RAM,如果断电,这仍然可能丢失驻留在硬盘驱动器上的 RAM 中的数据)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果 express.js (node.js) http 请求在完成之前关闭会发生什么?

如果我安装 Wayland 会发生什么?

如果我使用 ifconfig 禁用环回设备会发生什么?

如果我不关闭kafka生产者,会发生什么?

如果我构建 SPA 并且用户关闭 JavaScript,会发生什么?

如果在关闭连接之前未调用transaction.Rollback / Commit,会发生什么情况?

如果在关闭套接字之前不发送IP_DROP_MEMBERSHIP,会发生什么情况?

如果APNS设备令牌过期,会发生什么?

如果目标应用被强制关闭,PendingIntent会发生什么?

如果不关闭Docker容器,会发生什么情况?

如果用户在 GA 会话中关闭 Cookie 会发生什么

如果我们将异步重置块与同步重置一起使用会发生什么?

如果我们在生成器对象引发“ StopIteration”异常之前停止迭代会发生什么

如果我递归调用startActivityForResult()会发生什么?

如果我超出Java中变量的限制,会发生什么?

如果我在无限循环中启动线程会发生什么?

Heroku:如果全部使用我的Redis连接会发生什么?

如果我在git rebase后承诺掌握,会发生什么

如果我不使用deletelater删除qthread会发生什么?

如果我的映像大于Firebase Storage的maxSize,会发生什么?

如果我覆盖 pyodbc 连接会发生什么?

如果我中止樱桃选择,会发生什么变化?

等待同步方法时会发生什么

如果进行单个同步调用,Webflux中会发生什么?

如果线程在同步块内引发异常会发生什么

在将AutoCommit设置为true之前,关闭连接会发生什么情况

如果无线设备无法到达接入点的所有天线会发生什么?

Android如果设备休眠,则在HTTP事务期间会发生什么?

如果设备驱动程序未实现asyn写功能,将会发生什么?