LVM-Volume mit beschädigtem MBR: Wie kann ich es mounten und Daten davon wiederherstellen?

LVM-Volume mit beschädigtem MBR: Wie kann ich es mounten und Daten davon wiederherstellen?

Ich habe keine Erfahrung mit LVM und Partitionierung im Allgemeinen und befinde mich daher in einer schwierigen Situation.

Die Situation:

Ich habe versehentlich den MBR einer mit Fedora 16 erstellten LVM-Festplatte überschrieben.

Jetzt ist alles andere auf dieser Platte intakt; nur der MBR ist beschädigt (und auch das nur die ersten 446 seiner 512 Bytes). Ich hatte den MBR beschädigt, als ich versehentlich Folgendes ausgab:

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

Diese Platte (mit beschädigtem MBR), die ursprünglich/dev/sdain System A, ist jetzt in meinem aktuellen System, System B, als sekundäre Festplatte eingesteckt,/dev/sdb, zum Zweck der Dateisystem-/Datenwiederherstellung. Es kann derzeit in System B nicht eingehängt werden.

Hier ist die fdisk -lAusgabe auf System 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

Frage:Mit/dev/sdaWenn ich ein fehlerfreies, nicht-LVM-Setup von Fedora 16 ausführe, wie mounte ich es manuell?/Entwickler/sdb(mit beschädigtem MBR) irgendwo in System B, um alle Daten daraus wiederherstellen zu können? (Die Daten sind darin übrigens auf einem ext4-Dateisystem gespeichert.)

Was ich bisher versucht habe:

a) Ich habe pvsFolgendes ausgegeben und erhalten:

(Beachten Sie, dass die VG-Spalte leer ist!)

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

b) Ich habe pvscanFolgendes ausgegeben:

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

c) Ich habe den Inhalt von /etc/lvm/backup/vg_XYZaus einem früheren Backup zur Verfügung. Aber ich weiß nicht, wie ich aus dieser Datei den Volumenamen und die Volumepfade ableiten/konstruieren kann (Beachten Sie, dass in dieser Datei/dev/sda2ist die Aufteilung der Interessen, die jetzt/dev/sdb2im gegenwärtigen System, System 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
                                ]
                        }
                }
        }
}

Ich wäre Ihnen für Ihre schnelle Hilfe sehr dankbar, sonst stecke ich in echten Schwierigkeiten!

Vielen Dank im Voraus...

/HS

Antwort1

Versuchen Sie die folgenden Schritte der Reihe nach.


BEARBEITEN (von Harry)

  1. vgcfgrestoreDamit die restlichen unten aufgeführten Befehle (beginnend mit vgscan) wirksam werden, musste ein ausgeführt werden .

    vgcfgrestore vg_XYZ

  2. Außerdem musste ein e2fsck -y /dev/vg_XYZ/lv_rootfür die erfolgreiche Montage vorhanden sein.

Details werden in diesem Beitrag von comp.os.linux.setup beschrieben.Hier.


Da Sie bereits a durchgeführt haben pvscan, fahren Sie mit a fort vgscan:

vgscan --partial --mknodes --verbose

Mit etwas Glück sollte dadurch die Datenträgergruppe vg_XYZauf erkannt /dev/sdb2und alle erforderlichen Geräteknoten in erstellt werden /dev.

Machen Sie als Nächstes die Datenträgergruppe verfügbar:

vgchange -a y vg_XYZ

Fügen Sie anschließend Folgendes ein lvscan:

lvscan --verbose

Und schließlich machen Sie das logische Volume verfügbar:

lvchange -a y vg_XYZ/lv_root

Sie sollten nun in der Lage sein, irgendwo einzuhängen, lv_rootum auf die Daten zuzugreifen, z. B.

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

Viel Glück!

Antwort2

DieTeiltMagieLiveCD/USB verfügt über alle möglichen Tools, mit denen sich der MBR dieser Festplatte möglicherweise wiederherstellen lässt.testdiskist ein, und ich weiß, dass es noch andere gibt. Es hat mir schon ein paar Mal die Haut vor falsch eingegebenen Befehlen gerettet, es hat nicht ohne Grund ddden Spitznamen disk destroyer.

Antwort3

Möglicherweise können Sie das Gerät manuell mithilfe der Nummern aus der Sicherungsdatei erstellen.

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

Die Zahlen werden wie folgt berechnet:

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

Dies ist NICHT GETESTET. Wenn das Backup kein genaues Bild der aktuellen Konfiguration liefert (oder wenn meine Berechnungen falsch sind – ich habe sie analog zur lokalen Konfiguration reproduziert und nicht mit ausreichendem Verständnis von LVM), dann wird es nicht funktionieren.

verwandte Informationen