如果我将 SSD 和 HDD 组合在 btrfs RAID1 中,我能否在保持数据安全的同时获得 SSD 读写性能

如果我将 SSD 和 HDD 组合在 btrfs RAID1 中,我能否在保持数据安全的同时获得 SSD 读写性能

我有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 具有可选的文件系统级完整性验证。

相关内容