设置如下:
- 70TB JBOD 作为 SAN 的一部分,分为 5 个 LUN(4x15TB 和 1x10TB)。
- 运行 Centos 7 的文件服务器通过 iSCSI 连接到 5 个 LUN,使用
iscsiadm
,跨越两个网络路径,总共 10 条路径。 - 用于
dm-multipath
将这些 iSCSI 路径聚合到单个设备中,即/dev/mapper/mpath*
。 pvcreate
使用上述设备构建物理卷dm-mutipath
。- 使用所有物理卷构建单个卷组。
- 构建多个逻辑卷以满足所需容量。
- 使用 将逻辑卷格式化为 XFS
mkfs.xfs
。
现在,SAN 出现了问题,需要进行维护(升级控制器固件),因此我重新启动了文件服务器,以确保 SAN 恢复在线时不会出现任何问题。
重启后,我能够重新连接到 SAN 并挂载文件系统。它们运行正常。
但是,重新启动文件服务器后,我注意到这些文件系统的 LVM 信息没有出现,即pvdisplay
,,vgdisplay
并且lvdisplay
仅报告文件服务器上的本地磁盘。
这些 VG 和 LV 确实出现在/dev
:
/dev/vg_${VG}
/dev/vg_${VG}/${LV1}_lv
/dev/vg_${VG}/${LV2}_lv
/dev/disk/by-id/dm-name-${VG}-${LV1}_lv
/dev/disk/by-id/dm-name-${VG}-${LV2}_lv
/dev/mapper/vg_${VG}-${LV1}_lv
/dev/mapper/vg_${VG}-${LV1}_lv
它们确实出现了,pvs -a
但是没有范围:
[root@file-server /]# pvs -a
PV VG Fmt Attr PSize PFree
/dev/centos/home --- 0 0
/dev/centos/root --- 0 0
/dev/centos/swap --- 0 0
/dev/mapper/mpatha --- 0 0
/dev/mapper/mpathb --- 0 0
/dev/mapper/mpathc --- 0 0
...
/dev/sda --- 0 0
/dev/sda1 --- 0 0
/dev/sda2 centos lvm2 a-- 273.80g 4.00m
/dev/sdb --- 0 0
/dev/sdc --- 0 0
/dev/sdd --- 0 0
/dev/sde --- 0 0
...
/dev/vg_${VG1}/${LV1}_lv --- 0 0
/dev/vg_${VG1}/${LV2}_lv --- 0 0
它们也出现在dmsetup info -c
:
[root@file-server /]# dmsetup info -c
Name Maj Min Stat Open Targ Event UUID
mpathe 253 6 L--w 1 1 1 mpath-27f3164e4727f3bc5
mpathd 253 5 L--w 1 1 1 mpath-2b3c12e7d9acc5f25
mpathc 253 4 L--w 1 1 1 mpath-232eb560378e8ec53
mpathb 253 7 L--w 1 1 1 mpath-218029135ad1e514a
mpatha 253 3 L--w 1 1 1 mpath-20123b6d74acce549
vg_${VG}-${LV1}_lv 253 16 L--w 1 1 0 LVM-6DoB20ypbwcGOoRHiX0t8wKAY3oC9BXtSGzQ1wy8fGa9okuQm1NxtPCHnmt0dtO6
vg_${VG}-${LV2}_lv 253 17 L--w 1 3 0 LVM-6DoB20ypbwcGOoRHiX0t8wKAY3oC9BXtmgFlfK9Bilo3IAWxjqwR7dUA8Oq0Fu70
mpathj 253 15 L--w 1 1 1 mpath-266772bd8af26c781
centos-home 253 2 L--w 1 1 0 LVM-GAWmujV5zkPn9byt74PY7byRJUWi8UmYSqsQjkt2uTDQ1q5Do38GXYynZhTiLhYw
mpathi 253 14 L--w 1 1 1 mpath-254a27729bfbfc8c6
mpathh 253 13 L--w 1 1 1 mpath-2a0ff1a2db7f22f00
mpathg 253 12 L--w 1 1 1 mpath-27a5ce08413f48f13
mpathf 253 11 L--w 1 1 1 mpath-2d19e7002c7a41667
centos-swap 253 1 L--w 2 1 0 LVM-GAWmujV5zkPn9byt74PY7byRJUWi8UmYtA03QjyV1IlWWk9Nz9cHJFKN16SJZ0T5
centos-root 253 0 L--w 1 1 0 LVM-GAWmujV5zkPn9byt74PY7byRJUWi8UmYCMmaP0envGMf3gk8JhcyoQIQPGmjrL6w
如何恢复 LVM 元数据? 只需vgcfgrestore
按照以下方法操作即可:
https://www.centos.org/docs/5/html/5.2/Cluster_Logical_Volume_Manager/mdatarecover.html
我似乎有一个备份/etc/lvm/backup
。
我不太愿意摆弄这个,因为万一我丢失了文件系统上的任何数据。恢复是可能的,但必须有系统停机和延迟。
编辑:来自pvs
、lvs
和vgs
以下的输出:
[root@dfile-server ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 273.80g 4.00m
[root@file-server ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home centos -wi-ao---- 46.57g
root centos -wi-ao---- 221.64g
swap centos -wi-ao---- 5.59g
[root@file-server ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- 273.80g 4.00m
答案1
正如评论中所诊断的,问题与 SAN 升级无关,而是lvmetad
守护进程返回了陈旧/错误的信息。
lvmetad
通过停止(systemctl stop lvmetad.service; systemctl stop lvmetad.socket
)并发出pvs
直接分析块设备并返回正确信息,可以确认这一点。
永久修复是lvmetad
通过通知缓存发生变化来更新缓存。这是通过运行pvscan --cache
、重新启用lvmetad
(systemctl start lvmetad.service; systemctl start lvmetad.socket
)并最终运行另一个来完成的pvscan --cache
。
此后,正常pvs
(带lvmetad
活动)返回正确数据。