在LVM上设置LVM以实现灵活性的最佳策略?

好吧,我希望这个问题是独一无二的,不能被认为是另外一个“LVM和RAID有什么区别? 的问题。 开始…

我正在build立一个有一个驱动器笼子的linux服务器,它可以让我热插拔6个驱动器。 我后来的特点是:

  • 驱动器故障的容差(所以… RAID,基本上)
  • 在线更换发生故障的驱动器
  • 驱动器空间的高利用率(例如,如果我有6个1TB驱动器,5TB的一个奇偶校验驱动器比6个镜子上的1TB更好)
  • 灵活分配整个驱动器空间的卷(所以… LVM)
  • 下面是曲线球:我也希望尽可能在服务器上尽可能地将更大的驱动器replace成更大的驱动器。

如果我只想通过更换更小的驱动器来增加空间,我可以只使用lvreduce的LVM(当然,我使用Reiser或ext [2-4]等可缩小的FS,目前的FS可以通过我想要的驱动器的数量来缩小)。 但是这并没有给我任何的冗余。

我能想到的第一个解决scheme是获得冗余replace驱动器的能力,即将驱动器用作镜像对。 一对是md0,下一对是md1等。然后,我将这些添加到一个单一的卷组。 当我想增加空间的时候,我会将一个md *设备从卷组中减less,拉出两个驱动器,添加两个更大的磁盘,创build一个新的md镜像,并将它们添加到卷组中,展开FS,我完成了。

但是,这将我的空间效率降低到50%,因为每个物理驱动器都有自己的镜像。 我只得到3TB …这将使我需要尽快更换更大的驱动器。

当然,而不是镜像对,我可以将它们作为3驱动器的RAID5套件。 每3个驱​​动器会给我2TB。 所以我总共得到了4TB, 现在我遇到了一个问题,为了从卷组中取出一个md设备,需要占用更多的空间(拉一个需要2TB,而不是1TB)。 这意味着我需要更多的松散空间,否则我不能像这样交换驱动器。

所以,这是我卡住的地方。 我所知道的获得异构驱动器大小和在线驱动器更换的冗余的唯一方法是需要在更高的空间效率和更高的松弛空间要求之间作出折衷决定,以便将驱动器(或一组驱动器)。

有没有一个聪明的伎俩,我错过了?

我认为你提出的(多个RAID-1 PV的LVM)是正确的,除了一个细节:你不一定需要从你的VG中取出一个RAID集来取代它:

  1. 将一个磁盘交换到其中一个RAID集( mdadm fail,remove,physical swap,re-add)
  2. 重build
  3. 交换第二个
  4. 重build
  5. mdadm --grow
  6. pvresize

当然,这里假定你有很好的备份,而且你的单个磁盘在重build的时候不会死掉。

一个解决scheme是依靠ZFS作为文件系统。 然而,Solaris和几个BSD变体是很常见的,所以在Linux上不是必需的。 一种可能的解决scheme是在Debian / kFreeBSD中使用Debian,也就是说带有GNU用户空间的BSD内核。

ZFS非常适合从ZFS池中dynamic分配存储。 有6个驱动器可以使用一个RAID-2Z,这意味着从6个驱动器可以失败。 但是,付出的代价是只能使用与4个驱动器相对应的磁盘空间。 在ZFS中还有其他可能性,从哪个驱动器configuration池build立起来并不重要。

看一眼

  • ZFS最佳实践
  • ZFS用人类术语解释
  • ZFS维基百科上