使用LVM和MDRAID进行RAID-优缺点?


51

回答“混合RAID类型”问题时,HBruijn建议使用LVM来实现RAID,而不是更标准的MDRAID。

经过一番调查,看来LVM也支持RAID功能。过去,我曾在MDRAID之上使用LVM,但直到现在我才意识到LVM也支持RAID功能。这似乎是一个相对较新的进展,但是我还没有确切地知道何时实施。

因此,这些是在Linux上实施软件RAID的替代方法。这两种不同方法的优缺点是什么?我正在寻找两种方法之间的功能比较,以便人们可以决定哪种方法更适合他们。只要您将数据包括在答案中,基于实验的结论(例如,此功能将无法正常运行,这就是原因)也是可以的。

需要解决的一些特定问题:

  1. 假设我想做sw RAID + LVM(一种常见情况)。我是否应该使用LVM对sw RAID的支持,从而使用一个实用程序而不是两个?这种更加集成的方法是否有任何优势?
  2. 与更成熟的MDADM相比,对sw RAID的LVM支持是否存在重大缺陷?具体来说,LVM对sw RAID的支持有多稳定/没有错误?似乎该支持只能追溯到2011年(请参见下文),而MDADM则要早得多。此外,在功能集方面如何进行比较?与MDADM相比,它是否存在明显的功能缺陷?相反,它是否支持MDADM不具备的任何sw RAID功能?

笔记:

  1. http://www.olearycomputers.com/ll/linux_mirrors.html上有详细的讨论, 但是我无法确定它的写成日期。

    关于Serverfault的类似问题:linux LVM镜像与MD镜像。但是,这个问题是在2010年提出的,答案可能已经过时。

  2. 版本2.02.87-2011年8月12日的更新日志条目具有

    为MD RAID 1/4/5/6支持添加新的segtype'raid'的configure --with-raid

    因此,看起来LVM中的RAID支持已有3年的历史了。


我能想到的一个优势是使用了LVM可用的HA相关功能。
布拉奇利2014年

1
@JoelDavis您能详细说明吗?我不知道与HA相关的功能是什么。
Faheem Mitha 2014年

此外,通常还有一个优点是您使用逻辑卷而不是md卷。所以,你必须lvextendpvmove现有的设备之间移动,而使用md过程中是没有明确的利益多了很多手册。
布拉奇利2014年

@JoelDavis也许写一个答案?
Faheem Mitha 2014年

2
LVM一直支持raid1和raid0。最近,他们放弃了自己的实现,而是在内部使用md的raid个性代码,从而打开了其他raid级别。
psusi

Answers:


55

LVM RAID有多成熟?

LVM-RAID实际上是秘密的。它基本上通过为每个RAID设备创建两个逻辑卷(一个用于数据,称为“ rimage”;一个用于元数据,称为“ rmeta”)来工作。然后,将其传递给现有的mdraid驱动程序。因此,处理磁盘读取错误,I / O负载平衡等工作应该已经相当成熟。

那是个好消息。

工具类

您不能mdadm在上面使用它(至少,并非以任何简单的方式¹),LVM RAID工具还远远没有成熟。例如,在Debian Wheezy中,lvs无法告诉您RAID5同步状态。我非常怀疑修复和恢复(尤其是从“永不发生!”的情况)是否与mdadm差不多(并且我偶然遇到了我的测试中的一个,而最终只是放弃了恢复) mdadm会很容易)。

特别是如果您不使用所有工具的最新版本,情况将会变得更糟。

缺少功能

当前版本的LVM-RAID不支持缩小(lvreduce)RAID逻辑卷。它们也不支持更改磁盘数量或RAID级别(lvconvert给出错误消息,提示尚不支持)。lvextend确实有效,甚至可以增加直到最近才获得支持的RAID级别,例如RAID10。以我的经验,扩展LV比减少LV更常见,因此这实际上是合理的。

其他一些mdraid功能不存在,尤其是您不能自定义mdadm可以使用的所有选项。

在较旧的版本(例如,在Debian Wheezy中找到),LVM RAID也不支持增长。例如,在Wheezy上:

root@LVM-RAID:~# lvextend -L+1g vg0/root
Extending logical volume root to 11.00 GiB
Internal error: _alloc_init called for non-virtual segment with no disk space.

通常,您不想运行Wheezy版本。

上面是一旦您安装它。这也不是一个微不足道的过程。

工具问题

在玩我的Jessie VM时,我(实际上)断开了一个磁盘的连接。没问题,机器保持运转。lvs但是,没有给出阵列降级的迹象。我重新连接了磁盘,并卸下了第二个磁盘。保持运行状态(这是raid6)。重新连接,仍然没有指示lvs。我lvconvert --repair按了体积,它告诉我还可以。然后我拉了第三个磁盘...机器死了。重新插入,重新启动,现在不确定如何修复。mdadm --force --assemble将解决此问题;既没有,vgchangelvchange似乎没有该选项(lvchange接受--force,但似乎没有任何作用)。即使试图dmsetup将映射表直接提供给内核,我也无法弄清楚如何恢复它。

另外,它mdadm是仅用于管理RAID的专用工具。LVM的功能还很多,但感觉(我承认这是很主观的)就像RAID功能已被推入其中。它不太适合。

您如何实际安装带有LVM RAID的系统?

这是在Debian Jessie或Wheezy上安装它的简要概述。杰西要容易得多。请注意,如果您打算在Wheezy上尝试使用此功能,请先阅读整篇文章...

  1. 使用完整的CD映像而不是netinst映像进行安装。

  2. 正常进行操作,进入磁盘分区,设置LVM物理卷。你可以/boot对LVM-RAID(上杰西,并用喘息下文详述一些工作)。

  3. 创建您的卷组。保留在LVM菜单中。

  4. 最初的乐趣–安装程序没有dm-raid.ko加载模块,甚至没有可用!因此,您可以从将要安装的linux-image软件包中获取它。切换到控制台(例如Alt- F2),然后:

    cd /tmp
    dpkg-deb --fsys-tarfile /cdrom/pool/main/l/linux/linux-image-*.deb | tar x
    depmod -a -b /tmp
    modprobe -d /tmp dm-raid
    
  5. 安装程序不知道如何创建LVM-RAID LV,因此您必须使用命令行来完成。注意,我没有进行任何基准测试;下面的条带大小(-I)完全是我的VM设置的猜测:

    lvcreate --type raid5 -i 4 -I 256 -L 10G -n root vg0
    
  6. 在Jessie上,您可以使用RAID10进行交换。在Wheezy上,不支持RAID10。因此,您可以使用两个交换分区,每个RAID1。但是,您必须准确地告诉它要放置在哪些物理卷上,或者将镜像的两半都放在同一磁盘上。是。说真的 无论如何,这看起来像:

    lvcreate --type raid1 -m1 -L 1G -n swap0 vg0 /dev/vda1 /dev/vdb1
    lvcreate --type raid1 -m1 -L 1G -n swap1 vg0 /dev/vdc1 /dev/vdd1
    
  7. 最后,切换回安装程序,然后在LVM菜单中单击“完成”。现在,您将看到许多逻辑卷。那是安装程序不了解正在发生的事情。忽略所有带有rimage或带有rmeta其名称的内容(有关上述内容的解释,请参见上面的第一段)。

  8. 继续正常创建文件系统,交换分区等。安装基本系统等,直到出现grub提示符。

  9. 在Jessie上,如果将grub2安装到MBR(或可能与EFI一起使用,但我尚未对其进行测试),它将可以工作。在Wheezy上,安装将失败,唯一的解决方案是向后移植Jessie的grub2。这实际上很容易,它可以在Wheezy上干净地编译。以某种方式,将您的反向移植的grub软件包放入/target(或在chroot之后一秒钟执行),然后:

    chroot /target /bin/bash
    mount /sys
    dpkg -i grub-pc_*.deb grub-pc-bin_*.deb grub-common_*.deb grub2-common_*.deb 
    grub-install /dev/vda … grub-install /dev/vdd # for each disk
    echo 'dm_raid' >> /etc/initramfs-tools/modules
    update-initramfs -kall -u
    update-grub # should work, technically not quite tested²
    umount /sys
    exit
    
  10. 实际上,在我最近的Jessie VM grub-install上已挂起。切换到F2并执行while kill $(pidof vgs); do sleep 0.25; done,接着执行相同的操作lvs,通过grub-install获得了它。它似乎产生尽管一个有效的配置,但以防万一我做了chroot /target /bin/bash,确信/proc/sys封片,并做了一个update-grub。到那时,它完成了。然后,我dpkg-reconfigure grub-pc选择了在所有虚拟磁盘的MBR上安装grub。

  11. 完成上述操作后,在Wheezy上,选择“在没有引导程序的情况下继续”。

  12. 完成安装。它会启动。大概。

社区知识

有相当多的人了解mdadm,并且具有很多部署经验。Google可能会回答有关您的大多数问题。通常,您可能希望在一天之内在此找到有关此问题的答案。

LVM RAID不能这么说。很难找到指南。我运行的大多数Google搜索反而为我找到了使用mdadm数组作为PV的东西。老实说,这可能主要是因为它是新的,并且不那么常用。某种程度上说,反对这样做是不公平的,但是,如果出现问题,mdadm周围更大的现有社区使恢复我的数据的可能性更大。

结论

LVM-RAID正在快速发展。在Wheezy上,它实际上不是可用的(至少,不进行LVM和内核的反向移植)。早在2014年,在Debian测试中,这是一个有趣但未完成的想法。如果您经常需要创建具有不同RAID配置的小片(这是管理上的噩梦mdadm),那么当前的测试(基本上将成为Jessie)感觉就像您可能实际使用的东西。

如果几个大型mdadm RAID阵列(使用LVM分割为多个分区)可以充分满足您的需求,建议您继续使用该阵列。相反,如果您不得不创建许多阵列(甚至逻辑卷阵列),请考虑改用LVM-RAID。但是请保持良好的备份。

LVM RAID(甚至mdadm RAID)的许多用途已被集群存储/对象系统,ZFS和btrfs等事物所接管。我建议您也进行调查,以更好地满足您的需求。


谢谢你们

我要感谢psusi让我重新访问LVM-RAID的状态并更新了这篇文章。

脚注

  1. 我怀疑您可以使用设备映射器以将元数据和数据粘合在一起的方式mdadm --assemble使用。当然,您可以只mdadm在逻辑卷上运行就可以了……这会更明智。

  2. 在进行Wheezy安装时,我第一次没有这样做,并且没有使用grub配置。我必须通过在grub提示符下输入所有信息来引导系统。一旦启动,就可以了,所以我认为在安装程序中就可以了。如果您在grub提示符下结束,请输入以下神奇的行:

    linux /boot/vmlinuz-3.2.0-4-amd64 root=/dev/mapper/vg0-root
    initrd /boot/initrd.image-3.2.0-4-amd64
    boot
    

PS:距离我实际进行原始实验已经有一段时间了。我已经提供了原始笔记。请注意,我现在做的是最近的一些,涵盖在此答案中,而不是在那些注释中。


2
实际上,您得到的错误是由于wheezy中的lvm版本极其老旧和有问题。它对我来说在Ubuntu 14.04上具有lvm 2.02.98版本的工作正常(我相信jessie至少是个新版本)。其次,您显示失败的命令是调整大小-调整形状完全不同。重塑意味着从raid1更改为raid5,或从3磁盘raid5更改为4磁盘raid5。仍然不受支持,但是只需更改大小即可。
psusi

@psusi啊,我认为他们也认为调整大小也是一种调整形状(因为它改变了RAID的几何形状,因此更改的磁盘数量远不及更改磁盘的数量)。我以为在尝试在Jessie上出错之前也要进行重新测试。(必须构建一个新的Jessie LVM-RAID VM,这将花费一些时间。)谢谢。
derobert

dpkg-deb提供了一种从deb包中提取文件的更干净的方法,而无需分阶段进行操作。
muru 2015年

@muru dpkg-deb在安装程序环境中可用吗?以前不是。确保也检查Wheezy。
derobert

@derobert ar -x应该也可以解压缩deb档案,尽管它比较笨拙。另外,如何用当前状态更新答案?
Faheem Mitha 2015年

7

我也不知道LVM也可以做RAID。就个人而言,我会坚持使用mdadm,因为它是做同样事情的更成熟的软件。如果LVM RAID出现问题,您可能无法获得与使用mdadm一样多的支持。此外,由于LVM历来都不是最强大的软件,因此我不信任LVM RAID。

ZFS和BTRFS是未来。它们带来的好处超出了块层所能提供的范围。除非我的目标是兼容性,否则我将不再使用LVM / mdadm。ZFS和BTRFS具有很多功能,例如压缩,重复数据删除和写时复制,但是我在这里不赘述,因为这可能会超出范围。

最后,进行研究并使用适合您需要/想要的东西。


感谢您的回答。考虑对它为什么不信任LVM进行一些扩展。
Faheem Mitha 2015年

2
“ ZFS和BTRFS是未来”不一定。据我所知,Linux上的ZFS仍基于FUSE,因此大多数用于ZFS功能而不使用Solaris或FreeBSD。BTRFS很棒,但不一定是未来。例如,红帽似乎正在向LVM+XFSBTRFS 方向发展。他们支持BTRFS,但这更像是Oracle / SuSE。
布拉奇利

并不是说出于某种原因我不喜欢btrfs(实际上我非常喜欢)。仅仅是这不是Red Hat这样的主要发行版的发展方向,而且我想不出BTRFS可以做的事,LVM / XFS至少不能很好地近似。
布拉奇利,2015年

我还要说的是BTRFS会很好,但是LVM可以做很多事情BTRFS只是做不到(到目前为止)。例如,您可以执行混合卷和精简配置快照,而BTRFS则不能执行(AFAIK)。
布拉奇利

9
“据我所知,Linux上的ZFS仍基于FUSE”,这已经有五年多了,这是不正确的。ZoL是一个内核模块,可以全面投入生产。我一直在使用它广泛自从2010年初
吉姆·索尔特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.