From Wiki-UX.info

Wiki-UX / Logical Volume Manager / How to restore LVM Volume Group metadata from a previous configuration
Jump to: navigation, search

How to restore LVM Volume Group metadata from a previous configuration

This article explains how to recover LVM Volume Group metadata to the physical volume using the vgcfgrestore command. Due to several reason a volume group may become corrupted after unintended user intervention.

Abstract

This article explains how to recover LVM Volume Group metadata to the physical volume using the vgcfgrestore command. Due to several reason a volume group may become corrupted after unintended user intervention. A very common situation is to incorrectly use the pvcreate to an alternate path of a physical volume already in use by a volume group. 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.

Contents


Example

The vgdisplay command will show no problem until the system is rebooted or the original volume group is reactivated.

Let's assume that accidentally the pvcreate -f command was run on the c20t0d0 physical volume, that is an alternate path of c19t0d0.

The vgdisplay command shows two disks, both are available, the current and active PV shows the same number (2).

Up to this point everything looks fine, but actually behind the scene when the pvcreate -f command was run on c20t0d0 it overwrote the header configuration on the physical volume. That is why LVM report two different disks, when actually both are the same.

When the server was rebooted, LVM was not able to understand the configuration and the problem reveals itself.

The following procedure will require a valid prior LVM volume group configuration file and also a map file.

1. Make sure the volume group is deactivated.

# vgchange -a n /dev/<vgname>
Volume group "<vgname>" has been successfully changed.

2. Verify the PV list in the configuration file shows the previous configuration. In this case we are assumming that the user added a second disk to the VG, old configuration file will show only one:

# vgcfgrestore -f /dev/lvmconf/<vgname>.conf.old
Volume Group Configuration information in "<vgname>.conf.old"
VG Name /dev/<vgname>
 ---- Physical volumes : 1 ----
    /dev/rdsk/c#t#d0 (Non-bootable)

3. Restore the VG header information from previous configuration file. It should be restore to the old physical volume.

# vgcfgrestore -f /etc/lvmconf/<vgname>.conf.old /dev/rdsk/c#t#d#
Volume Group configuration has been restored to /dev/rdsk/c3t15d0

4. Remove VG configuration out of the lvmtab.

# vgexport /dev/<vgname>

5. Recreate VG directory:

# mkdir /dev/<vgname>

6. Recreate the volume group "group" node file. Remember that the minor number must be unique.

# mknod /dev/<vgname>/group c 64 0x0#0000

7. Reimport the volume group. LV structures will be recover from map file.

# vgimport -m /tmp/<vgname>.map /dev/<vgname> /dev/dsk/c#t#d#
Warning: A backup of this volume group may not exist on this machine.
Please remember to take a backup using the vgcfgbackup command after activating the volume group.

8. Reactivate volume group. Some warning messages may be received.

# vgchange -a y /dev/<vgname>
Volume group "<vgname>" has been successfully changed.

9. Verify the current LVM configuration. Some parameters to check are current and active PV number (both should be the same), the Used PVs parameter for each logical volume and the status of the PV (Should be available):

 # vgdisplay -v /dev/<vgname>
 --- Volume groups ---
 VG Name                     /dev/<vgname>
 VG Write Access             read/write
 VG Status                   available
 Max LV                      255
 Cur LV                      1
 Open LV                     1
 Max PV                      16
 Cur PV                      1
 Act PV                      1
 Max PE per PV               1000
 VGDA                        2
 PE Size (Mbytes)            4
 Total PE                    1000
 Alloc PE                    100
 Free PE                     900
 Total PVG                   0
 Total Spare PVs             0
 Total Spare PVs in use      0
 
    --- Logical volumes ---
    LV Name                     /dev/<vgname>/test
    LV Status                   available/syncd
    LV Size (Mbytes)            400
    Current LE                  100
    Allocated PE                100
    Used PV                     1
 
 
    --- Physical volumes ---
    PV Name                     /dev/dsk/c#t#d#
    PV Status                   available
    Total PE                    1000
    Free PE                     900
    Autoswitch                  On
    Proactive Polling           On

How to use vgcfgrestore on every physical volume of a volume group?

This script allows to use the vgcfgrestore command on every physical volume of a particular volume group. Because vgcfgrestore will pass through all primary and alternate path, the volume group needs to be deactivated.

for pv in $(strings /etc/lvmconf/<vgname> | grep /dev/r | sed 's/\/r/\//')
do
   echo vgcfgrestore -n <vgname> $pv
done

Example:

for pv in $(strings /etc/lvmconf/vgdata | grep /dev/r | sed 's/\/r/\//')
do
echo vgcfgrestore -n vgdata $pv
done > /tmp/vgdata.vgcfgrestore

sh /tmp/vgdata.vgcfgrestore

Reference

Authors

This page was last modified on 3 August 2011, at 19:51. This page has been accessed 11,081 times.