MBR이 손상된 LVM 볼륨: 데이터를 마운트하고 복구하는 방법은 무엇입니까?

MBR이 손상된 LVM 볼륨: 데이터를 마운트하고 복구하는 방법은 무엇입니까?

저는 LVM과 일반적인 파티셔닝을 처음 접했기 때문에 이러한 상황에 처해 있습니다.

그 상황:

실수로 Fedora 16에서 생성된 LVM 디스크의 MBR을 덮어썼습니다.

이제 이 디스크의 다른 모든 내용은 그대로 유지됩니다. MBR만 손상되었습니다(또한 512바이트 중 처음 446바이트만 손상되었습니다). 실수로 다음을 실행하여 MBR을 손상시켰습니다.

$ dd if=/the/wrong/446-byte-file.txt of=/dev/sda

이 디스크(MBR이 손상됨)는 처음에/dev/sda시스템 A의 디스크는 이제 현재 시스템인 시스템 B에 보조 디스크로 연결됩니다./dev/sdb, 파일 시스템/데이터 복구를 위한 것입니다. 현재 시스템 B에서는 마운트 해제할 수 없습니다.

fdisk -l시스템 B의 출력은 다음과 같습니다 .

$ fdisk -l
Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x8e678e67

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   475813887   237905920   83  Linux
/dev/sda2       475813888   488396799     6291456   82  Linux swap / Solaris

Disk /dev/sdb: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders, total 156301488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048     1026047      512000   83  Linux
/dev/sdb2         1026048   156301311    77637632   8e  Linux LVM

질문:와 함께/dev/sdaFedora 16의 LVM이 아닌 정상적인 설정을 실행하는 경우 수동으로 마운트하는 방법은 무엇입니까?/dev/sdb(손상된 MBR 포함) 시스템 B 내부 어딘가에서 모든 데이터를 복구할 수 있습니까? (그런데 데이터는 내부의 ext4 파일 시스템에 저장됩니다.)

내가 지금까지 시도한 것 :

a) 나는 pvs이것을 발행하고 얻었습니다:

(VG 열이 어떻게 비어 있는지 확인하세요!)

$ pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb2       lvm2 a--  74.04g 74.04g

b) 내가 발행했고 pvscan, 이것을 얻었습니다:

$ pvscan
  PV /dev/sdb2                      lvm2 [74.04 GiB]
  Total: 1 [74.04 GiB] / in use: 0 [0   ] / in no VG: 1 [74.04 GiB]

/etc/lvm/backup/vg_XYZc) 이전 백업에서 사용할 수 있는 콘텐츠가 있습니다 . 하지만 이 파일에서 볼륨 이름과 볼륨 경로를 추론/구성하는 방법을 모르겠습니다. (이 파일에서는/dev/sda2지금은 관심 분할이 되었습니다./dev/sdb2현재 시스템에서는 시스템 B):

# Generated by LVM2 version 2.02.84(2) (2011-02-09): Tue Oct 25 22:10:55 2011

contents = "Text Format Volume Group"
version = 1

description = "Created *after* executing 'vgchange -a y --sysinit'"

creation_host = "XYZ"   # Linux XYZ 2.6.38.6-26.rc1.fc15.i686.PAE #1 SMP Mon May 9 20:36:50 UTC 2011 i686
creation_time = 1319560855      # Tue Oct 25 22:10:55 2011

vg_XYZ {
        id = "WN8593-xRnx-dn29-rcpb-tRAm-Bs5R-93DGWw"
        seqno = 3
        status = ["RESIZEABLE", "READ", "WRITE"]
        flags = []
        extent_size = 65536             # 32 Megabytes
        max_lv = 0
        max_pv = 0
        metadata_copies = 0

        physical_volumes {

                pv0 {
                        id = "voQHGq-9m5t-u39a-UBWP-1qKM-sS4M-t3EPYG"
                        device = "/dev/sda2"    # Hint only

                        status = ["ALLOCATABLE"]
                        flags = []
                        dev_size = 155275264    # 74.041 Gigabytes
                        pe_start = 2048
                        pe_count = 2369 # 74.0312 Gigabytes
                }
        }

        logical_volumes {

                lv_swap {
                        id = "Osi18q-409G-iG1s-Mdb2-00Lt-wtQV-WpF2mN"
                        status = ["READ", "WRITE", "VISIBLE"]
                        flags = []
                        segment_count = 1

                        segment1 {
                                start_extent = 0
                                extent_count = 126      # 3.9375 Gigabytes

                                type = "striped"
                                stripe_count = 1        # linear

                                stripes = [
                                        "pv0", 0
                                ]
                        }
                }

                lv_root {
                        id = "Wc8qdx-sYKi-qFeM-Bv48-YvZC-ClGU-VrYl4W"
                        status = ["READ", "WRITE", "VISIBLE"]
                        flags = []
                        segment_count = 1

                        segment1 {
                                start_extent = 0
                                extent_count = 2243     # 70.0938 Gigabytes

                                type = "striped"
                                stripe_count = 1        # linear

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

귀하의 신속한 도움에 크게 감사하겠습니다. 그렇지 않으면 정말 큰 문제가 생길 것입니다!

미리 감사드립니다...

/HS

답변1

다음 단계를 순서대로 시도해 보세요.


편집 (해리 작성)

  1. vgcfgrestore아래 나열된 나머지 명령(으로 시작 vgscan)을 적용하려면 a를 수행해야 했습니다 .

    vgcfgrestore vg_XYZ

  2. e2fsck -y /dev/vg_XYZ/lv_root또한 마운트가 성공하려면 필요했습니다 .

이 comp.os.linux.setup 게시물에 설명된 세부 정보여기.


이미 작업을 완료했으므로 pvscan다음 단계로 진행하세요 vgscan.

vgscan --partial --mknodes --verbose

vg_XYZ운이 좋으면 에서 볼륨 그룹을 검색 /dev/sdb2하고 에서 필요한 장치 노드를 생성해야 합니다 /dev.

다음으로 볼륨 그룹을 사용 가능하게 만듭니다.

vgchange -a y vg_XYZ

다음을 수행하십시오 lvscan.

lvscan --verbose

마지막으로 논리 볼륨을 사용 가능하게 만듭니다.

lvchange -a y vg_XYZ/lv_root

lv_root이제 데이터에 액세스하기 위해 어딘가에 마운트할 수 있어야 합니다 .

mkdir -p /mnt/rescue
mount -t ext4 -o ro /dev/vg_XYZ/lv_root /mnt/rescue

행운을 빌어요!

답변2

그만큼PartedMagicliveCD/USB에는 해당 디스크에서 MBR을 복구할 수 있는 모든 종류의 도구가 있습니다.testdisk하나이다, 그리고 다른 사람들도 있다는 것을 알고 있습니다. 잘못 입력된 명령으로 인해 내 스킨이 몇 번 저장되었는데, dd별명이 붙은 이유가 있습니다 disk destroyer.

답변3

백업 파일에 있는 번호를 사용하여 수동으로 장치를 생성할 수도 있습니다.

dmsetup create foo --table "0 146997248 linear /dev/sdb2 8259584"
mount -o ro /dev/mapper/foo /mnt

숫자는 다음과 같이 계산됩니다.

146997248 = extent_count * extent_size = 2243 * 65536
8259584 = pe_start + 126 * extent_size = 2048 + 126 * 65536

이것은 테스트되지 않았습니다. 백업이 현재 구성에 대한 정확한 그림을 제공하지 않는 경우(또는 계산이 잘못된 경우 - LVM에 대한 충분히 깊은 이해가 아닌 로컬 구성과 유사하게 재현한 경우) 작동하지 않습니다. .

관련 정보