雲計算

LVM重啟後找不到文件分區

原因

創建好LVM後,將LVM當做一個設備,又新建了一個分區,將LVM上的分區格式化後使用。
在重啟後系統只能找到LVM找不到LVM上的分區。

解決方案

使用testdisk 來找回分區。

testdisk /dev/mapper/data-data`

找到保存分區後,執行partprobe 來掃描分區(重啟就會又不見了)

partprobe /dev/mapper/data-data

建議

後續使用磁盤直接分區,不使用邏輯卷,在雲服務器上單磁盤使用LVM 無任何優勢,而且管理也麻煩。
LVM丟失的恢復

起因

LVM 上分區data-data1 重啟後消失,在找回分區時應該使用testdisk /dev/mapper/data-data
但是誤操作testdisk /dev/vdb , 而且掃描到了一個分區(可以看到磁盤上數據),並將分區/dev/vdb1 ❶信息寫入磁盤。操作完成後發現有誤,使用
testdisk /dev/mapper/data-data
來找回data-data1 測試並掛載到/mnt 下可以看到數據。為了驗證問題 重啟ECS,結果發現 /dev/mapper/data-data 和/dev/mapper/data-data1 都消失了。

思考

機器內原本沒有vdb1只有vdb ,將vdb 製成pv,而掃描vdb 發現的分區實際上是 data-data1
將data-data1 分區寫入到vdb 後多了vdb1,這導致重啟後LVM 找不到vdb ,從而報錯。
而由於vdb 上文件系統也不是直接在vdb 上創建的,所以vdb1 也不能掛載(superblock 錯誤)
如果執行fsck vdb1 ,也許可以解決這個問題❷

解決

LVM創建成功後,都會在/etc/lvm/backup 下備份配置信息
在這個case中 備份名為/etc/lvm/backup/data
less /etc/lvm/backup/data #查看pv0 的配置

image.png
記錄下pv0 的 id
執行下面命令恢復

pvcreate /dev/sdb -u qdJSB3-pjMo-KI5z-PzkU-zmHb-Gyol-2Tc60v --restorefile /etc/lvm/backup/data

-u 後面的“qdJSB3-pjMo-KI5z-PzkU-zmHb-Gyol-2Tc60v”是pv0 id
執行這個命令後報錯:
Device /dev/vdb excluded by a filter.
翻閱相關的文檔,都是說是已經有了分區表導致無法識別或者lvm.conf 中設置了filter 導致的。
但是翻看配置文件,發現並未啟用global filter ,判斷是我操作出錯多了vdb1導致的,使用fidisk 刪除vdb1
重新執行pvcreate
然後恢復vg 、激活vg

vgcfgrestore data
vgchange -ay data-data

激活後
/dev/mapper/data-data 回來了,但是缺少分區 data-data1
使用testdisk 找回分區

testdisk  /dev/mapper/data-data
fsck -y /dev/mapper/data-data1   #前面寫入vdb1 導致分區有錯誤需要fsck

❶ vdb上找到的分區是vdb 上的lvm 的分區,直接寫入分區到vdb 是錯誤的,分區仍然無法識別
❷ fsck /dev/vdb1 也許能解決這個vdb1 不能使用的問題但是未做測試。

Leave a Reply

Your email address will not be published. Required fields are marked *