问题标签 [fsync]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
416 浏览

linux - 在 X 秒内强制不超过一次写入/同步到磁盘

我担心我iotop每隔几秒钟就会看到磁盘 LED 和相当多的写入活动,主要来自 Chromium 的进程,在一个完全空闲的系统上。

对磁盘进行如此大量的写入根本没有任何意义,对于 SSD 磁盘更是如此。读取对我来说不是问题,也是因为我的 20gb RAM 笔记本上有大量磁盘缓存。

commit选项(默认为 30 秒)显然不是解决方案。试图增加甚至减少,但仍然每隔几秒钟看到一次写入。

那么有没有办法强制每个任意间隔不超过一次写入?

0 投票
0 回答
787 浏览

windows - 删除后强制文件系统同步

我想加载一个文件,使内容要么在内存中,要么在磁盘上,但不能同时在两者中。通过执行简单的打开、读取和删除操作,这应该可以完成任务。但似乎由操作系统决定何时将删除命令刷新到硬件。在 linux 的情况下,调用sync()应该可以完成此操作。在 Windows 的世界里,你能得到的最接近的是FlushFileBuffers(),它需要一个句柄。删除文件时,您不使用句柄,只使用路径。有没有办法强制 Windows 将删除请求刷新到磁盘而不是排队或缓存它?

0 投票
2 回答
1526 浏览

linux - 在调用 syncfs() 之前是否需要关闭文件

在我的嵌入式系统上,我想确保在关闭文件时数据被安全写入 - 如果系统报告数据已保存,用户应该能够立即移除电源。

我知道执行此操作的正确方法是fsync()fclose()fsync()在目录上(cfr.this blog entry)。但是,在我的情况下,获取目录的文件描述符有点棘手(我必须通过/proc/self/fd查找文件名并从那里派生目录)。对我来说,只在整个文件系统上做会更简单syncfs()——我知道这是文件系统上唯一打开的文件。

现在我的问题是:

  • 做就够了吗syncfs()
  • 我需要fclose()FILE *一个(目录条目是最新的)吗?还是fflush()足够了?
  • 如果需要关闭,dup()在关闭之前对文件描述符有用吗,以便我可以直接使用它syncfs()
0 投票
0 回答
67 浏览

redis - 为什么redis 3.2拒绝创建后台fsync?

这是aof.c中函数末尾的代码片段flushAppendOnlyFile,它将aof缓冲区写入磁盘。

Redis bio 为 fsync 实现了一个后台作业列表。函数aof_background_fsync将一个新的 fsync 作业附加到列表中。

为什么 redis 只在此文件上创建 fsync 作业时才sync_in_progress为假?如果sync_in_progress为真,则有多个 fsync 作业等待执行。为什么redis拒绝在这种情况下附加这个fsync作业?

(这里是整个flushAppendOnlyFile 函数

0 投票
1 回答
96 浏览

boost - ext4中文件复制和重命名期间的磁盘访问

我有一个过程,比如说“A”,它的工作是将三个 4 GB 文件复制到一个临时文件中,然后通过覆盖现有文件来重命名它。“A”每 15 分钟执行一次。CentOS 版本为 2.6.32-504.23.4

现在我确定 copy_file() 只需要 5 秒,因为我有打印时间戳的代码。然而,似乎整个操作与 rename() 一起花费了 3 分钟以上。

所以我的问题是,文件的内容是在什么时候从内存写入磁盘的?我没有观察到复制的文件在任何时候都具有零大小。ext4 挂载带有默认选项。我之间也没有任何其他调用,例如 fsync() 。

0 投票
0 回答
243 浏览

linux - fsync() 调用之间的写入持久性

调用fsync()确保由write()对同一文件描述符的任何已完成调用写入的数据是持久的,即使系统随后崩溃并重新启动,它们也将是可读的。

在这种情况下,调用的效果write()可能会在它们到达磁盘的途中被重新排序,所以如果你不这样做,fsync()那么你可能会看到后来调用的效果,write()但看不到早期调用的效果。

据我了解,即使在fsync()调用之间附加到文件似乎也相当安全:崩溃后,生成的文件是fsync()编辑的内容加上可能是其他任何内容的初始子序列。文件不可能包含后来的写入而不是较早的写入,或者包含垃圾数据而不是实际写入的内容(可能取决于您使用的文件系统以及您选择的选项,例如ext3ext4拥有data=orderedvs data=writeback)。

不太清楚的是覆盖文件中间的某些块时崩溃的影响。在这种情况下,是否有可能在崩溃后读取文件时看到块的任何子集被覆盖?如果是这样,实际上是否有任何方法可以安全地更新文件的中间,或者您基本上必须依靠仅附加日志来实现持久性?

对于通话时正在进行的通话或之后开始的通话,是否有任何保证?我该去哪里找到这些保证的权威来源?write()fsync()

0 投票
3 回答
368 浏览

mongodb - Mongo 锁定和解锁所需的最低权限

我们需要一个具有最小权限的用户,该用户只能使用 db.fsyncLock() 和 db.unlock() 锁定一个 mongo 实例,以确保我们可以对磁盘映像进行一致的快照。我目前创建了以下角色:

但是,当我使用此用户尝试锁定时,我收到以下信息:

还需要哪些其他权限?Mongo版本如下:

0 投票
1 回答
374 浏览

c++ - 使用 fsync() 确保实时系统上的数据一致性

我很难确定将 fsync() 实现到实时系统中的最佳方法是什么。我需要满足的唯一要求是 fsync() 不得破坏帧(每帧 100 Hz - 10 ms)。我做了一些初步的基准测试,我目前倾向于在每次固定大小的写入(大约 1 KB)之后调用 fsync() 直到文件完成。给我的另一个建议是在较慢的任务/线程上调用 fsync() (在整个文件的末尾,或者在这个较慢任务的每一帧)。

通过我描述问题和探索的选项的方式,您可能会猜到我是这方面的新手,但无论如何都会用复杂的东西打我。我可以尝试其他任何实现吗?最有效/最好的方法是什么?

谢谢!

编辑:我运行的操作系统是 Linux。为了执行写入,我使用带有 FILE * 的 C 库来执行文件 I/O。由于这目前发生在 100 Hz 任务上,因此每秒 100 帧,每帧写入 1 KB(仅针对此特定操作,不考虑其他操作员在此帧中其他地方发生的其他写入)。

0 投票
0 回答
1589 浏览

c++ - 如何从ofstream获取文件描述符

我需要调用 fsync() 来保护我的数据。你能帮我从 ofstream 获取文件描述符吗?

0 投票
1 回答
81 浏览

python - 抓取文件立即在 python 中可用

我正在使用 beautifulsoup 从一系列网站中抓取 .csv 文件。然后我想立即在同一个脚本中使用它们并将它们存储起来以备后用。目前,当我抓取并保存文件时,脚本无法立即使用它,并且NoneType在尝试将 csv 作为数据帧加载时返回错误。我试图使用

file_to_save.flush()

os.fsync(file_to_save.fileno())

无济于事。我也试过在打开文件时不使用缓冲区file_to_save = open(path + filename, 'wb', 0),但这仍然不起作用。

我的代码如下(resresponse.read()请求的):

当我重新运行脚本时,它会随着文件的保存而工作,并且可以在单独的函数中加载到 df 中。关于如何使文件立即可用的任何想法?