LVM

From Leaky
Revision as of 10:28, 16 July 2021 by Leaky (talk | contribs) (rescan the scsi bus)
Jump to: navigation, search

rescan the scsi bus

If you've added another virtual disk to a VM, it may not see it without a reboot. If that's not going to be convenient it may show up by rescanning the scsi bus.

# echo "- - -" > /sys/class/scsi_host/host0/scan

It may not be host0 so check what's available. After this the new drive should show up.

If you simply increased the size of the existing disk, you can try:

# echo 1 > /sys/block/sda/device/rescan

This should make it show the new size via

fdisk -l /dev/sda

Creating new volumes

Assuming that /dev/sdb is a new disk with a single full size partition /dev/sdb1, the following will create a new volume group called data and a couple of logical volumes inside called projects and backups

# pvcreate /dev/sdb1

# vgcreate data /dev/sdb1

# lvcreate -n projects -L 20G data
# lvcreate -n backups -l 100%FREE data

Extending a filesystem to include a new partition

IMPORTANT: Check the partitions, do not just copy/paste below!

Initialise the LVM metadata on the partition to add into the filesystem

# pvcreate /dev/sdb1

Add the partition to the volume group

# vgextend sys /dev/sdb1
  Volume group "sys" successfully extended

Extend the relevant logical volume to include all of the newly added space

# lvextend -l +100%FREE /dev/sys/root
 Size of logical volume sys/root changed from 27.88 GiB (892 extents) to 47.84 GiB (1531 extents).
 Logical volume root successfully resized

Resize the underlying filesystem to use the whole LVM device

# resize2fs /dev/sys/root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/sys/root is mounted on /; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 3
Performing an on-line resize of /dev/sys/root to 12541952 (4k) blocks.
The filesystem on /dev/sys/root is now 12541952 blocks long.

Mounting a filesystem from a Xen disk file that has LVM on it

# losetup /dev/loop7 xenguest1.xvda.img
# kpartx -v -a xenguest1.xvda.img

If the disk partitions were just normal ones, you would be able to mount them now as /dev/loop7p1 /dev/loop7p2 etc. If the filesystems are contained within an LVM volume group there are some extra steps.

Scan physical volumes for LVM partitions

# pvscan
PV /dev/mapper/loop7p2   VG vg_xenguest1  lvm2 [29.51 GiB / 0    free]

Scan the partitions for volume groups

# vgscan
Reading all physical volumes.  This may take a while...
Found volume group "vg_xenguest1" using metadata type lvm2

Scan for logical volumes. Any that are currently in use will show ACTIVE in the first column.

# lvscan
 inactive   '/dev/vg_xenguest1/lv_root' [28.54 GiB] inherit
 inactive   '/dev/vg_xenguest1/lv_swap' [992.00 MiB] inherit

Since these are inactive, they can't be used as devices (yet).

# lvdisplay /dev/vg_xenguest1/lv_root
...
 LV Status              NOT available
 LV Size                28.54 GiB
...

First we need to set the volume group active, and then the logical volumes should work fine.

# vgchange -ay vg_xenguest1
2 logical volume(s) in volume group "vg_xenguest1" now active

And now we can mount the root filesystem.

# mkdir /mnt/xenguest1
# mount -t ext3 /dev/mapper/vg_xenguest1/lv_root /mnt/xenguest1

When you're finished with it, use the following commands to make the volumes inactive, remove the partitions from the kernel partition map and then remove the loopback device.

# vgchange -an vg_xenguest1 
# kpartx -v -d /dev/loop7
# losetup -d /dev/loop7