推迟*所有*磁盘写入,将它们保留在内存中

推迟*所有*磁盘写入,将它们保留在内存中

如何暂时停止脏数据与磁盘的同步,而只是将其保留在内存中。

澄清:我想稍后同步。

答案1

如果你想尽可能防止磁盘写入,你可以这样做笔记本电脑模式。笔记本电脑模式的功能之一是允许磁盘旋转并阻止内核写入磁盘,直到内存已满或发生超时(或直到磁盘需要旋转才能从中读取数据) 。另请参阅拱门维基。您可能只想启用磁盘降速而不启用其他功能,并LM_SECONDS_BEFORE_SYNC配置

还有诺夫卢什德,它执行此特定工作(并且比笔记本电脑模式更容易配置,因为它不执行任何其他操作)。我过去很高兴地使用它,但它已经有一段时间没有维护了,所以我不知道它是否仍然适用于现代系统。

请注意,阻止磁盘写入并不是对写入的防御,而是一种节能(和降噪)措施。很难准确控制可能导致磁盘旋转的原因,例如一些需要读取的数据,因为它已从缓存中擦除,此时将写入磁盘。

如果您想要阻止磁盘写入的原因是您任何情况下都不希望磁盘内容被修改,你需要不同的工具。您可以使用以下命令在文件系统级别执行此操作联合安装。以只读方式挂载磁盘,在tmpfs文件系统上创建一个目录,然后创建两者的联合挂载,其中 tmpfs 目录是读写分支。看以只读方式挂载文件系统,并将写入重定向到 RAM?有关 Linux 上联合安装软件的几个示例。这就是具有持久性选项的 Linux 实时安装的工作方式:实时安装是只读的,但持久性数据分区联合安装在其之上。

您还可以在块设备级别实现类似的效果,尽管我想不出更喜欢这种解决方案的令人信服的理由。看GNU/Linux:覆盖块设备/可堆叠块设备或者,如果磁盘数据位于 LVM 卷或 ZFS 文件系统上,您可以创建快照以保留某个时间点的数据副本,同时继续写入逻辑上独立的设备。

答案2

这听起来像是一份工作eatmydata

在 Debian 中,尝试类似的东西

apt-get install eatmydata
printf "\nLD_PRELOAD=libeatmydata.so" >> /etc/ld.so.preload

然后重新启动。

相关内容