LVM: Monter un Logical Volume issu d’une restauration

LVM: Monter un Logical Volume issu d’une restauration

Alors aujourd’hui, nous allons voir comment monter un Logical Volume issu d’une restauration de données.

En somme, nous avons une VM que nous avons restauré, et nous avons besoin de monter sur la VM d’origine, le VMDK restauré.

Sauf que, notre VMDK contient un volume LVM, avec le même UUID. Et pour couronner le tout, la partition est en XFS avec elle aussi un problème d’UUID dupliqué…

Les préparatifs

Alors nous allons partir du principe que le VMDK (ou le VHDX, bien sûr) a été restauré et qu’il est monté sur le système. Nous avons donc :

/dev/sda1 : Boot
/dev/sda2, /dev/sda3, /dev/sda4 : partitions LVM

/dev/sdb1 : Boot (restauré)
/dev/sdb2, /dev/sdb3, /dev/sdb4 : partitions LVM (restaurées)

Tentative de montage

Alors, on lance un petit pvscan pour se faire peur :

[root@guylux ~]# pvscan
  WARNING: PV lz0vGQ-2G8O-qJF2-0y4v-oTN1-3zZu-n3iGKb on /dev/sdb2 was already found on /dev/sda2.
  WARNING: Disabling lvmetad cache which does not support duplicate PVs.
  WARNING: PV iKZKNN-AQ50-4vqk-kZVo-Zyu7-CArv-lJu67t on /dev/sdb3 was already found on /dev/sda3.
  WARNING: PV cOQN0n-A12t-6NrC-8l3p-gIvt-rSLC-LspbSl on /dev/sdb4 was already found on /dev/sda4.
  WARNING: Not using lvmetad because duplicate PVs were found.
  WARNING: PV lz0vGQ-2G8O-qJF2-0y4v-oTN1-3zZu-n3iGKb on /dev/sdb2 was already found on /dev/sda2.
  WARNING: PV iKZKNN-AQ50-4vqk-kZVo-Zyu7-CArv-lJu67t on /dev/sdb3 was already found on /dev/sda3.
  WARNING: PV cOQN0n-A12t-6NrC-8l3p-gIvt-rSLC-LspbSl on /dev/sdb4 was already found on /dev/sda4.
  WARNING: PV lz0vGQ-2G8O-qJF2-0y4v-oTN1-3zZu-n3iGKb prefers device /dev/sda2 because device is used by LV.
  WARNING: PV iKZKNN-AQ50-4vqk-kZVo-Zyu7-CArv-lJu67t prefers device /dev/sda3 because device is used by LV.
  WARNING: PV cOQN0n-A12t-6NrC-8l3p-gIvt-rSLC-LspbSl prefers device /dev/sda4 because device is used by LV.
  PV /dev/sda2   VG centos          lvm2 [<49,00 GiB / 0    free]
  PV /dev/sda3   VG centos          lvm2 [<10,00 GiB / 0    free]
  PV /dev/sda4   VG centos          lvm2 [<40,00 GiB / 0    free]
  Total: 3 [<98,99 GiB] / in use: 3 [<98,99 GiB] / in no VG: 0 [0   ]

Jusqu’ici, rien d’illogique, puisque nos UUID sont dupliqués !

Changement des UUID

Nous allons donc modifier les UUID pour pouvoir aller plus loin. Mais avant de commencer, nous allons importer les VolumeGroups clonés :

[root@guylux ~]# vgimportclone -n centos /dev/sdb2 /dev/sdb3 /dev/sdb4
  WARNING: PV lz0vGQ-2G8O-qJF2-0y4v-oTN1-3zZu-n3iGKb on /dev/sdb2 was already found on /dev/sda2.
  WARNING: PV iKZKNN-AQ50-4vqk-kZVo-Zyu7-CArv-lJu67t on /dev/sdb3 was already found on /dev/sda3.
  WARNING: PV cOQN0n-A12t-6NrC-8l3p-gIvt-rSLC-LspbSl on /dev/sdb4 was already found on /dev/sda4.
  WARNING: PV lz0vGQ-2G8O-qJF2-0y4v-oTN1-3zZu-n3iGKb prefers device /dev/sda2 because device is used by LV.
  WARNING: PV iKZKNN-AQ50-4vqk-kZVo-Zyu7-CArv-lJu67t prefers device /dev/sda3 because device is used by LV.
  WARNING: PV cOQN0n-A12t-6NrC-8l3p-gIvt-rSLC-LspbSl prefers device /dev/sda4 because device is used by LV.

Et on obtient ceci si on relance un vgdisplay :

[root@guylux ~]# vgdisplay
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <98,99 GiB
  PE Size               4,00 MiB
  Total PE              25341
  Alloc PE / Size       25341 / <98,99 GiB
  Free  PE / Size       0 / 0
  VG UUID               8BTTPw-iuCi-uBEg-zNUt-cCaf-hd1A-MHxoBw

  --- Volume group ---
  VG Name               centos1
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  8
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <98,99 GiB
  PE Size               4,00 MiB
  Total PE              25341
  Alloc PE / Size       25341 / <98,99 GiB
  Free  PE / Size       0 / 0
  VG UUID               R7l6aU-EK42-md7F-Jpgp-VMTo-1S8F-CmcHOK

vgimportclone a accepté l’import et a renommé notre VolumeGroup « centos1 ».

Et maintenant, on modifie l’UUID des Physical Volumes :

[root@guylux /]# pvchange -u /dev/sdb2 /dev/sdb3 /dev/sdb4

Par contre, si on fait un lvdisplay, on voit que les UUID sont toujours dupliqués :

[root@guylux /]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                kt0z7y-2PeP-Nfu0-XgFt-tKPp-g3eL-ylqvbi
  LV Write Access        read/write
  LV Creation host, time localhost, 2018-06-04 13:54:10 +0200
  LV Status              available
  # open                 1
  LV Size                95,11 GiB
  Current LE             24349
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/centos1/root
  LV Name                root
  VG Name                centos1
  LV UUID                kt0z7y-2PeP-Nfu0-XgFt-tKPp-g3eL-ylqvbi
  LV Write Access        read/write
  LV Creation host, time localhost, 2018-06-04 13:54:10 +0200
  LV Status              NOT available
  LV Size                95,11 GiB
  Current LE             24349
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto

Logique, du coup on s’occupe des UUID des Volume Groups et des Logical Volumes et on renomme au passage le Volume Group (l’opération vgrename change l’UUID à la volée) :

[root@guylux /]# vgchange -u centos1
[root@guylux /]# vgrename centos1 centosrestored

Maintenant, on monte le volume

Maintenant que les UUID sont changés, on va pouvoir activer le volume et le monter :

[root@guylux /]# lvchange -a y centosrestored
[root@guylux /]# mount /dev/centosrestored/root /restore/
mount: mauvais type de système de fichiers, option erronée, superbloc erroné
        sur /dev/mapper/centosrestored-root, page de code ou programme auxiliaire manquant, ou autre erreur

        Dans certains cas des renseignements utiles sont dans le journal
        système — essayez « dmesg | tail » ou quelque chose du genre.

Ce n’est pas drôle sinon ! Du coup, on lance un tail pour voir ce que ça raconte :

[root@guylux /]# dmesg|tail
[1956470.059675] scsi 0:0:1:0: Direct-Access     VMware   Virtual disk     2.0  PQ: 0 ANSI: 6
[1956470.059936] sd 0:0:1:0: Attached scsi generic sg2 type 0
[1956470.060034] sd 0:0:1:0: [sdb] 209715200 512-byte logical blocks: (107 GB/100 GiB)
[1956470.060096] sd 0:0:1:0: [sdb] Write Protect is off
[1956470.060099] sd 0:0:1:0: [sdb] Mode Sense: 61 00 00 00
[1956470.060115] sd 0:0:1:0: [sdb] Cache data unavailable
[1956470.060118] sd 0:0:1:0: [sdb] Assuming drive cache: write through
[1956470.061414]  sdb: sdb1 sdb2 sdb3 sdb4
[1956470.062094] sd 0:0:1:0: [sdb] Attached SCSI disk
[1957062.834599] XFS (dm-3): Filesystem has duplicate UUID e1cc7eeb-f5ec-4919-b7c7-b0dce08b6a47 - can't mount

Et oui! Notre système de fichiers XFS a lui aussi un UUID qu’il faut mettre à jour ! Alors, allons-y !

[root@guylux /]# xfs_admin -U generate /dev/centosrestored/root
Clearing log and setting UUID
writing all SBs
new UUID = 999979b1-1f19-4387-b404-cf4d237e7cf3

Et maintenant, on monte le volume :

[root@guylux /]# mount /dev/centosrestored/root /restore/

En résumé

On reprend le modus operandi :

  1. vgimportclone -n centos /dev/sdb2 /dev/sdb3 /dev/sdb4
  2. pvchange -u /dev/sdb2 /dev/sdb3 /dev/sdb4
  3. vgchange -u centos1
  4. vgrename centos1 centosrestored
  5. lvchange -a y centosrestored
  6. xfs_admin -U generate /dev/centosrestored/root
  7. mount /dev/centosrestored/root /restore/

Et voilà !

En bonus

Si le volume XFS est un peu fatigué (à cause d’une sauvegarde pour trop clean) :

[root@guylux /]# xfs_repair -L /dev/centosrestored/root

Le ‘-L’ va indiquer à xfs_repair de supprimer les logs de transaction (perte de données à prévoir, mais aux grands maux, les grands remèdes!).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.