Debian

Debian Lenny - SAN - LVM 失敗

  • January 23, 2010

我有一個 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 文件系統是否仍然可以挽救?

  • 我可以做些什麼來防止這個問題嗎?

在此先感謝,格。

我曾經遇到過類似的問題。在我們的例子中,有人創建了一個分區來保存 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 就被辨識出來了,我們可以再次訪問我們的數據。

引用自:https://serverfault.com/questions/87710