是否有一个冗余的 RAID/ZFS 类文件系统,可以根据文件的访问模式优化文件的放置?我的目标是构建一个桌面系统,该系统将根据文件的访问方式和频率自动在硬盘、固态硬盘和 RAM 磁盘之间移动文件,以便通过机会性卷选择来控制磨损。例如,经常读取(并打开进行只读访问)的文件将放置在 SSD 上;经常读取但打开进行读写访问的文件将放置在 RAM 磁盘上;不经常访问的文件将移动到 HD。
我正在设想一个智能虚拟文件系统,它可以自动识别访问模式并优化物理卷布局。但是,我隐约感觉到,通过在硬盘上创建主文件系统、在 SSD 上创建交换分区,并为文件系统缓存保留大量 RAM,也可以实现类似的效果。
上述(简单)解决方案的缺点是它对底层硬件的弱点不敏感。例如,写入会导致 SSD 更快地出现故障 - 而 HD 则更容易出现故障。然而,RAM 几乎可以无限期地写入而不会出现故障。文件系统应该利用这些特性来最大限度地延长设备的使用寿命。
答案1
你应该看看文件系统,尤其是平衡部分。它可能包含完全符合或接近您需要的代码,并且您可以在此基础上进行构建。
您描述的系统几乎类似于缓存,并且在某种程度上肯定可以作为现有文件系统的附加组件来实施。一般来说,需要注意以下几点:
- 磁盘控制器不会立即传播写入,这意味着在短时间内快速写入同一个文件实际上不会导致底层硬件更新多次。
- SSD 不再像以前那么脆弱,可以承受与 HDD 相当甚至更强的冲击。没有移动部件真是太好了!
- 您提出的设计只有在访问模式不会经常更改的情况下才有用,就像任何其他缓存一样。近年来,异步 I/O 加快了感知到的磁盘交互时间,但有时这取决于应用程序级支持。另一方面,对操作系统进行修补以将文件的 RAM 副本提供给应用程序,同时对 HDD 进行 AIO,可能会提供纯内存系统无法提供的那种数据持久性(请参阅:memcached,以及为什么强烈建议不要将其用作持久性引擎)
我理解最终目标是尽可能对操作系统/用户/应用程序透明,只显示一个卷/驱动器/分区并在内部处理所有事情。我不确定桌面是此类系统的最佳目标,因为我怀疑它是否像为服务器构建的那样有用。
PS 这在硬件上已经存在混合动力一段时间以来。RAM 部分没有使用,但桌面用户无论如何也不会真正注意到它。另一个建议是组合驱动和谷歌学术还有其他。
答案2
ZFS 已经自动进行这种优化。只需在池中添加一个 SSD 作为缓存设备,您的文件(实际上是数据块)就会按照从不活跃到最活跃的顺序排列:
- 在常规磁盘上
- 在 SSD 上(L2ARC)
- 在 RAM 上 (ARC)
ZFS ARC(自适应替换缓存)使用的算法基于最常用的块和最近使用的块。
答案3
您可能需要查看 bcache:http://bcache.evilpiepirate.org/
看起来很有希望但我还没有尝试。