在他对“混合袭击类型”问题的回答,HBruijn 建议使用 LVM 来实现 RAID,而不是更标准的 MDRAID。
经过一番调查,看来 LVM 也支持 RAID 功能。过去,我在 MDRAID 之上使用 LVM,直到现在才知道 LVM 也支持 RAID 功能。这似乎是一个相对较新的发展,但我还没有弄清楚它是什么时候实施的。
因此,这些是在 Linux 上实现软件 RAID 的替代方法。这两种不同方法的优缺点是什么?我正在寻找两种方法之间的功能比较,以便人们可以决定哪种方法更适合他们。基于实验的结论(例如,此功能的效果不如此功能,原因如下)也可以,前提是您在答案中包含您的数据。
需要解决的一些具体问题:
- 假设我想做sw RAID + LVM(常见场景)。我是否应该使用 LVM 对 sw RAID 的支持,从而使用一个实用程序而不是两个?这种更加集成的方法有什么优点吗?
- 与更成熟的 MDADM 相比,LVM 对 sw RAID 的支持是否存在明显缺陷?具体来说,LVM 对 sw RAID 的支持有多稳定/无错误?看来这种支持只能追溯到 2011 年(见下文),而 MDADM 则要老得多。另外,它在功能集方面如何比较?与 MDADM 相比,它是否存在明显的功能缺陷?相反,它是否支持 MDADM 不具备的任何 sw RAID 功能?
笔记:
详细讨论见 http://www.olearycomputers.com/ll/linux_mirrors.html但我找不到它写的日期。
关于Serverfault的类似问题:Linux LVM 镜像与 MD 镜像。然而,这个问题是在2010年提出的,答案可能已经过时了。
版本 2.02.87 - 2011 年 8 月 12 日的变更日志条目有
添加配置 --with-raid 以获得新的 segtype 'raid' 以支持 MD RAID 1/4/5/6
因此,LVM 中的 RAID 支持似乎已经有 3 年了。
答案1
LVM RAID 的成熟度和功能如何?
LVM-RAID实际上是mdraid的幕后黑手。它的工作原理基本上是为每个 RAID 设备创建两个逻辑卷(一个用于数据,称为“rimage”;一个用于元数据,称为“rmeta”)。然后它将它们传递给现有的 mdraid 驱动程序。所以处理磁盘读错误、I/O负载均衡等事情应该已经相当成熟了。
这是个好消息。
工具
您无法使用mdadm
它(至少不能以任何简单的方式使用),而且 LVM RAID 工具还远没有那么成熟。例如,在 Debian Wheezy 中,lvs
无法告诉您 RAID5 同步状态。我非常怀疑修复和恢复(尤其是在“这不应该发生!”的情况下)是否与 mdadm 一样好(我在测试中不小心遇到了其中一个,最后只是放弃了恢复它 - 使用mdadm 会很容易)。
特别是如果您没有使用所有工具的最新版本,情况会变得更糟。
缺少的功能
当前版本的 LVM-RAID 不支持收缩 ( lvreduce
) RAID 逻辑卷。它们也不支持更改磁盘数量或 RAID 级别(lvconvert
给出一条错误消息,表示尚不支持)。lvextend
确实有效,甚至可以提高 mdraid 最近才获得支持的 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
会解决这个问题;似乎vgchange
也lvchange
没有这个选项( lvchange 接受--force
,但它似乎没有做任何事情)。即使尝试dmsetup
直接将映射表提供给内核,我也不知道如何恢复它。
另外,mdadm
它是一个专门用于管理 RAID 的专用工具。 LVM 做了更多的事情,但感觉(我承认这是相当主观的)RAID 功能已经被塞进去了;它不太合适。
如何实际安装带有 LVM RAID 的系统?
以下是在 Debian Jessie 或 Wheezy 上安装它的简要概述。杰西要容易得多;请注意,如果您要在 Wheezy 上尝试此操作,请先阅读全文……
使用完整的 CD 映像进行安装,而不是 netinst 映像。
照常进行,进行磁盘分区,设置 LVM 物理卷。你能安装
/boot
LVM-RAID(在 Jessie 和 Wheezy 上,具体工作如下)。创建您的卷组。将其保留在 LVM 菜单中。
第一个有趣的地方是——安装程序没有
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
安装程序不知道如何创建 LVM-RAID LV,因此您必须使用命令行来执行此操作。请注意,我没有进行任何基准测试;下面的条带大小 (
-I
) 完全是我的虚拟机设置的猜测:lvcreate --type raid5 -i 4 -I 256 -L 10G -n root vg0
在 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
最后,切换回安装程序,然后点击 LVM 菜单中的“完成”。现在您将看到一个很多显示的逻辑卷数。那是安装人员不明白发生了什么;忽略带有
rimage
或rmeta
包含其名称的所有内容(请参阅上面第一段的方式以了解这些内容的解释)。继续正常创建文件系统、交换分区等。安装基本系统等,直到出现 grub 提示符。
在 Jessie 上,如果安装到 MBR(或者可能使用 EFI,但我还没有测试过),grub2 就可以工作。在 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
实际上,在我最近的 Jessie VM 上,grub 安装挂起了。切换到 F2 并执行
while kill $(pidof vgs); do sleep 0.25; done
,然后执行相同的 forlvs
,通过 grub-install 获得它。尽管如此,它似乎还是生成了一个有效的配置,但以防万一我做了一个chroot /target /bin/bash
,确保/proc
并/sys
安装了,然后做了一个update-grub
。到时候,就完成了。然后我选择dpkg-reconfigure grub-pc
在所有虚拟磁盘的 MBR 上安装 grub。在 Wheezy 上,执行上述操作后,选择“不使用引导加载程序继续”。
完成安装。它会启动。大概。
社区知识
有相当多的人了解它mdadm
,并且拥有丰富的部署经验。谷歌可能会回答您的大多数相关问题。通常,您可以在这里提出有关此问题的问题,可能会在一天之内得到答案。
LVM RAID 则不然。很难找到向导。我运行的大多数 Google 搜索都会找到有关使用 mdadm 数组作为 PV 的内容。老实说,这可能很大程度上是因为它较新且不太常用。某种程度上,反对这一点感觉不公平——但如果出现问题,围绕 mdadm 的现有社区规模更大,恢复我的数据的可能性更大。
结论
LVM-RAID 的发展相当迅速。在 Wheezy 上,它实际上并不可用(至少在不进行 LVM 和内核的向后移植的情况下)。早些时候,2014 年,在 Debian 测试中,感觉这是一个有趣但尚未完成的想法。当前的测试,基本上将成为 Jessie,感觉就像您可能实际使用的东西,如果您经常需要创建具有不同 RAID 配置的小片(这对于管理来说是一场噩梦mdadm
)。
如果您的需求可以通过一些大型 mdadm RAID 阵列(使用 LVM 划分为分区)来充分满足,我建议继续使用它。如果您最终不得不创建许多阵列(甚至是逻辑卷阵列),请考虑改用 LVM-RAID。但请保留良好的备份。
LVM RAID(甚至 mdadm RAID)的许多用途正在被集群存储/对象系统、ZFS 和 btrfs 等事物所取代。我建议也调查这些,它们可能会更好地满足您的需求。
谢谢你
我要感谢普苏西让我重新审视 LVM-RAID 的状态并更新这篇文章。
脚注
我怀疑您可以使用设备映射器以某种方式将元数据和数据粘合在一起
mdadm --assemble
。当然,您可以mdadm
在逻辑卷上运行就可以了……这样会更明智。在进行 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
我也不知道LVM可以做RAID。就我个人而言,我会坚持使用 mdadm,因为它是一个更成熟的软件,可以做同样的事情。如果 LVM RAID 出现问题,您可能无法获得与使用 mdadm 时一样多的支持。此外,我不相信 LVM RAID,因为 LVM 历来都被证明不是最强大的软件。
ZFS 和 BTRFS 代表着未来。它们带来的好处超出了块层所能实现的范围。除非我追求兼容性,否则我不会再使用 LVM/mdadm。ZFS 和 BTRFS 有很多功能,比如压缩、重复数据删除和写时复制,但我不会在这里深入讨论这些功能,因为这有点超出范围。
最后,进行研究并使用适合您的需要/想要的任何东西。