Logical Volume Manager (LVM)
This is a quick and dirty cheat sheet on LVM using Linux, I have highlighted many of the common attributes for each command however this is not an extensive list, make sure you look up the command.
With the pvs, vgs and lvs commands, the number of verboses added the more verbose information for example pvs -vvvvv
Directory and Files |
|
| Directories and Files | ## Directories /etc/lvm - default lvm directory location /etc/lvm/backup - where the automatic backups go /etc/lvm/cache - persistent filter cache /etc/lvm/archive - where automatic archives go after a volume group change /var/lock/lvm - lock files to prevent metadata corruption # Files /etc/lvm/lvm.conf - main lvm configuration file $HOME/.lvm - lvm history |
Tools |
|
| diagnostic | lvmdump lvmdump -d <dir> dmsetup [info|ls|status] Note: by default the lvmdump command creates a tar ball |
Physical Volumes |
|
| display | pvdisplay -v |
| scanning | pvscan -v Note: scans for disks for non-LVM and LVM disks |
| adding | pvcreate /dev/sdb1 ## Create physical volume with specific UUID, used to recover volume groups (see miscellaneous section) pvcreate --uuid <UUID> /dev/sdb1 Common Attributes that you may want to use: -M2 create a LVM2 physical volume |
| removing | pvremove /dev/sdb1 |
| checking | pvck -v /dev/sdb1 Note: check the consistency of the LVM metadata |
| change physical attributes | ## do not allow allocation of extents on this drive --addtag add a tag |
| moving | pvmove -v /dev/sdb2 /dev/sdb3 Note: moves any used extents from this volume to another volume, in readiness to remove that volume. However you cannot use this on mirrored volumes, you must convert back to non-mirror using "lvconvert -m 0" |
Volume Groups |
|
| display | vgdisplay -v vgs -v vgs -a -o +devices vgs flags: #PV - number of physical devices #LV - number of configured volumes vgs attributes are: 1. permissions (r)|(w) 2. resi(z)eable 3. e(x)ported 4. (p)artial 5. allocation policy - (c)ontiguous, c(l)ing, (n)ormal, (a)nywhere, (i)nherited 6. (c)luster |
| scanning | vgscan -v |
| creating | vgcreate VolData00 /dev/sdb1 /dev/sdb2 /dev/sdb3 |
| extending | vgextend VolData00 /dev/sdb3 |
| reducing | vgreduce VolData00 /dev/sdb3 vgreduce --removemissing --force VolData00 |
| removing | vgremove VolData00 Common Attributes that you may want to use: -f force the removal of any logical volumes |
| checking | vgck VolData00 Note: check the consistency of the LVM metadata |
| change volume attributes | vgchange -a n VolData00 Common Attributes that you may want to use: -a control availability of volumes within the group -l maximum logical volumes -p maximum physical volumes -s physical extent size (default is 4MB) -x resizable yes or no (see VG status in vxdisplay) |
| renaming | vgrename VolData00 Data_Vol_01 note: the volume group must not have any active logical volumes |
| converting metadata type | vgconvert -M2 VolData00 Note: vgconvert allows you to convert from one type of metadata format to another for example from LVM1 to LVM2 |
| merging | vgmerge New_Vol_Group Old_Vol_Group Note: the old volumes group will be merged into the new volume group |
| spliting | vgsplit Old_Vol_Group New_Vol_Group [physical volumes] [-n logical volume name] |
| importing | vgimport VolData00 Common Attributes that you may want to use: -a import all exported volume groups |
| exporting | ## to see if a volume has already been export use "vgs" and look at the third attribute should be a x vgexport VolData00 Common Attributes that you may want to use: -a export all inactive volume groups |
| backing up | ## Backup to default location (/etc/lvm/backup) vgcfgbackup VolData00 # Backup to specific location vgcfgbackup -f /var/backup/VolData00_bkup VolData00 Note: the backup is written in plain text and are by default located in /etc/lvm/backup |
| restoring | vgcfgrestore -f /var/backup/VolData00_bkup VolData00 Common Attributes that you may want to use: -l list backups of file -f backup file -M metadataype 1 or 2 |
| cloning | vgimportclone /dev/sdb1 Note: used to import and rename duplicated volume group |
| special files | vgmknodes VolData00 Note: recreates volume group directory and logical volume special files in /dev |
Logical Volumes |
|
| display | lvdisplay -v |
| scanning | lvscan -v lvmdiskscan |
| creating | ## plain old volume ## Mirrored volume |
| extending | lvextend -L 20M /dev/VolData00/vol01 Common Attributes that you may want to use: -L size of the volume [kKmMgGtT] |
| reducing/resizing | lvreduce -L 5M /dev/VolData00/vol01 fsadm resize /dev/VolData01/data01 [size] |
| removing | lvremove /dev/VolData00/vol01 |
| adding a mirror to a non-mirrored volume | lvconvert -m1 --mirrorlog core /dev/VolData00/vol01 /dev/sdb2 |
| change volume attributes | lvchange -a n /dev/VolData00/vol01 -a availability |
| renaming | lvrename /dev/VolData00/vol_old /dev/VolData00/vol_new |
| snapshotting | lvcreate --size 100M --snapshot -name snap /dev/vg01/data01 |
Miscellaneous |
|
| Simulating a disk failure | dd if=/dev/zero of=/dev/sdb2 count=10 |
| reparing a failed mirror no LVM corruption | ## check volume, persume /dev/sdb2 has failed lvs -a -o +devices # remove the failed disk from the volume (if not already done so) , this will convert volume into a non-mirrored volume vgreduce --removemissing --force VolData00 ## replace the disk physically, remember to partion it with type 8e fdisk /dev/sdb ........ ## add new disk to LVM pvcreate /dev/sdb2 ## add the disk back into volume group vgextend VolData00 /dev/sdb2 ## mirror up the volume lvconvert -m1 --mirrorlog core /dev/VolData00/vol02 /dev/sdb2 |
| corrupt LVM metadata without replacing drive | # attempt to bring the volume group online vgchange -a y VolData00 # Restore the LVM configation vgcfgrestore VolData00 # attempt to bring the volume grou online vgchange -a y VolData00 # file system check e2fsck /dev/VolData00/data01 |
| corrupt LVM metadata but replacing the faulty disk | # attempt to bring the volume group online but you get UUID conflict errors make note of the UUID number Note: if you have backed the volume group configuration you can obtain the UUID number in the backup file by default located in /etc/lvm/backup or running "pvs -v" |
For other LVM's and Array utilities see my LVM central page