我在 2TB 磁盘上有一个现有的 btrfs 文件系统,我想添加另外 5TB 磁盘作为冗余。
我可以简单地用 btrfs 格式化新磁盘,然后添加设备
btrfs device add /dev/sdX /mymountpoint
btrfs filesystem balance start -dconvert=raid1 -mconvert=raid1 /mymountpoint
我最终会得到 2TB 的可用磁盘空间,并且所有内容都存储在两个磁盘上。但是,如果我可以使用 5TB 磁盘上的备用 3TB,这样每次写入都会两次写入较大的磁盘(2TB 磁盘存储所有内容一次,5TB 磁盘存储所有内容两次),那么我就可以拥有更多的冗余。这可能吗?
我知道存在诸如延迟较高、速度降低等缺点。
答案1
从技术上讲,如果你在较大的磁盘上创建两个 2 TB 的分区,你将能够将它们与较小的磁盘一起使用(或它的分区) 为三个大小相同(或几乎相同)的设备。
即使你不介意这样做,也不要这么做。原因如下:
btrfs 首先将所有设备组合成一个存储池,然后在创建文件数据时复制块。RAID-1 目前定义为“所有数据在不同设备上的 2 个副本”。这与 MD-RAID 和 dmraid 不同,因为它们为 n 个设备制作了 n 个副本。在三个 1 TB 设备上的 btrfs RAID-1 中,我们获得了 1.5 TB 的可用数据。由于每个块仅复制到 2 个设备,因此写入给定块只需要写入 2 个设备;只能从一个设备读取。
(来源)
因此,可能会(并且会)发生某些数据最终出现在较大磁盘的两个分区上,而不是较小磁盘上的情况。我猜想,如果较大磁盘部分/本地发生故障,这种“穷人的冗余”有时可能会有所帮助。如果整个磁盘发生故障,那么碰巧存储在其上两次的数据将会丢失。
您可以使用“n 个设备 n 个副本”方法来实现您想要的效果(再次强调:在这种情况下,较大磁盘上的两个分区是设备)。您可能对以下内容感兴趣使用 LVM 和 MDRAID 进行 RAID 的优缺点。
但是如果我是你,我不会这么做。在这种设置下,每个写入操作都会涉及同一物理设备上的两个分区。即使你按顺序写入两个分区,这些也是并发写入,需要磁头来回移动;除非你专门设法设置分区,因此相应的写入由两个不同的磁头在公共臂的相同位置执行。固件是否能够同时使用两个磁头进行写入?首先,数据是否总是半同时到达两个分区?在对两个分区的相应写入之间不会安排任何读取操作吗?我对这些都表示怀疑。
因此,可以合理地假设磁头的移动距离比非 RAID 配置要远。这可能会缩短磁臂的使用寿命。当磁臂发生机械故障时,整个磁盘都会发生故障。那么,无论磁盘上有多少份副本都无关紧要;剩下的只是较小的磁盘。
结论:您的想法可能会增加失败的风险,而当失败发生时,额外的冗余就完全无关紧要了。
答案2
没有直接使用 btrfs 实现此目的的方法。但更重要的是,这是一种危险的配置,不应使用。
RAID1 的目的是为了冗余。在单个磁盘上存储两次数据并不能提供冗余:如果该磁盘发生故障,您的数据就会丢失。