私はこれに従ってLUKSクリプトのサイズを変更しようとしていました https://wiki.archlinux.org/index.php/Resizing_LVM-on-LUKS そして私はパーティションのサイズ変更に行き着きました。新しいサイズとして870
と入力し、最後にGを付けるのを忘れました。パーティションが870M
に縮小され、すぐに870G
にサイズ変更されましたが、それまでに損傷が発生しました。幸いなことに、LUKS暗号を復号化することはできましたが、論理ボリュームにシステム上にデバイスファイルを持たせることさえできませんでした。 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
]
}
}
}
}
非常に幸運で、以前のサイズ変更によるLVの断片化がまったくない場合を除いて、サイズを元のサイズに戻してLVMを修正することはできません。新しいLVには元のファイルシステムの最初の20G
程度が含まれる可能性がありますが、残りの780G
(またはその他)はスクランブルエッグ(データの誤り、オフセットの誤り、順序の誤り)です。
そして、それはあなたがHDDメディアを使用していることを前提としています。 SSDの場合、issue_discards=1
にlvm.conf
が含まれていると、データが失われるだけなので、このオプションを使用することはありません。
メタデータの古いバージョンについては、/etc/lvm/{archive,backup}/
を確認する必要があります。そこにある各ファイルは、いつ作成されたかを示しています。次に例を示します。
description = "Created *before* executing 'lvremove HDD/mdtest1'"
G
が欠落しているCreated before lvresize 850
と書かれているものを探しています。そして、そのバックアップを使用してvgcfgrestore
LVMメタデータを作成すると、正常に機能するようになります。
/etc/lvm
にそのようなファイルがない場合、このデータを失ったLive CDからこれを行ったか、ルートLVに損傷が発生したため、状況は少し複雑になります。ディスク上のLVMメタデータは、循環バッファーにこのビットの履歴を含みます。
そこに何があるかを確認するための大まかな方法:
dd if=/dev/pvdevice bs=1M count=1 | strings -w -n 16
古いext4を吹き飛ばしていなければ、fsck
がいくつかの修復を行い、いくつかの無傷のディレクトリ構造を見つけるという希望があったかもしれません。
mkfs
を台無しにしないディスクの一部にあった代替のスーパーブロックを使用することにより、実際にはまだその希望があるかもしれません。または、古いFSのバックアップスーパーブロックの数が現在の空のFSと異なる場合は、上書きされなかったものがある可能性があります。
e2fsck -b some-offset
これは、LVが古いバイト(Frostschultzが彼の回答で説明したもの)と同じバイトにマップされている場合にのみ適用されます。
バイナリストリームから選択できるいくつかの種類のファイルを回復できます。 (ファイル名をバイト範囲にマッピングするメタデータがないため。)一部のファイルには認識可能なヘッダーがあり、ファイルの終わりがどこにあるかを知ることができます。ファイルが断片化されている限り、名前のないファイルを回復する可能性があります。
Foremost はこれを行うためのツールです。 jpg、gif、png、bmp、avi、exe、mpg、wav、riff、wmv、mov、pdf、ole、doc、Zip、rar、htm、およびcppファイルを検索すると主張しています。