使用主硬盘作为缓存?

使用主硬盘作为缓存?

有没有办法将我的主硬盘(NVMe pci3 SSD)用作缓存?

用例是这样的:

当我将大文件从我的台式计算机发送到我的 Ubuntu 服务器 21.04 时,我希望我的 Ubuntu 服务器首先将我要传输的文件转储到 NVMe 驱动器,然后将其转储到预定目的地,即我的一个机械 3.5 硬盘驱动器。

原因?为了最大限度地利用我在两台设备之间的 10 Gbit 网络连接,并在升级时最大限度地利用 25 Gbit 网络连接(以防将来发生)。

这可能吗?

基本上情况是这样的:

我已经从计算机 A 发送了一个 10 GB 的视频文件,我想将其传输到位置的服务器 PC /somelocation/mechanicalHDD/videos,我设想它在后台的工作方式是,我的服务器 PC 将首先从我的网络连接接收到文件,直接发送到我的主 NVMe SSD 驱动器(/home/cache),然后我的服务器从 传输/home/cache/somelocation/mechanicalHDD

我的主 PC 无需等待我的家庭服务器将其从 传输/home/cache/somelocation/mechanicalHDD。它只关心我是否已成功将其传输到服务器中的某个位置,以实现快速的传输速度。

答案1

虚拟文件系统允许您添加 SSD 作为缓存设备对于您的 HDD(也需要在 ZFS 中)通过配置所谓的存储池... 还有其他缓存解决方案。

话虽如此,缓存实际上并不是您想要的,因为您的复制命令/程序仍将等到文件完全写入目标目录,即缓存在更早结束复制过程中的作用非常小。

为了满足您的要求:

假设我有来自计算机 A 的 10gb 视频文件,我想将其传输到位于 /somelocation/mechanicalHDD/videos 的服务器 PC 上,我设想它在后台的工作方式是,我的服务器 PC 将首先从我的网络连接直接接收到我的主 nvme 驱动器(/home/cache),然后我的服务器从 /home/cache 传输到/somelocation/mechanicalHDD

我的主电脑不必等到我的家庭服务器将其从 /home/cache to /somelocation/mechanicalHDD.它只关心我是否 已成功将其传输至我的服务器中的某个位置以便快速传输 速度。

我建议你直接将文件复制到服务器的 SSD 上,然后运行脚本来检查 SSD 上的内容并将其移动到 HDD 上...这样更可靠文件首先永久保存到 SSD 中) 和快点将比将缓存写入硬盘更快完成从桌面到服务器的复制过程)比使用 ZFS 之外的任何缓存解决方法都要好……该脚本将非常简单:

#!/bin/bash

source_d="/home/cache/" # Specify the source directory.
destination_d="/somelocation/mechanicalHDD/videos/" # Specify the destination directory.

inotifywait -m -q -e close_write "$source_d" |

  while read -r path action file; do
    echo mv -n -- "$path$file" "$destination_d$file" # "echo" is there for a dry-run(simulation) ... remove it to enable moving files
  done

答案2

看起来 bcache 可以满足您的需要。

虽然这个答案有些过时,但它可以为您提供基本知识:

如何设置 bcache?

还有 Arch Linux 的优秀的文档作为参考。

相关内容