我有2个存储设备;经典的慢速 HDD(750GB,/dev/sda
)和更快的 SSD(128GB,/dev/sdb
)。目前我已经在 SSD 上的同一个 btrfs 分区上安装了 Ubuntu 和 Mint ( /dev/sdb5
)。我的 btrfs 池由/dev/sdb5
.
我想要实现的是 HDD 上的数据复制,同时保持 SSD 性能:如下所示:
对于读取情况,理想的程序如下所示:
- 从SSD读取
- 检查校验和
- 如果它验证了..太棒了,给我数据
- 如果没有,则从HDD中取出数据,并通过重复数据进行纠错
btrfs check --repair
我会每月左右手动运行(一些工具,我不确定是哪一个……也许?)来检查 HDD 校验和,并通过 SSD 数据针对 bitrot 进行更正。
对于写入情况:
- 写入SSD
- 当写入要求较低时同步到 HDD,从而不会减慢系统速度。
这可能吗?我该怎么做?
最重要的是,我喜欢 btrfs,并希望它能够自动跨 HDD 和 SSD 驱动器复制数据,同时保持 SSD 出色的性能。
使用 SSD 作为写入缓存不是一种选择,因为它缺少数据重复和安全性。
答案1
假设您的 SSD 写入速度更快(而不仅仅是读取速度),那么有一种简单的方法可以使用 Linux 的 RAID 子系统进行设置。假设您要复制/dev/sda1
(HDD) 和/dev/sdb1
(SSD):
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 --write-mostly --write-behind=1024 /dev/sda1
--write-mostly
意味着前面的设备将优先用于读取,而后面的设备大多数时候只会被写入。--write-behind
意味着允许以写为主的设备落后;该参数决定写入缓冲区有多大。您可能需要根据计算机的性能调整 write-behind 参数。
如果您想使用现有的卷,您可以将其转换为超级块格式 1.0 的 RAID-1。
驱动器已经包含了自己的完整性检查,因此顶部的另一个驱动器通常没有多大用处。驱动器故障的主要问题是数据变得不可读,而不是数据损坏。我不知道 SSD 和 HDD 的相对未检测错误率是多少,但我怀疑它大致相同(因此不是 SSD 与 HDD,而是特定设备之间),因此没有理由假设数据读回从 HDD 读取更准确。如果您需要,Btrfs 和 ZFS 具有可选的文件系统级完整性验证。