sir*_*ize 10 linux ssd hard-drive cache spinup
首先是简短版本:我正在寻找能够使用 SSD 透明缓存 HDD 写入的 Linux 兼容软件。但是,我只想每天启动一次或两次硬盘(将缓存的数据写入硬盘)。其余时间,由于噪音问题,HDD 不应旋转。
现在是更长的版本:我已经构建了一台运行 Xubuntu 的完全静音的计算机。它有一个 A10-6700T APU、巨大的无风扇散热器、无风扇 PSU、SSD。问题是:它也有(并且需要)一个嘈杂的硬盘驱动器,我想禁止它在夜间旋转。所有写入都应该缓存在 SSD 上,晚上不需要读取。
这台计算机每天都会自动下载大约 5 GB 的数据,这些数据将保留大约一年,因此所需的总磁盘容量略低于 2 TB。该数据目前存储在 3 TB 噪音大的硬盘驱动器上,该驱动器日夜不停地旋转。有时,我需要访问几个月前的一些数据。但是,大多数时候我只需要过去 14 天的数据,这些数据适合 SSD。理想情况下,我想要一个透明的解决方案(一个文件系统上的所有数据),它将所有写入缓存到 SSD,每天只写入一次 HDD。如果读取仍在 SSD 上,则将由缓存提供读取服务,否则 HDD 将不得不启动。
我尝试过bcache没有太大成功(使用 cache_mode=writeback、writeback_running=0、writeback_delay=86400、sequential_cutoff=0、congested_write_threshold_us=0 - 有什么遗漏?)我读到了ZFS ZIL/L2ARC但我不确定我能实现我对 ZFS 的目标。任何指针?
如果一切都失败了,我将简单地使用一些脚本自动将文件复制到大驱动器,同时从 SSD 中删除最旧的文件。
编辑:缓存确实是我想要的错误术语。目前看来,最初的预期解决方案对我来说是不可能的。感谢所有做出贡献的人!
这并不是缓存真正的工作方式或原因 - 缓存的目的是利用 SSD 或其他内存更快的速度和更好的随机访问,而不是最大限度地减少对 HDD 的写入。缓存旨在通过使用更小、更快的缓冲区来支持大而慢的存储设备,从而最大限度地提高速度,而不是减少写入。
事实上,bcache 作为主线 Linux 内核的一部分,只会将顺序写入传递到 HDD,而不是通过 SSD 传递,因为没有性能优势。
ZIL/L2Arc 使用 SSD 来存储日志(对于 ZIL)和常用文件集群(对于 L2Arc)。ZIL 通过存储同步写入直到它们准备好写入来加速同步写入。L2Arc 将常用访问的文件存储在更快的存储上。这些都不会让你做你需要做的事情。
Fusion 驱动器 还使用 SSD 和 HDD,将常用文件透明地放在 SSD 上以实现更快的读取速度,并使用 HDD 来批量存储不常用的文件。它也不允许您使用 SSD 作为暂存空间,并经常将文件备份到主驱动器
您所看到的根本不是缓存,而是系统到硬盘的定期备份。我猜您可能可以与Aufs一起捏造一些东西 - HDD 上的第一个分支具有较大的文件(因此需要优先),以及 SSD 上的分支,然后运行一个脚本将文件从 SSD 移动到定期硬盘驱动器,同时可以从同一位置访问它。我还没有对此进行测试,但与缓存不同,定期移动文件和使用 aufs 可能正是您想要的。
按时间排序文件的最简单方法是 ls -tr - t 按时间排序(最新到最旧),而 r 则反转顺序。(如果您心中有一个特定的范围,则find . -mtime n
效果很好,因为特定数字为您提供 n 天前修改的文件,-n 为您提供最近 n 天修改的文件,+ n 为您提供 n 天前修改的文件)。您可以在这里找到一些关于如何使用它的想法
由于安静是您的真正目标,您可以检查您的驱动器是否支持静音模式hdparm -M /dev/sda
- 这应该输出类似的内容acoustic = 254 (128=quiet ... 254=fast)
,在这种情况下,您可以使用命令使您的硬盘驱动器更安静hdparm -M 128 /dev/sda
。hdparm -M 1254 /dev/sda
当您需要更快的速度时,运行相反的命令。