原标题:不想要的、意外的 LVM 磁盘映射导致 Linux raid 出现问题
我已经在 ubuntu 上进行了近十年的 Linux raid,但从未使用过 LVM,尽管我隐约知道它存在。
我最近在我的服务器上添加了第二个阵列,使其完全发挥作用,并将一些文件复制到其中(它只是一个备份系统,这里没有关键文件受到威胁)。
一周过去了,当我回头查看备份阵列时,我发现它是只读的。此外,阵列的 /proc/mdstat 中显示的设备不是 /dev/sdX(在我之前使用它时),而是 /dev/dm-X。
$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md1 : active (read-only) raid5 dm-0[0] dm-2[3] dm-1[1]
31249539072 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
bitmap: 0/117 pages [0KB], 65536KB chunk
md0 : active raid6 sdj1[6] sdm1[5] sde1[4] sdd1[3] sdc1[2] sdb1[1] sda1[0]
29296547840 blocks super 1.2 level 6, 512k chunk, algorithm 2 [7/7] [UUUUUUU]
bitmap: 0/44 pages [0KB], 65536KB chunk
unused devices: <none>
通过谷歌搜索我发现 dm-X 设备是 LVM 磁盘映射。dmsetup 显示它是我期望的磁盘
# dmsetup ls
osprober-linux-sdh1 (253:1)
osprober-linux-sdi1 (253:2)
osprober-linux-sdg1 (253:0)
# lvdisplay -a
# lvs
# pvs
#
我的理解是,LVM 是你必须非常明确地计划使用和设置的东西?据我所知,以上是我一生中运行的第一个与 LVM 相关的命令,所以我不明白它是如何启用的,特别是只对我的新 md 阵列中的 3 个设备启用(但我的其他阵列上或阵列外没有其他设备)。
为了进行设置,我使用 parted 手动对设备进行分区,使用 mdadm 手动创建 raid 阵列,将阵列格式化为 ext4,并将文件复制到其中,然后就让它留在那里。所有这些都不涉及 LVM,使用 mdadm 组装的设备是我刚刚创建的标准磁盘分区 (/dev/sdX1)。自那以后的一周里,我能想到的唯一对相关设备执行的操作是运行mdadm --assemble --scan
以动态查找 md 卷及其设备,并mount -a
重新挂载 fstab 条目。
也许我忘记做了其他事情,尽管这不可能是某些特定的 LVM 配置,因为我根本不知道该怎么做。我对 prometheus 和 node-exporter 做了一些实验,我想知道这是否是它的副作用?
它造成的问题是 LVM 锁定了实际的 /dev/sdX“文件”,所以我现在无法使用它们手动组装阵列
# mdadm --assemble /dev/md1 /dev/sdg1 /dev/sdh1 /dev/sdi1
mdadm: /dev/sdg1 is busy - skipping
mdadm: /dev/sdh1 is busy - skipping
mdadm: /dev/sdi1 is busy - skipping
我只能手动将它们组装到 dm-X 设备上
# mdadm --assemble /dev/md1 /dev/dm-0 /dev/dm-1 /dev/dm-2
mdadm: /dev/md1 has been started with 3 drives.
或自动组装
# mdadm --assemble --scan
mdadm: /dev/md/1 has been started with 3 drives.
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md1 : active (read-only) raid5 dm-0[0] dm-2[3] dm-1[1]
31249539072 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
bitmap: 0/117 pages [0KB], 65536KB chunk
无论出于什么原因,dm-X 设备(实际上或正式)都是只读的,因此从它们安装的阵列也是只读的。
我不太明白我在看什么,也不太明白它是怎么变成这样的,我不确定如何在这里表述结论性的问题,但我想以读/写模式挂载我的阵列,并像往常一样执行此操作,而无需 LVM 的任何参与。我该怎么做?
答案1
没有证据表明你在这里使用 LVM,并且 dm-x 设备不是不一定,甚至通常为 LVM 映射。“dm”只是设备映射,并未说明正在映射的设备。我猜这些是指您的硬盘。
您可以使用“blkid /dev/dm-X”获取块设备的 UUID 以及设备类型的建议。如果这还不够,您可以单独使用 |blkid" 来获取 UUID 和实际的块设备 - 我相信还有其他方法可以做到这一点。
如果您想亲自验证是否正在使用 LVM(而且这似乎不太可能 - 如果您假设您的 DM 设备是 LVM 设备,那么您的设置就没有意义,因为 LVM 在大多数合理设置中要么位于 raid 之上,要么替换 RAID - 它们不会为 RAID 提供块设备),您可以使用命令“pvdisplay”,它将显示已被纳入 RAID 的块设备。
答案2
感谢评论和其他答案,我明确地知道没有发生真正的 LVM 活动,这这个答案(以及其他人)让我相信。
似乎很难相信这里真的使用了 LVM,因为我对 LVM 了解甚少,所以我认为它不是那种可以不小心“误入”的东西,而且我从未使用过它,因此在没有进行明确研究的情况下,我缺乏设置它的知识。然而,尽管有这种感觉,但“矛盾”在于,我搜索到的有关 dm-X 设备的所有内容都指向 LVM。
在看到我所了解的每个 LVM 信息命令的空输出后(lvs
pvs
lvdisplay
pvdisplay
),我将搜索重点放在设备映射器而不是 LVM 上。
解决方案是使用 dmsetup 简单地删除设备映射
# dmsetup remove /dev/dm-0
# dmsetup remove /dev/dm-1
# dmsetup remove /dev/dm-2
# ls /dev
ls: cannot access '/dev/dm*': No such file or directory
# mdadm --assemble /dev/md1 /dev/sdg1 /dev/sdh1 /dev/sdi1
mdadm: /dev/md1 has been started with 3 drives.
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md1 : active raid5 sdg1[0] sdi1[3] sdh1[1]
31249539072 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
bitmap: 0/117 pages [0KB], 65536KB chunk
该阵列现在可以与实际设备组装,并且不再处于读/写模式。