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