1
AkaGhost 2023-06-12 22:31:51 +08:00
TrueNAS 可以用:
只读缓存:ARC/L2ARC 如果你说同步写入也想要优化就用 SLOG 。 --- 上述方法不好用的话,可以尝试自己搓个脚本,定时把文件都 mv 到机械硬盘里,然后软链接到 NVME 的挂载点里。 --- 楼主可以看看: https://www.utopiafar.com/2022/03/26/how_to_improve_zfs_performance_on_freenas |
2
Jirajine 2023-06-12 22:34:51 +08:00 2
overlayfs 和你描述的需求一模一样。
把 nvme 挂载到 hdd 的上层,这样 nvme 里有的文件会访问 nvme 的,没有的会访问 hdd 的。 |
3
23f0baf3 OP @wyf001912hp 这几个我大概了解过,读缓存来说 ARC 不是把几十 G 的数据放缓存里其实命中率很低,然后写缓存来说似乎这些都是优化同步写入的,而 smb 是异步写入,我理解异步写入是内存缓存,很快会被释放。ZIL ,SLOG 之类的缓存似乎也会较快释放不会长时间大规模的保存。
楼下说的 overlayfs 可能确实比较符合我的需求,可能会用 overlayfs 加计划任务脚本实现吧 |
4
aru 2023-06-12 23:48:36 +08:00
overlayfs 不能实现
overlayfs 的底层( hdd) 是不能修改、新增、删除的 |
5
chronos 2023-06-13 13:41:21 +08:00 1
https://github.com/trapexit/mergerfs 这个应该比 overlayfs 更适合你的场景。每日操作的数据直接放到 nvme 上,通过 mergerfs 将 hdd 和 nvme 合并到一个目录,使用 smb 开放服务,再跑个定时脚本去迁移数据。
|
6
chronos 2023-06-13 13:49:26 +08:00
mergerfs 创建文件有多种规则可以选,比如使用 epmfs 时当 nvme 存在文件夹 A 时,在 mergerfs 挂载的目录下的 A 目录中创建文件时就会创建到 nvme 里。如果 nvme 空间不足,会自动创建到 hdd 中。
mergerfs 还支持在线迁移文件和在线修改子挂载选项,只要当前文件没有在打开状态,可以直接 mv 或 rsync --remove-source-files 之类的方式迁移到 hdd 上。 |
7
EvineDeng 2023-06-15 10:47:27 +08:00
我的推荐也是 mergerfs ,保留 nvme 和 hdd 本来的各自的挂载点,新增一个 mergerfs 合并后的挂载点(可以选择不同的 merger 策略,见 @chronos 提供的链接的官方文档),平时使用就用合并后的挂载点。另外搞个脚本,定期把 nvme 的内容 rsync 到 hdd (使用原本各自的挂载点),然后再依据 nvme 的剩余空间大小和文件的 Access Time 或者 Modify Time 或者 Change Time 来删除定量的文件。
|
8
EvineDeng 2023-06-15 12:14:22 +08:00
另外,还有一个 SHELL 脚本: https://github.com/graysky2/anything-sync-daemon ,这个主要是指定目录,让内存作为其缓存,然后定期将内存中的东西写入到 HDD/SDD 。你的需求不能直接用这个,要对 common
/anything-sync-daemon.in 进行改造,改成你的需求。也可以结合 mergerfs 一起使用。 |