Debian Lenny - SAN - LVM 失败

Debian Lenny - SAN - LVM 失败

我有一台 Lenny 服务器,该服务器已将 SAN 连接配置为名为“datavg”的 VG 的唯一 PV。

昨天,我用 Debian 补丁更新了该盒子并重新启动了它。

重启后,它没有启动,说找不到 /dev/mapper/datavg-datalv。

这是我所做的:
- 以救援模式启动并在 /etc/fstab 中注释挂载
- 重新启动到完整用户模式。(挂载点是 /data,只有 postgresql 无法启动)
- 执行 vgdisplay、lvdisplay、pvdisplay 来找出卷组发生了什么。(datavg 完全丢失)

之后,我注意到 LUN 在 Linux 上可见,并且 LVM 分区也可见:

# ls -la /dev/mapper/mpath0*
brw-rw---- 1 root disk 254, 6 2009-11-23 15:48 /dev/mapper/mpath0
brw-rw---- 1 root disk 254, 7 2009-11-23 15:48 /dev/mapper/mpath0-part1


- 然后,我尝试使用 pvscan 来查看它是否能找到 PV。不幸的是,它没有检测到该分区是 PV。-
我在分区上运行了 pvck,但没有找到任何标签:

# pvck /dev/mapper/mpath0-part1 
  Could not find LVM label on /dev/mapper/mpath0-part1


- 然后,我想知道 LUN 是否是空的,所以我对前几个 MB 进行了 dd。在这里,我可以看到 LVM 标头:

datavg {
id = "removed-hwEK-Pt9k-Kw4F7e"
seqno = 2
status = ["RESIZEABLE", "READ", "WRITE"]
extent_size = 8192
max_lv = 0
max_pv = 0

physical_volumes {

pv0 {
id = "removed-AfF1-2hHn-TslAdx"
device = "/dev/dm-7"

status = ["ALLOCATABLE"]
dev_size = 209712382
pe_start = 384
pe_count = 25599
}
}

logical_volumes {

datalv {
id = "removed-yUMd-RIHG-KWMP63"
status = ["READ", "WRITE", "VISIBLE"]
segment_count = 1

segment1 {
start_extent = 0
extent_count = 5120

type = "striped"
stripe_count = 1        # linear

stripes = [
"pv0", 0
]
}
}
}
}

请注意,这是由于 pvck 无法找到 LVM 标签的分区造成的!


- 我决定为该分区写入一个新的 LVM 标签并从备份文件中恢复参数。

pvcreate --uuid removed-AfF1-2hHn-TslAdx --restorefile /etc/lvm/backup/datavg  /dev/mapper/mpath0-part1


- 然后我运行了 vgcfgrestore -f /etc/lvm/backup/datavg datavg
- 之后,当我发出 pvscan 时,我出现了。
- 使用 vgchange -ay datavg,我激活了 VG,LV 也可用了。
- 当我尝试安装 LV 时,它没有找到任何文件系统。我尝试了几种恢复方法,但没有成功。
- 在对受影响的 LV 进行 DD 后,我尝试使用以下方法重新创建超级块:

mkfs.ext3 -S /dev/datavg/backupdatalv


- 但结果却无法安装:

# mount /dev/datavg/backupdatalv /mnt/
mount: Stale NFS file handle

首先,发生这种情况至少可以说不是很好,所以我想尽可能地了解这种故障。

我的问题:
- 补丁和重启后 LVM 标签怎么会消失?
- 挽救 PV 后为什么文件系统不存在?(pvcreate 命令是否破坏了数据?)
- LV 中的 ext3 文件系统还能挽救吗?
- 我能做些什么来防止这个问题的发生?

提前谢谢您,Ger。

答案1

我曾经遇到过类似的问题。在我们的案例中,有人创建了一个分区来保存 PV,但当他们运行 pvcreate 命令时,他们忘记指定分区,而是使用了整个设备。系统运行良好,直到重新启动,LVM 再也找不到 PV。

那么,就您而言,是否有可能有人在创建时运行了“pvcreate /dev/mapper/mpath0”而不是“pvcreate /dev/mapper/mpath0-part1”?如果是这样,您需要从包含 PV 的磁盘中删除分区表。

从 pvcreate(8) 手册页中删除分区表:

dd if=/dev/zero of=PhysicalVolume bs=512 count=1

如果设备上有分区表,内核中的 LVM 代码将无法识别整个设备 PV。一旦我们删除分区表,PV 就会被识别,我们就可以再次访问数据。

相关内容