我遇到了大多数人遇到的相同问题:如何创建一个可靠的个人存储解决方案,其事实是:
- 硬盘发生故障并具有令人震惊的规律性。丢失文件是不可接受的。
- 我会不时购买新的硬盘。不可避免的是,最佳价格/ GB与上次购买的硬盘大小不同。
2表示随着时间的推移,我将拥有异构的磁盘集合。我想全部使用它们,出现故障的磁盘通常将替换为较大的磁盘。
- 对我而言,数据完整性和可靠性比速度更重要。
因此,在将这个问题猛烈抨击几天(并且在我的脑后多年)之后,我提出了以下解决方案。我将描述基于Ubuntu PPA中可用的本机Linux ZFS测试过的解决方案,但是可以使用LVM,MD和btrfs来实现相同的解决方案。为此,我将使用RAID1(ZFS镜像vdevs)。
- 给定您的驱动器组,将它们分为两组磁盘,以使每组磁盘的容量尽可能接近彼此。
- 对较大的磁盘进行分区,以使另一组中的分区与较小的磁盘之一完全相同。
- 创建镜像vdev,以使每个磁盘在另一个磁盘上都有其镜像。
例如,考虑一个新的2TB驱动器,一个较旧的750GB驱动器,2个较旧的400GB驱动器和一个较旧的500GB驱动器的磁盘集。最佳的镜像分区具有2TB的可用空间,并在下图中进行了描述,其中“:”分隔分区,“ |” 分离磁盘:
+------------------------------------------------------------------+
| 2TB (sda1) : (sda2) : (sda3) : (sda4) |
+------------------------------------------------------------------+--+
| 750 GB (sdb) | 400 GB (sdc) | 400 GB (sdd) | 500 GB (sde1) :XX|
+---------------------------------------------------------------------+
创建您的zpool为
zpool create archive mirror /dev/sda1 /dev/sdb mirror /dev/sda2 /dev/sdc mirror /dev/sda3 /dev/sdd mirror /dev/sda4 /dev/sde1
这将创建4个镜像的vdev。如果任何一个磁盘发生故障,都可以将其替换(使用任何大小的磁盘)并进行分区以重新创建丢失的分区。可以将ZFS vdev添加到池中但不能将其删除很重要。因此,如果有可能,当您购买新驱动器时,您想重新排列现有的vdev。假设下一次购买是3TB驱动器。最佳配置为3.5TB可用,如下图所示。现在,这是5个vdev对。这可以通过适当的分区以及依次对驱动器进行故障和重新分区来实现。
+--------------------------------------------------------------+-------------+
| 3 TB (sdf1) : (sdf2) : (sdf3) : (sdf4) | 500GB (sde) |
+--------------------------------------------------------------+-------------+-+
| 2TB (sda1) | 400GB (sdb) | 400GB (sdc) | 750GB (sdd1) : (sdd2) :X|
+------------------------------------------------------------------------------+
也可以使用LVM或MD RAID维护这对镜像驱动器,其目的是确保每个驱动器始终具有镜像驱动器或分区。由于所有内容均已镜像,因此在添加或删除驱动器时,我们可以随意使驱动器发生故障并重新排列分区。如果需要,使用LVM或MD可以删除驱动器并缩小阵列,但与BTRFS相比,ZFS中较复杂的恢复工具为代价。
对这个程序有什么意见吗?一个好的脚本可以处理驱动器的无损分配和重新布置。对LVM,MD,ZFS有何评论?对所得的奇怪分区阵列的性能有何评论?同一驱动器上多个分区之间的数据安排会导致过多的磁头查找和早期故障吗?
BTRFS开发人员:每个人都希望这样做,并且LVM或MD在技术上不是必需的(我认为次优)。轻松维护冗余的异构阵列将是btrfs的杀手级功能。确实是LVM / MD / ZFS的黑客。最大限度地减少传送/重新同步是非常可取的。
是的,这显然是穷人的Drobo。一个人不需要专用的硬件...