Skip to main content

LVM

LVM, or Logical Volume Manager, is a tool used on Linux systems to manage disk space in a more flexible way compared to traditional partitioning. It acts like a layer of abstraction between your physical disks and the logical volumes you use for your filesystems. Here's a breakdown of how it works:

Components of LVM:

  • Physical Volumes (PV): These are your actual physical hard drives or partitions on those drives. They are the raw storage devices that LVM uses.
  • Volume Group (VG): A VG is a collection of PVs that are grouped together under LVM management. You can think of it as a pool of storage space.
  • Logical Volume (LV): This is the virtual partition that you create from the storage space in a VG. You can format an LV with a filesystem (like ext4) and use it to store your data just like a regular partition.

LVM Cropped.jpg

Physical Volume (PV) Management:

    pvcreate /dev/sdX: Initializes a physical disk or partition for use with LVM. Replace /dev/sdX with the actual device name. pvdisplay: Displays information about all the PVs in your system. pvmove /dev/sdX /dev/sdY: Moves extents (data chunks) from one PV to another. This is useful for migrating data or rebalancing PVs within a VG. pvresize /dev/sdX: Resizes a physical disk or partition that's already a PV. pvremove /dev/sdX: Removes a PV from LVM management.

    Volume Group (VG) Management:

      vgcreate vg_name /dev/sdX /dev/sdY: Creates a new volume group named vg_name using the specified PVs (/dev/sdX and /dev/sdY). You can add more PVs to a VG later. vgdisplay: Displays information about all the VGs in your system. vgreduce vg_name /dev/sdX: Removes a PV from a volume group (assuming there are other PVs in the VG and the data is not exclusively on the PV being removed). vgremove vg_name: Removes a volume group entirely. This destroys the VG and all its LVs. Use with caution!

      Logical Volume (LV) Management:

        lvcreate -n lv_name -L <size> vg_name: Creates a new logical volume named lv_name with the specified size <size> within the volume group vg_name. You can specify the size in various units (e.g., M for Megabytes, G for Gigabytes). lvdisplay: Displays information about all the LVs in your system. lvextend -L <size> /dev/mapper/vg_name-lv_name: Extends the size of an existing LV. Replace <size> with the desired expansion size. lvreduce -L <size> /dev/mapper/vg_name-lv_name: Reduces the size of an existing LV. Use with caution as data loss might occur if shrinking beyond the size of the data written on the LV. lvremove /dev/mapper/vg_name-lv_name: Removes a logical volume from the VG. The space becomes available for other LVs within the VG. lvresize [OPTIONS] LV [PV ...]: Resizes an existing LV. This command was covered in detail previously.

        Information and Scanning:

          lvmconfig: Displays global LVM configuration information. vgscan: Scans all disks for PVs. This updates LVM's internal information about available physical devices. lvscan: Scans all VGs for LVs. This updates LVM's information about logical volumes within existing VGs.