设置:DELL PowerEdge R520,oVirt Node 4.4.1 x86_64
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 onn_ovirt01 lvm2 a-- 105.26g 20.77g
/dev/sda3 VG_he_nfs lvm2 a-- <100.00g <10.00g
/dev/sda4 VG_data_nfs lvm2 a-- <1.50t <206.00g
# lsblk
...
sdb 8:16 0 1.4T 0 disk
└─sdb1 8:17 0 1.4T 0 part /exports/nfs/backups
问题:系统重新启动时,与 sata-to-usb 连接的 1.4T 备份驱动器变为 sda,其中 lvm 找不到物理卷所需的分区。然后系统启动到救援模式,我必须通过连接的显示器/键盘登录,卸载并弹出 sata-to-usb 驱动器,将其条目从 fstab 中注释掉,拔下它,然后重新启动系统。然后,一旦使用正确的设备作为 sda 正确启动,我必须撤消在救援模式下对 sata-to-usb 设备所做的所有操作。
所有内容都是 fstab,已定义为通过 UUID 或 /dev/mapper/ 挂载。
问题:是否可以更改 LVM 配置,以便无论哪个设备成为 sda,它都能获得适合系统的正确物理卷?是否可以不重新创建和迁移就实现(我的系统数据在带有热备用的 RAID 1(镜像)上,因此机箱中没有更多空间用于更换驱动器布置)?我愿意接受任何不需要删除数据或创建新 RAID 布置进行替换的解决方案。如果这不可能,那么我真的愿意接受任何事情 - 或者每次意外重启时都会继续在救援模式下进行整理。
答案1
LVM 不存储设备路径。组件 UUID 存储在 LVM 超级块中,这些 UUID 专门用于识别组件(PV、VG、LV)。LVM 仅扫描所有可用的块设备(允许扫描哪些设备在 /etc/lvm/lvm.conf 中配置),检测物理卷并从中组装卷组。它只是不查看物理卷此时的类型/设备路径。它对设备重新索引等非常可靠。因此,如果您将卷移动到 /dev/cciss/cXdYpZ(旧的 HP/Compaq SmartArray 块驱动程序创建此类设备)或 /dev/hdXY 或 /dev/sdXY 或 /dev/mapper/...(任何基于 DM 构建的东西都会将设备节点放在那里 — 加密、多路径等)、/dev/md/...(Linux MD RAID)等,它就会找到您的数据。您的担心是错误的,您的问题出在其他地方。
导致您出现问题的原因可能是 USB 速度太慢。它的延迟很大;而且外部硬盘启动速度非常慢(这样做是为了限制启动期间的功耗峰值)。USB 不关心性能,而是关心在缺乏经验的用户手中的稳定性。因此,它的初始化速度很慢。您需要配置您的 init 脚本(可能是 initramfs init 脚本)以允许较大的延迟/超时,以便 USB 设备有足够的时间启动和稳定。
另一个典型原因是引导加载程序配置不正确;例如,它可能期望在“第一个硬盘的第一个分区”上找到其数据,并且如果“第一个硬盘”恰好是错误的设备,则它没有配置和内核映像来引导,并将您抛入引导加载程序救援 shell。内核的命令行或放入 initramfs 的东西可能与某个具体的设备路径绑定,因此设备交换会导致它无法找到 / 并让你陷入初始化内存文件系统救援外壳。注意这些是不同的救援外壳,以及对哪一个你看这很重要吗?
带备用设备的 RAID0 是矛盾的。RAID0 没有冗余,没有定义的降级状态,没有任何东西可以将阵列从设备故障中恢复到最佳状态,因此备用设备不可能帮助它。任何组件设备问题通常都会导致整个阵列直接进入故障状态。任何其他 RAID 级别都有冗余,如果发生组件故障,它将首先转换为降级状态,因此它将受益于备用设备,但 RAID0 则不然。
答案2
我解决了这个问题。我所要做的就是将 sdb 分区添加到过滤器中/etc/lvm/lvm.conf
:
曾是:
filter = ["a|^/dev/sda2$|", "a|^/dev/sda3$|", "a|^/dev/sda4$|", "r|.*|"]
变成:
filter = ["a|^/dev/sda2$|", "a|^/dev/sda3$|", "a|^/dev/sda4$|", "a|^/dev/sdb2$|", "a|^/dev/sdb3$|", "a|^/dev/sdb4$|", "r|.*|"]
其他人尝试此操作时,请确保验证更改并使用以下方法重新生成缓存vgscan
我的第一次尝试(忘记了|
之后的$
):
[root@host lvm]# vgscan
Invalid separator at end of regex.
Invalid filter pattern "a|^/dev/sdb2$".
Failed to create regex device filter
我的第二次尝试:
[root@host lvm]# vgscan
Found volume group "VG_data_nfs" using metadata type lvm2
Found volume group "VG_he_nfs" using metadata type lvm2
Found volume group "onn_ovirt01" using metadata type lvm2
SATA 转 USB 驱动器仍显示为 sda,但这并不重要 - 当 sda 上未找到任何内容时,LVM 会跳至 sdb 分区。我确实必须手动安装 SATA 转 USB 驱动器,但由于它安装/etc/fstab
正确,我只需要发出mount -a
。我必须稍后解决这个问题,并暂时获胜。