保留旧文件的 Ramdisk

保留旧文件的 Ramdisk

我有一个程序将文件写入磁盘,然后另一个程序处理它。这通常发生在一秒钟左右,因此文件几乎是临时的。为了避免磁盘 IO,我写入 /dev/shm。但是,如果第二个进程停止工作或落后,我不想失去全部系统崩溃/重启时的数据。

我想要一个能够将超过 X 秒的文件复制到硬盘(而不是 SSD)的设置。

现在我已看到环保法规,但它在块级别上工作。因此它不会具有我想要的文件语义或安全性。据我所知,bcache 也是如此。(此外,bcache 针对的是 SSD 类型的性能,因此最好不要将它与 HDD 一起使用。)

我希望在正常情况下磁盘 IO 为零,然后在一定时间后简单地复制文件。我可以使用标准文件系统并设置一些写回缓存并获得此功能吗?或者这是 cronjob 和 rsync 的功能?

答案1

如果您不坚持使用内存文件,但可以接受文件的内存数据,并且不害怕开发当前代码,那么您可以使用 redis。http://redis.io/

它是一个非常非常简单的内存键值数据库管理器,可以在给定的时间间隔后将数据保存到磁盘,并且除了方便的命令行工具外,它还绑定到所有合理的语言。

你需要做的是:

  • 将 redis 的持久化间隔设置为一个你认为足够安全的值,可以存储等待时间过长的数据,但又足够长,不会存储随时间出现和消失的数据,
  • 将数据写入进程 A 中的 redis 中,而不是写入文件,
  • 从进程A中的redis读取数据,
  • 删除数据

一旦redis或者OS崩溃,下次启动redis时,会自动读取已持久化的数据等待处理。

相关内容