有没有办法将我的主硬盘(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