原标题:Unwanted,意外的 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 的任何参与。我怎样才能做到这一点?
没有证据表明您在这里使用了 LVM,并且 dm-x 设备不一定,甚至通常是 LVM 映射。“dm”只是一个设备映射,并没有说明正在映射的设备。我的猜测是这些是对您的硬盘驱动器的引用。
您可以使用“blkid /dev/dm-X”来获取块设备的 UUID 并就其设备类型提供建议。如果这还不够,你可以使用 |blkid" 来获取 UUID 和实际的块设备——我相信还有其他方法可以做到这一点。
如果您想自己验证是否使用 LVM(而且您似乎不太可能 - 如果您假设您的 DM 设备是 LVM 设备,那么您的设置没有意义,因为 LVM 在大多数理智的设置中要么位于 raid 之上,要么替换 RAID - 他们不会为 RAID 提供块设备),您可以使用命令“pvdisplay”,它将显示已加入 RAID 的块设备。
多亏了评论和其他答案,我才知道没有发生真正的 LVM 活动,这个答案(以及其他答案)让我相信。
似乎很难接受这里有实际使用的 LVM,因为我对 LVM 知之甚少,我不认为这是你可能会不小心“滑入”的东西,而且从未使用过它,我缺乏知识在不进行明确研究的情况下进行设置。然而,尽管有这种感觉,“悖论”是我搜索到的关于 dm-X 设备的所有内容都一直指向 LVM。
在看到我了解的每个 LVM 信息命令的空输出 (
lvs
pvs
lvdisplay
pvdisplay
) 后,我将搜索重点放在设备映射器而不是 LVM 上。解决方案是使用 dmsetup 简单地删除设备映射
该阵列现在能够与实际设备组装,并且不再处于读/写模式。