问题标签 [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.
linux - fsync 在 ext3 或 ext4 系统上不起作用
我尝试使用 fsync 尽快将一些文件写入 SD 卡。但是 fsync 在文件被物理写入 SD 卡之前实际上并没有阻塞。数据实际上在 SD 卡上之前似乎需要大约 5-6 秒。但是,使用 commit = 1 或同步选项挂载文件系统(我尝试过 ext3、ext4)似乎确实有效,1 秒内重新启动后数据是安全的。我的问题是,无论如何都可以在不诉诸分区范围解决方案的情况下实现刷新?我正在使用 linux 内核 2.6.37。谢谢
python - 网络驱动器上的 python fsync() 挂起
我使用以下函数将一些数据写入文件:
该fsync()
调用是处理 IOError 所必需的:如果在网络驱动器无法访问时我不使用它,则该函数write()
在其本地缓冲区上工作并且不会引发异常。
问题是在几次写操作后,函数fsync()
挂起。它与什么有关?本地机器是运行 python 2.7 的 Linux。驱动器使用 mount.cifs 安装。远程磁盘位于始终可访问的本地服务器上。如果我卸载远程磁盘,fsync()
几十秒后返回。
linux - 按顺序将页面刷新到磁盘
有没有办法在Linux中强制将页面从内存刷新到磁盘的顺序,除了以所需的顺序更新页面并在每次页面更新后分别执行fsync()
/ ?与linux page cache flush order 有关,我也没有找到明确的答案。msync()
linux - 在多个文件与一个文件上调用 fsync 时的性能
我有多个线程,每个线程都接受请求,进行一些处理,将结果存储在提交日志中,然后返回结果。为了保证最多丢失 x 秒的数据,这个提交日志需要每 x 秒 fsync 一次。
我想避免线程之间的同步,这意味着它们每个都需要有自己的提交日志而不是共享日志 - 是否可以以高性能的方式定期同步所有这些不同的提交日志?
这是在 Linux、ext4(或 ext3)上
(注意:由于代码的性质,即使在正常处理期间,线程也需要从提交日志中重新读取一些自己最近的数据(但从不其他线程提交日志数据),所以我认为这样做是不切实际的使用共享日志,因为许多线程需要读/写它)
linux - fsync(fd) 是否适用于外部程序创建的文件?
我有一个禁用写缓存的 SATA 硬盘:
我正在ext4
使用这些挂载选项(以及其他选项)的分区上进行操作:
Linux 内核版本为2.6.32-5-686
.
现在,我有一个无法修改的外部程序,但我知道它会通过以下方式创建一个文件:
即它在关闭前不同步。所以在这一点上,数据可能在 RAM 中,在内核/fs 缓存的某个地方。
注意:元数据还不是问题:在我确定数据已经到达磁盘盘片后,最终的元数据将被写入并同步。数据本身就是问题所在。
所以问题是,我怎样才能帮助数据到达实际的磁盘盘片?
之后我考虑过运行这个单独的程序:
这将有助于刷新数据,还是我应该使用不同的方法?
c - fflush、fsync 和同步与内存层
我知道已经有类似的问题,我看了看,但我找不到一个明确的、明确的答案来回答我的问题。我只是在网上调查这些功能及其与内存层的关系。特别是我发现了这篇漂亮的文章,它让我对内存层有了很好的了解
似乎fflush()
将数据从应用程序移动到内核文件系统缓冲区,没关系,每个人似乎都同意这一点。唯一让我感到困惑的是,在同一篇文章中,他们假设写回缓存说fsync()
“数据保存到稳定存储层”,然后他们补充说“存储本身可以将数据存储在写入-back 缓存,因此fsync()
使用 O_DIRECT 打开的文件仍然需要将数据保存到稳定的存储中”
在这里和那里阅读似乎事实是,fsync()
让sync()
数据进入存储设备,但如果这个有缓存层,它只是被移动到这里,而不是立即移动到永久存储,如果出现电源故障,数据甚至可能丢失. 除非我们有一个启用了障碍的文件系统,然后“ sync()
/fsync()
和其他一些操作将导致适当的 CACHE FLUSH (ATA) 或 SYNCHRONIZE CACHE (SCSI) 命令发送到设备” [来自您的网站答案]
问题:
如果要更新的数据已经在内核缓冲区中,并且我的设备在回写模式下有一个易失性缓存层,那么就像文章所说的那样,像
fsync()
[sync()
我想] 这样的操作将数据同步到稳定的内存层是真的吗跳过易失性的?我认为这是直写式缓存发生的情况,而不是回写式缓存。根据我的阅读,我了解到,使用回写缓存fsync()
可以将数据发送到将它们放入易失性缓存中的设备,并且它们只有在之后才会进入永久内存我读到它
fsync()
使用文件描述符,然后使用单个文件,同时sync()
导致缓冲区的总部署,因此它适用于要更新的每个数据。并且从这个页面也fsync()
等待写入磁盘sync()
的结束,而不等待实际写入磁盘的结束。两者之间是否存在与内存数据传输相关的其他差异?
感谢那些愿意提供帮助的人
python - 在 Python 中,如何在远程机器上同步写入文件?
现在我需要打开一个远程文件来写东西,代码是这样的:
现在我想确保所有数据都实际写入磁盘,因此代码修改如下:
但显示消息:
如果我想强制将文件同步写入磁盘,我该怎么办?
c++ - Windows C++ 的 Fsync 的替代品
有没有 fsync for windows 的替代品?(C++ 构建器)
fsync 需要包含 unistd.h 并且仅适用于 unix 系统
谢谢!
c - Unix 上 C 中的 AIO - aio_fsync 用法
我无法理解这个函数aio_fsync
的作用。我已经阅读了手册页,甚至在谷歌上搜索过,但找不到可以理解的定义。你能用简单的方式解释它,最好用一个例子吗?