如何主动刷新磁盘写入?

如何主动刷新磁盘写入?

我在 x86_64 设备上使用 Ubuntu 18.04。

几个月来,一个神秘的问题一直困扰着我,我无法重现这个问题,即我们的应用程序的配置文件已损坏。昨天,我终于看到这种情况发生了两次,并确定了问题的原因:用户通过 SFTP 上传新的配置文件后拔出并重新插入设备电源以重新启动它。

我相信操作系统正在缓冲磁盘写入,然后选择何时将它们提交到磁盘。如果在刷新缓冲区之前设备断电,则写入会丢失。这表现为文件已损坏 - 它的大小为零。

我知道明显的解决方案是停止这种(可怕的)做法并鼓励用户安全地重新启动设备(因为重新启动将刷新写入)。我会尽力鼓励这一点,但不幸的是,用户已经习惯了能够拔掉电源来重新启动设备;尽管情况很糟糕,但告诉每个人开始以正确的方式去做并不容易。

因此,我的第一个问题是是否有一种方法可以积极地刷新写入,以便写入更有可能快速刷新到磁盘。我想有一些方法可以调整内核参数来影响这种行为。

我确实意识到几乎所有重要的文件上传都将位于一个特定于应用程序的目录中,因此我也想知道是否可以使用一种程序来侦听对该目录的写入并在每次写入后强制进行磁盘同步。这可能更可取,因为它仅针对该目录而不是整个操作系统强制执行快速刷新。类似地,如果有一个解决方案仅影响磁盘的单个分区,那就足够了,因为将应用程序特定的文件移动到专用分区是很简单的。

告诉 Linux 主动刷新磁盘写入的最佳方法是什么?是否有一种解决方案可以仅针对特定目录或磁盘分区有效地执行此操作?

答案1

您可以仅同步一个文件同步或(无元数据更改)数据同步,只是一个文件系统同步文件系统,或一切与同步。但只是一个目录?sync /var/log/syslog是仅同步目录的示例。

相关内容