Comment récupérer un volume logique supprimé avec lvremove


12

Je suis sur CentOS 5.5 et j'utilise Xen. J'ai un grand groupe de volumes sur lequel je crée des volumes logiques en utilisant lvcreate. Aujourd'hui, un client a annulé son compte, puis a changé d'avis environ une heure plus tard. Malheureusement, j'avais déjà supprimé le LVM sur lequel résidait son image Xen. (en utilisant simplement un lvremove standard). Il n'y a eu aucune autre activité LVM sur ce disque depuis lors (rien d'autre n'a été ajouté ou supprimé). Est-il possible d'annuler un lvremove ou de récupérer un volume logique? Si oui, comment pourrais-je m'y prendre?

Réponses:


13

LVM sauvegarde ses métadonnées vers /etc/lvm/backupet /etc/lvm/archive. En haut de chaque fichier, il vous indiquera l'heure / les données lorsque le fichier a été généré, donc vous aurez probablement une copie des anciennes métadonnées telles qu'elles étaient avant de supprimer le LV. Je pense que la sauvegarde est automatique chaque fois que les métadonnées changent.

Les éléments suivants peuvent être dangereux et destructeurs, alors soyez très prudent et si possible, ayez une sauvegarde complète.

La commande pour restaurer ces sauvegardes de métadonnées de groupe de volumes est vgcfgrestore. Assurez-vous de faire une copie actuelle de la configuration de travail existante à l'aide de la vgcfgbackupcommande avec l'indicateur -f pour spécifier un fichier différent pour la sortie afin de ne pas modifier les fichiers qui se trouvent dans / etc / lvm / backup ou / etc / lvm / archive. Assurez-vous de différencier la configuration actuelle de la configuration que vous souhaitez restaurer pour vérifier que les seules modifications que vous êtes sur le point d'appliquer sont de recréer le LV récemment supprimé. Avoir une sauvegarde complète de vos données n'est probablement pas une mauvaise idée non plus. Vous pouvez également envisager de contacter votre fournisseur Linux pour obtenir de l'aide / des conseils si vous êtes sous contrat de support avant de continuer car je n'ai jamais eu à le faire moi-même.

Bonne chance.


1
En lisant plus profondément dans le vgcfgrestore, il semble que j'aurais besoin d'arrêter chaque machine virtuelle sur cette boîte avant d'essayer, ou risquer de corrompre l'ensemble de la baie. Il semble que vos instructions fonctionnent, alors j'accepte la réponse, mais les données ne valent pas le risque. Merci
John P

@John P Ouais, je pensais en quelque sorte avec les VM et tout ce que ce serait difficile à faire dans un environnement comme ça. Je suppose qu'une chose à retenir à ce sujet est qu'à l'avenir, la procédure de suppression d'un compte devrait impliquer une période de 30 jours sans suppression.
3dinfluence

18

"Pourriez-vous s'il vous plaît être plus précis pour trouver EFROM et ETO à partir du fichier de sauvegarde? Tous les lv ont un" start_extend "à partir de 0 dans mon fichier de sauvegarde, donc je suis un peu perdu :) Merci! - user186975 24 août 13 à 17 heures : 06 "

Ok, je serai très précis ... avec le moyen le plus simple de récupérer un volume logique.

Exemple:

1 - J'ai supprimé mon volume logique!

$ sudo lvremove /dev/vg1/debian.root

2 - La première chose à faire est de rechercher le fichier d'archive dans /etc/lvm/archive/vg1_(xxxxx).vg. Je peux le faire, en regardant simplement la date à laquelle j'ai supprimé le volume logique!

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

3- Je l'ai trouvé!

-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**

Date où j'ai fait le déménagement !!! ... c'était il y a quelques minutes ..

4 - Voyons le dossier!

$ 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 - Faites un test avant de le récupérer!

$ 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, maintenant répétez la ligne de commande, sans le (--test)

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

7 - Vérifiez-le!

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

8 - Si la logique n'était pas active, faites-le!

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

C'est tout

J'espère que cela peut aider d'autres personnes qui recherchent cette solution!


5

La chose la plus simple à récupérer à partir de lvremove (en supposant que vous n'ayez pas écrit dans la mesure où résidait le LV) est:

Il suffit de trouver la sauvegarde de vos métadonnées dans / etc / lvm / archive et de comprendre

a) dans quelle mesure le LV résidait-il (EFROM, ETO)
b) sur quels PV votre LV résidait et qui s'étend sur le PV qu'il utilisait (PFROM, PTO)

Après avoir obtenu ces informations, vous créez un nouveau LV de la même taille sur les mêmes extensions PV sans essuyer les 8 premiers Ko du LV:

lvcreate --extents EFROM-ETO --zero n --name customer007 YOUR-VG-NAME /dev/yourpv:PFROM-PTO

1
Pourriez-vous s'il vous plaît être plus précis pour trouver EFROM et ETO à partir du fichier de sauvegarde? Tous les lv ont un "start_extend" de 0 dans mon fichier de sauvegarde donc je suis un peu perdu :) Merci!

3

(Comme l'a répondu thermoman plus tôt), le moyen le plus simple de recréer un volume LVM supprimé est de le créer avec lvcreate sans réduction à zéro et de vous assurer qu'il sera dans la même position sur le disque. (La commande de la réponse de thermoman n'a pas fonctionné.)

Vérifiez la taille et la position du volume logique supprimé telles qu'elles étaient avant la suppression en lisant les fichiers dans / etc / lvm / archive. La taille du volume est extent_countde segment1(ou somme des segment*/extent_countvaleurs s'il avait plusieurs étendues). La position est dans la stripessection après l'alias de volume physique (par exemple pv0).

Par exemple, la section de volume pourrait ressembler à ceci:

    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
                            ]
                    }
            }
            ...
    }

La taille de ce examplevolume était de 1024 et il était situé sur / dev / somedisk à partir de l'étendue 30720.

Calculez la dernière étendue comme start + size -1 = 30720 + 1024 - 1 = 31743. Pour recréer ce problème de volume, procédez comme suit:

lvcreate --extents 1024 --zero n --name example vgname /dev/somedisk:30720-31743

Cette réponse vient de sauver ma nuit hier! J'ai eu un XenServer cassé qui supprimait le mauvais LV à cause d'une erreur API ...: o
Elektordi

2

J'avais une situation similaire. J'avais tous les PV contenant les LV souhaités, mais mon VG montrait des PV manquants et 0 LV. J'ai récupéré en faisant ce qui suit:

  1. Devenez root
  2. Exécutez pvspour collecter les UUID pour tous les lecteurs.
  3. Examinez les fichiers dans / etc / lvm / archive jusqu'à ce que j'en trouve un qui répertorie tous les mêmes UUID.
  4. Faites une copie de travail du fichier de configuration archivé et commencez à éditer.
  5. Dans la physical_volumessection, définissez les device =lignes pour qu'elles correspondent au périphérique / UUID actuel signalé par pvs, effacez tous les "MISSING"indicateurs et supprimez toutes les pvNsections qui manquaient réellement.
  6. Dans la logical_volumessection, supprimez toutes les listes qui avaient des rayures sur les pvNsections qui n'existaient plus.
  7. C'était ça, alors j'ai couru

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

  8. Lorsque cela a fonctionné, j'ai réexécuté sans l' --testoption.

J'ai atteint ma situation particulière en étendant le VG avec les PV sdg et sdh. Ensuite, j'ai créé un nouveau LV, en spécifiant /dev/sdg /dev/sdhsur la ligne de commande afin que je sache que le nouveau LV était sur ces disques. Ensuite, j'ai déplacé ces disques uniquement sur une nouvelle machine. L'ancienne machine était très contrariée par les disques manquants, et lorsque je les ai retirés de force, elle a également supprimé TOUS les LV. Bummer.

La prochaine fois, bien sûr, je vais créer un nouveau VG pour éviter ce problème.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.