Due to several reasons a volume group may become corrupted after unintended user intervention. LVM will not be aware of this situation unless the alternate is already on the volume group, and may allow to add the alternate path to a different volume group. Two of the useful commands provided as part of LVM are vgcfgbackup and vgcfgrestore. These commands allow you to back up the metadata of a volume group. This may not seem like much, but there are a few scenarios where having a backup of the volume group metadata can save some time and maybe sanity as well.
By default, the metadata backup is stored in the
/etc/lvm/backup file and the metadata archives are stored in the
/etc/lvm/archive file. At the top of each file it will tell you the time/data when the file was generated so chances are you'll have a copy of the older metadata as it was before the irreversible operations.
See our lvm configuration below:
# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- 19.51g 40.00m /dev/sdb vg-01 lvm2 a-- 15.00g 13.30g /dev/sdc vg-01 lvm2 a-- 20.00g 19.30g
Our volume group information:
root@centos7-srv admin]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- 19.51g 40.00m vg-01 2 3 0 wz--n- 34.99g 32.59g
Now, logical volume information:
# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 17.47g swap centos -wi-ao---- 2.00g lv_linear vg-01 -wi-a----- 1.00g lv_mirror vg-01 rwi-a-r--- 200.00m 100.00 lv_stripe vg-01 -wi-a----- 1.00g
Whenever you do any lvm activities like lvcreate, remove, disk add... should be updated in the respective volume group conf file under
/etc/lvm/ directory. If disk fails we can restore the LVM configuration onto the disk using this backup configuration file. vgcfgbackup command takes the configuration metadata from the lvm header of the disk and save to a default file location
/etc/lvm/backup/vg_name. By default, vgcfgbackup runs automatically each time, the lvm command changes the lvm configuration. It reads the LVM header details from system area of the disk and copies it to file. This file helps you to restore configuration on newly added disk in place of old disk which may have got corrupted or failed.
Note that a metadata backup does not back up the user and system data contained in the logical volumes. It is recommended to have this backup taken after every LVM level change. By default all LVM commands altering LVM details are designed to take this backup automatically hence manually running command is not necessary.
# vgcfgbackup [-f path_newfilename ] vg_name
- vg_name: the path name of a volume group
-f path_newfilename:save the conﬁguration using the new filename speciﬁed at the path specified. If
-fis omitted, the default ﬁle name is in the form of
/etc/lvm/backup/vg_namewhere vg_name is the base name of vg_name. If you don't specified a new path, it will save the new file in the current directory.
# vgcfgbackup /dev/vg-01 Volume group "vg-01" successfully backed up.
We can see the message our backup is a success. Let's see the backup folder
# ls -l /etc/lvm/backup/ total 8 -rw-------. 1 root root 1715 Apr 25 16:50 centos -rw-------. 1 root root 4089 May 4 01:39 vg-01
The default filename is similar to our volume group name. Now, let's see what happen when we use
# vgcfgbackup -f vg-01_bak /dev/vg-01 Volume group "vg-01" successfully backed up.
It is a success. Let's check our file vg-01_bak in backup directory
# ls /etc/lvm/backup/ centos vg-01
Only the previous file exists. We don't see our file. Now let's check in the current directory
# ls -l total 56392 -rwxrwxrwx. 1 admin admin 1975 Apr 25 17:01 manifest.txt -rwxrwxrwx. 1 admin admin 2287 Apr 25 17:01 run_upgrader.sh -rw-------. 1 root root 4074 May 4 02:05 vg-01_bak
You can see our file on the last line. Now let's retry the same command but we will specify the default backup folder.
# vgcfgbackup -f /etc/lvm/backup/vg-01_bak /dev/vg-01 Volume group "vg-01" successfully backed up.
Now let's check.
# ls -l /etc/lvm/backup/ total 12 -rw-------. 1 root root 1715 Apr 25 16:50 centos -rw-------. 1 root root 4089 May 4 01:39 vg-01 -rw-------. 1 root root 4090 May 4 02:26 vg-01_bak
The vgcfgrestore command restores LVM volume group conﬁguration from the archive to all the physical volumes in the volume groups. Restore cannot be performed if the volume group is activated in shared mode. Make sure you make a current copy of the existing working configuration using the vgcfgbackup command with the
-f flag to specify a different file for the output so that you don't alter any files that are in the
/etc/lvm/archive folders. Make sure you diff the current configuration with the configuration you wish to restore to verify that the only changes you're about to apply are to revert the erroneous operations.
vgcfgrestore [-f|--file <filename>] [-t|--test] [-v] vg_name
- vg_name: the name of the volume group corresponding
-f filename:indicates the name of LVM metadata backup file which specifies a metadata backup or archive file to be used for restoring the vg_name
--test:can be used to check the error of the command which can occur
-v:to have the detail of what currently happens
In the example below, we will simulate the deletion of a logical volume and we will try to restore it.
NB: The following example can be dangerous and destructive so be very careful and if possible have a full backup. Please make sure to try it on a test environment
Step1: Remove a logical volume
# lvremove /dev/vg-01/lv_linear Do you really want to remove active logical volume lv_linear? [y/n]: y Logical volume "lv_linear" successfully removed
# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 17.47g swap centos -wi-ao---- 2.00g lv_mirror vg-01 rwi-a-r--- 200.00m 100.00 lv_stripe vg-01 -wi-a----- 1.00g
Step 2: Now look for the archive file at
/etc/lvm/archive/vgname_(xxxxx).vg. Just looking the date that you have removed the logical volume. In our case it's the last file of the list
# ls -l /etc/lvm/archive/ total 28 -rw-------. 1 root root 1716 Apr 25 16:50 centos_00000-34432512.vg -rw-------. 1 root root 1562 May 1 16:02 vg-01_00002-1413920221.vg -rw-------. 1 root root 2009 May 1 16:07 vg-01_00003-718049637.vg -rw-------. 1 root root 4097 May 4 03:51 vg-01_00004-306926489.vg
Step 3: Verify the content of the file to check the time/data when the file was generated and the description which indicates action done before
# head /etc/lvm/archive/vg-01_00004-306926489.vg # Generated by LVM2 version 2.02.130(2)-RHEL7 (2015-10-14): Thu May 4 03:51:35 2017 contents = "Text Format Volume Group" version = 1 description = "Created *before* executing 'lvremove /dev/vg-01/lv_linear'" creation_host = "centos7-srv" # Linux centos7-srv 3.10.0-514.16.1.el7.x86_64 #1 creation_time = 1493866295 # Thu May 4 03:51:35 2017
You can see the description which indicates that the file was created before executing lvremove command.
Step 4: Now recover it. You can test before recovering with
# vgcfgrestore vg-01 -v -f /etc/lvm/archive/vg-01_00004-306926489.vg Found same device /dev/sdb with same pvid 3vXbKwkq63cBiydWgQfkd2aaBeYo6b5I Found same device /dev/sdc with same pvid E9wih1232IjADxwkSwRC9kVV3VPJbD5O Restored volume group vg-01
Step 5: Now we can check it
<# lvscan ACTIVE '/dev/centos/swap' [2.00 GiB] inherit ACTIVE '/dev/centos/root' [17.47 GiB] inherit inactive '/dev/vg-01/lv_linear' [1.00 GiB] inherit ACTIVE '/dev/vg-01/lv_stripe' [1.00 GiB] inherit ACTIVE '/dev/vg-01/lv_mirror' [200.00 MiB] inherit
You can see that our logical is not active in the third line. We will activate it and check again
# lvchange -ay /dev/vg-01/lv_linear
# lvscan | grep lv_linear ACTIVE '/dev/vg-01/lv_linear' [1.00 GiB] inherit
The commands vgcfgbackup and vgcfgrestore are useful commands to use when you need to restore volume group metadata. You can also use vgcfgrestore to restore an earlier version of the metadata.