LVM 文件系統恢復
我試圖在此https://wiki.archlinux.org/index.php/Resizing_LVM-on-LUKS之後調整我的 LUKS crypt的大小,然後我用 parted 和嚴重搞砸了事情來調整分區大小。我輸入
870
了新的尺寸,忘了在最後加一個 G。它把我的分區縮小到870M
我立即調整它的大小,870G
但到那時損壞已經完成。幸運的是,我仍然可以解密 LUKS crypt,但我的邏輯卷甚至無法在系統上擁有設備文件。LVM 將捲辨識為存在並顯示它附加到的設備文件,但該文件不存在並且顯示它沒有文件系統。我做到了vgscan --mknodes
,它成功生成了設備文件,但是testdisk
仍然不會顯示它。我重新創建了卷並在其上放置了一個新的 ext4 文件系統,現在testdisk
將顯示驅動器,但掃描沒有產生任何結果。我得到一大堆 ext4 條目,但它們要麼都說不能打開文件系統要麼找不到文件。無論如何我可以恢復磁碟上的文件系統嗎?我不想向它寫入任何數據,直到我從中得到什麼,除非那是不可能的。編輯:在探索了我需要幫助的真實事情之後,我需要從以前的 ext4 文件系統中恢復文件。我的驅動器上有一個 ext4 系統,該系統已被新系統覆蓋,但舊系統中的所有數據仍然存在,如
sudo dd if=/dev/Storage/Storage bs=1M | strings -fn 16
. 搞砸後我唯一做的就是安裝了一個新的 ext4 FS,沒有別的,所以我的大部分數據可能仍然完好無損。我需要恢復那些數據。
pvdisplay
顯示以下--- Physical volume --- PV Name /dev/mapper/Storage VG Name Storage PV Size 931.51 GiB / not usable 3.68 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 238466 Free PE 0 Allocated PE 238466 PV UUID CAueGx-Glzx-zCd0-H00m-R8d5-KTRc-9Ff7ay --- Physical volume --- PV Name /dev/mapper/sda3_crypt VG Name mint-vg PV Size 118.50 GiB / not usable 0 Allocatable yes PE Size 4.00 MiB Total PE 30336 Free PE 10 Allocated PE 30326 PV UUID UJJfu8-S2Ac-pEZl-PlPa-uUzJ-axEs-ckbDWG
我的備份顯示
# Generated by LVM2 version 2.02.98(2) (2012-10-15): Thu Aug 13 20:45:52 2015 contents = "Text Format Volume Group" version = 1 description = "Created *before* executing '/sbin/lvreduce --config log{command_names=0} -f -l 217600 /dev/Storage/Storage'" creation_host = "desktop" # Linux desktop 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 creation_time = 1439523952 # Thu Aug 13 20:45:52 2015 Storage { id = "lM3S9T-inH1-mKsq-5doN-H8hT-zO3F-LF9jDx" seqno = 2 format = "lvm2" # informational status = ["RESIZEABLE", "READ", "WRITE"] flags = [] extent_size = 8192 # 4 Megabytes max_lv = 256 max_pv = 256 metadata_copies = 0 physical_volumes { pv0 { id = "nH1Axo-5nBo-WcyA-Xc4E-KwRt-K0Ib-ScK8Ch" device = "/dev/mapper/Storage" # Hint only status = ["ALLOCATABLE"] flags = [] dev_size = 1953520999 # 931.511 Gigabytes pe_start = 2048 pe_count = 238466 # 931.508 Gigabytes } } logical_volumes { Storage { id = "Qb01kz-y1RG-PVQp-cGjB-sj77-xgnJ-w9kn3n" status = ["READ", "WRITE", "VISIBLE"] flags = [] creation_host = "desktop" creation_time = 1436247513 # 2015-07-06 22:38:33 -0700 segment_count = 1 segment1 { start_extent = 0 extent_count = 238466 # 931.508 Gigabytes type = "striped" stripe_count = 1 # linear stripes = [ "pv0", 0 ] } } } }
您無法通過將大小恢復到原始大小來修復 LVM,除非您非常幸運並且 LV 由於之前的大小調整而沒有任何碎片。新的 LV 可能會擁有
20G
您原始文件系統的第一個左右,但剩餘的780G
(或其他)是炒雞蛋(錯誤的數據、錯誤的偏移量、錯誤的順序)。這是假設您使用的是 HDD 媒體。如果它是 SSD,
issue_discards=1
在你的lvm.conf
中,數據就會消失,這就是我從不使用這個選項的原因。您必須檢查
/etc/lvm/{archive,backup}/
元數據的舊版本。那裡的每個文件都說明了它的創建時間,例如:description = "Created *before* executing 'lvremove HDD/mdtest1'"
你正在尋找那個說失踪
Created before lvresize 850
的人。G
然後vgcfgrestore
使用該備份的 LVM 元數據,希望它能夠恢復正常工作。如果您在 中沒有此類文件
/etc/lvm
,或者是因為您從失去此數據的 Live CD 執行此操作,或者您的根 LV 上發生損壞,事情會變得更加複雜,因為您必須希望磁碟上的 LVM 元數據能夠在其循環緩衝區中包含這段歷史。粗略的方法來看看那裡可能有什麼:
dd if=/dev/pvdevice bs=1M count=1 | strings -w -n 16