Wie man ein mit lvremove gelöschtes logisches Volume wiederherstellt

12

Ich bin auf CentOS 5.5 und führe Xen aus. Ich habe eine große Datenträgergruppe, für die ich mithilfe von lvcreate logische Datenträger erstelle. Heute musste eine Kundin ihr Konto kündigen und dann etwa eine Stunde später ihre Meinung ändern. Leider hatte ich schon die LVM entfernt, auf der sich ihr Xen-Image befand. (nur mit einem Standard-Lvremove). Auf diesem Datenträger wurde seitdem keine andere LVM-Aktivität ausgeführt (nichts anderes wurde hinzugefügt oder gelöscht). Ist es möglich, ein Entfernen rückgängig zu machen oder ein logisches Volume wiederherzustellen? Wenn ja, wie würde ich vorgehen?

John P
quelle

Antworten:

13

LVM sichert seine Metadaten in /etc/lvm/backupund /etc/lvm/archive. Am Anfang jeder Datei wird die Uhrzeit bzw. die Daten angegeben, zu der die Datei erstellt wurde, sodass Sie wahrscheinlich über eine Kopie der älteren Metadaten verfügen, die vor dem Löschen der LV vorhanden waren. Ich glaube, die Sicherung erfolgt automatisch, sobald sich die Metadaten ändern.

Folgendes kann gefährlich und zerstörerisch sein , seien Sie also sehr vorsichtig und führen Sie nach Möglichkeit eine vollständige Sicherung durch.

Der Befehl zum Wiederherstellen dieser Volumegroup-Metadatensicherungen lautet vgcfgrestore. Stellen Sie sicher, dass Sie mit dem vgcfgbackupBefehl mit dem Flag -f eine aktuelle Kopie der vorhandenen Arbeitskonfiguration erstellen, um eine andere Datei für die Ausgabe anzugeben, damit Sie keine Dateien in / etc / lvm / backup oder / etc ändern / lvm / archive Ordner. Stellen Sie sicher, dass Sie die aktuelle Konfiguration mit der Konfiguration vergleichen, die Sie wiederherstellen möchten, um sicherzustellen, dass Sie nur die zuletzt gelöschte LV neu erstellen. Eine vollständige Sicherung Ihrer Daten ist wahrscheinlich auch keine schlechte Idee. Sie können sich auch an Ihren Linux-Anbieter wenden, um Unterstützung / Beratung zu erhalten, wenn Sie einen Supportvertrag haben, bevor Sie fortfahren, da ich dies nie selbst tun musste.

Viel Glück.

3deinfluss
quelle
1
Wenn ich mich näher mit dem vgcfgrestore befasse, muss ich anscheinend jede VM auf dieser Box herunterfahren, bevor ich dies versuche. Andernfalls besteht die Gefahr, dass das gesamte Array beschädigt wird. Es sieht so aus, als würden Ihre Anweisungen funktionieren, also akzeptiere ich die Antwort, aber die Daten sind das Risiko nicht wert. Danke
John P
@John P Ja, ich habe mit den VMs gerechnet und alles, was in einer solchen Umgebung schwierig ist. Ich vermute, man kann das damit aus der Welt schaffen, dass das Entfernen eines Kontos in Zukunft möglicherweise einen Zeitraum von 30 Tagen ohne Löschung beinhalten wird.
3 Einfluss
18

"Könnten Sie bitte genauer nach EFROM und ETO in der Backup-Datei suchen? Alle lv haben ein" start_extend "von 0 in meiner Backup-Datei, also bin ich ein bisschen verloren :) Danke! - user186975 Aug 24 '13 at 17 : 06 "

Ok, ich werde sehr spezifisch sein ... mit dem einfachsten Weg, ein logisches Volume wiederherzustellen.

Beispiel:

1 - Ich habe mein logisches Volume entfernt!

$ sudo lvremove /dev/vg1/debian.root

2 - Als erstes müssen Sie die Archivdatei unter /etc/lvm/archive/vg1_(xxxxx).vg suchen. Ich kann das tun, indem ich nur das Datum betrachte, an dem ich das logische Volume entfernt habe!

$ sudo ls -l /etc/lvm/archive |more

3- Ich habe es gefunden!

-rw------- 1 root root 16255 Mar 20 14:29 vg1_00223-235991429.vg
-rw------- 1 root root 16665 Mar 20 16:49 vg1_00224-748876387.vg
-rw------- 1 root root 17074 Mar 20 16:49 vg1_00225-931666169.vg
-rw------- 1 root root 17482 Mar 20 16:50 vg1_00226-1238302012.vg
-rw------- 1 root root 18081 **Mar 20 21:57 vg1_00227-2048533959.vg**

Datum an dem ich das lvremove gemacht habe !!! ... es war vor ein paar Minuten ..

4 - Schauen wir uns die Datei an!

$ sudo head /etc/lvm/archive/vg1_00227-2048533959.vg
*# Generated by LVM2 version 2.02.95(2) (2012-03-06): Thu Mar 20 21:57:58 2014
contents = "Text Format Volume Group"
version = 1
description = **"Created *before* executing 'lvremove /dev/vg1/debian.root'"**
creation_host = "server"    # Linux server 3.8.0-35-generic #50-Ubuntu SMP Tue Dec 3 01:24:59 UTC 2013 x86_64
creation_time = 1395363478  # Thu Mar 20 21:57:58 2014*

5 - Machen Sie einen Test, bevor Sie ihn wiederherstellen!

$ sudo vgcfgrestore vg1 --test -f /etc/lvm/archive/vg1_00227-2048533959.vg
Test mode: Metadata will NOT be updated and volumes will not be
(de)activated.   **Restored volume group vg1**

6 - Ok, jetzt wiederhole die Kommandozeile, ohne das (--test)

$ sudo vgcfgrestore vg1 -f /etc/lvm/archive/vg1_00227-2048533959.vg
**Restored volume group vg1**

7 - Überprüfen Sie es!

$ sudo lvscan |grep debian
ACTIVE            '/dev/vg1/debian.root' [7,81 GiB] inherit

8 - Wenn die Logik nicht aktiv war, tun Sie es!

$ sudo lvchange -a y /dev/vg1/debian.root 

Es ist alles

Ich hoffe das kann anderen helfen, die nach dieser Lösung suchen!

Rafael Cristaldo
quelle
5

Die einfachste Möglichkeit, sich von lvremove zu erholen (vorausgesetzt, Sie haben nicht in dem Umfang geschrieben, in dem sich die LV befand), ist:

Finden Sie einfach die Sicherung Ihrer Metadaten in / etc / lvm / archive und finden Sie es heraus

a) In welchem ​​Bereich befand sich die LV (EFROM, ETO)?
b) Auf welchen PVs befand sich Ihre LV und auf welchem ​​PV wurde sie verwendet (PFROM, PTO)?

Nachdem Sie diese Informationen erhalten haben, erstellen Sie einen neuen LV mit genau der gleichen Größe auf derselben PV- Erweiterung, ohne die ersten 8 KB zu löschen des LV zu :

lvcreate --extents EFROM-ETO --zero n --name customer007 YOUR-VG-NAME /dev/yourpv:PFROM-PTO
Thermoman
quelle
1
Könnten Sie bitte näher auf EFROM und ETO anhand der Sicherungsdatei eingehen? Alle lv haben ein "start_extend" von 0 in meiner Sicherungsdatei, also bin ich ein bisschen verloren :) Danke!
3

(Wie bereits von thermoman beantwortet) Der einfachste Weg, ein gelöschtes LVM-Volume wiederherzustellen, besteht darin, es mit lvcreate zu erstellen ohne Nullen und sicherzustellen, dass es sich an derselben Position auf der Festplatte befindet. (Der Befehl von Thermomans Antwort funktionierte nicht.)

Überprüfen Sie die Größe und Position des gelöschten logischen Datenträgers wie vor dem Löschen, indem Sie die Dateien in / etc / lvm / archive lesen. Die Größe des Volumens ist in extent_countden segment1(oder die Summe segment*/extent_countWerte , wenn es mehrere Ausdehnungen hat). Die Position befindet sich im stripesAbschnitt nach dem Alias ​​des physischen Volumes (z pv0. B. ).

Der Volumenabschnitt könnte beispielsweise so aussehen:

    physical_volumes {
            pv0 {
                    device = "/dev/somedisk" # Hint only
                    ...
            }
    }

    logical_volumes {
            ...
            example {
                    ...
                    segment_count = 1

                    segment1 {
                            start_extent = 0
                            extent_count = 1024     # 4 Gigabytes

                            type = "striped"
                            stripe_count = 1        # linear

                            stripes = [
                                    "pv0", 30720
                            ]
                    }
            }
            ...
    }

Die Größe dieses exampleVolumes betrug 1024 und es befand sich auf / dev / somedisk ab Extent 30720.

Berechnen Sie die letzte Ausdehnung als Start + Größe -1 = 30720 + 1024 - 1 = 31743. So erstellen Sie das Volume-Problem neu:

lvcreate --extents 1024 --zero n --name example vgname /dev/somedisk:30720-31743
Tuomas
quelle
Diese Antwort hat mir gestern die Nacht gerettet! Ich hatte einen defekten XenServer, der aufgrund eines API-Fehlers eine falsche LV löschte ...: o
Elektordi
2

Ich hatte eine ähnliche Situation. Ich hatte alle PVs, die die gewünschten LVs enthielten, aber meine VG zeigte fehlende PVs und 0 LVs. Ich habe mich wie folgt erholt:

  1. Werden Sie root
  2. Führen Sie pvsden Befehl aus, um UUIDs für alle Laufwerke zu erfassen.
  3. Überprüfen Sie die Dateien in / etc / lvm / archive, bis ich eine gefunden habe, in der alle UUIDs aufgeführt sind.
  4. Erstellen Sie eine Arbeitskopie der archivierten Konfigurationsdatei und beginnen Sie mit der Bearbeitung.
  5. Stellen Sie in dem physical_volumesAbschnitt die device =Zeilen so ein, dass sie mit den aktuellen Geräte- / UUIDs übereinstimmen, die von gemeldet werden pvs, löschen Sie alle "MISSING"Flags und entfernen Sie alle pvNAbschnitte, die tatsächlich fehlten.
  6. logical_volumesEntfernen Sie im Abschnitt alle Auflistungen mit Streifen in den pvNAbschnitten, die nicht mehr vorhanden sind.
  7. Das war es dann lief ich

    vgcfgrestore --test vg -f /root/dangerously_edited.vg

  8. Wenn das geklappt hat, bin ich ohne die --testOption erneut gelaufen .

Meine besondere Situation habe ich durch die Erweiterung der VG um PVs sdg und sdh erreicht. Dann habe ich eine neue LV erstellt und /dev/sdg /dev/sdhin der Befehlszeile angegeben, dass die neue LV auf diesen Laufwerken vorhanden ist. Dann habe ich nur diese Laufwerke auf eine neue Maschine verschoben. Die alte Maschine war sehr verärgert über die fehlenden Laufwerke, und als ich sie mit Gewalt entfernte, entfernte sie auch ALLE LVs. Schade.

Das nächste Mal werde ich natürlich eine neue VG erstellen, um dieses Problem zu vermeiden.

nördlich
quelle