快速而肮脏的总结:我想要一个像写缓存这样的东西,只有在系统不忙时才会耗尽。
我想要一些类似于这个问题RAM 磁盘和物理 RAID的东西,稍微有点扭曲。
对于我经常进行的特定构建,我想将构建输出保留在最终写入磁盘的 ramdisk 中。我正在构建的一个特定目标实际上是一堆 cp、tar、gzip 等,所以我受磁盘限制。在紧凑的调试周期中,我希望它快速,并且不要太在意构建输出是否因断电而被破坏。但是,如果在系统不忙时将 ramdisk 同步到磁盘,那就太好了。我可以想象用一个 cron 作业来做这件事,但我问你们所有人,如果有一个更连贯的解决方案,它结合了另一个问题的特征(溢出到磁盘的 ramdisk)和这个新的转折(给定足够的空闲磁盘时间, ramdisk 的内容也会写入磁盘)。理想情况下,整个事情看起来像一个单一的挂载点,
- - 更新 - -
我不认为页面缓存能满足我的要求,因为我真的想要相当快的写入性能。
您要求的是延迟写入机制,即写入 ramdisk 优先于写入永久存储,但所有数据最终都会写入磁盘,对吗?
尽管听起来很有趣,但您也许可以使用 LVM 镜像来完成此过程。
使 ramdisk 成为具有物理驱动器的卷组的成员。
将 ramdisk 镜像到您的硬盘驱动器。请注意,LVM 镜像是特定于方向的,即数据从一个 PV 单向流向另一个 PV。
将 LVM 卷作为统一文件系统挂载到某处。
写入被假脱机并写入基于 LVM 的 ramdisk(并且凭借镜像,物理驱动器也是如此)。与写入是同步和并行(两个驱动器同时写入)的 RAID-1 不同,LVM 镜像是异步和顺序的(主驱动器接收写入,然后 LVM 将写入推送到镜像)。这与您正在寻找的行为很接近(但不是 100%)。请记住,LVM 确实会对未决写入施加压力以清除磁盘,因此您看到的任何“空闲”最多以秒为单位,最坏的情况是部分秒。
这种安排的另一面是你现在有一个非常好的持久性机制。启动时,创建您的 ramdisk 并将现有驱动器镜像到它;镜像完成后,打破镜像并反转方向(ramdisk -> hdd)。这意味着每次重新启动都会导致您的数据被放入 ramdisk,并且在关机之前,从 ramdisk 写回硬盘驱动器。它可能是用 perl 或 shell 脚本编写的。
我确信还有其他方法可以做到这一点,但这是快速'n'dirty 版本。我会再考虑一下,看看我能弄清楚什么。
您所描述的正是您的操作系统的磁盘缓存应该做的事情。如果现代操作系统有足够的内存可供使用,他们就非常擅长这一点。
在我看来:给你的机器足够的内存,让操作系统来做艰苦的工作。
几个古怪的想法。首先,Puppy Linux 有点这样做;它经常将您的工作空间同步到永久。它似乎通过智能脚本和简单的复制命令来做到这一点。
其次...如果您经常在 ramdisk->real 磁盘之间安排一个 rsync 怎么办?