LTS

    Innovation Version

      Managing Hard Disks Through LVM

      LVM Overview

      Logical Volume Manager (LVM) is a mechanism used for managing disk partitions in Linux. By adding a logical layer between disks and file systems, LVM shields the disk partition layout for file systems, thereby improving flexibility in managing disk partitions.

      The procedure of managing a disk through LVM is as follows:

      1. Create physical volumes for a disk.
      2. Combine several physical volumes into a volume group.
      3. Create logical volumes in the volume group.
      4. Create file systems on logical volumes.

      When disks are managed using LVM, file systems are distributed on multiple disks and can be easily resized as needed. Therefore, file system space will no longer be limited by disk capacities.

      Basic Terms

      • Physical media: refers to physical storage devices in the system, such as hard disks (/dev/hda and /dev/sda). It is the storage unit at the lowest layer of the storage system.

      • Physical volume (PV): refers to a disk partition or device (such as a RAID) that has the same logical functions as a disk partition. PVs are basic logical storage blocks of LVM. A PV contains a special label that is stored in the second 512-byte sector by default. It can also be stored in one of the first four sectors. A label contains the universal unique identifier (UUID) of the PV, size of the block device, and the storage location of LVM metadata in the device.

      • Volume group (VG): consists of PVs and shields the details of underlying PVs. You can create one or more logical volumes within a VG without considering detailed PV information.

      • Logical volume (LV): A VG cannot be used directly. It can be used only after being partitioned into LVs. LVs can be formatted into different file systems and can be directly used after being mounted.

      • Physical extent (PE): A PE is a small storage unit in a PV. The PE size is the same as the size of the logical extent in the VG.

      • Logical extent (LE): An LE is a small storage unit in an LV. In one VG, the LEs of all the LVs have the same size.

      Installing the LVM

      NOTE: The LVM has been installed on the openEuler OS by default. You can run the rpm -qa | grep lvm2 command to check whether it is installed. If the command output contains "lvm2", the LVM has been installed. In this case, skip this section. If no information is output, the LVM is not installed. Install it by referring to this section.

      1. Configure the local yum source. For details, see Configuring the Repo Server.

      2. Clear the cache.

        dnf clean all
        
      3. Create a cache.

        dnf makecache
        
      4. Install the LVM as the root user.

        # dnf install lvm2
        
      5. Check the installed RPM package.

        rpm -qa | grep lvm2
        

      Managing PVs

      Creating a PV

      Run the pvcreate command as the root user to create a PV.

      pvcreate [option] devname ...
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -f: forcibly creates a PV without user confirmation.
        • -u: specifies the UUID of the device.
        • -y: answers yes to all questions.
      • devname: specifies the name of the device corresponding to the PV to be created. If multiple PVs need to be created in batches, set this option to multiple device names and separate the names with spaces.

      Example 1: Create PVs based on /dev/sdb and /dev/sdc.

      # pvcreate /dev/sdb /dev/sdc
      

      Example 2: Create PVs based on /dev/sdb1 and /dev/sdb2.

      # pvcreate /dev/sdb1 /dev/sdb2
      

      Viewing a PV

      Run the pvdisplay command as the root user to view PV information, including PV name, VG to which the PV belongs, PV size, PE size, total number of PEs, number of available PEs, number of allocated PEs, and UUID.

      pvdisplay [option] devname
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -s: outputs information in short format.
        • -m: displays the mapping from PEs to LEs.
      • devname: indicates the device corresponding to the PV to be viewed. If no PVs are specified, information about all PVs is displayed.

      Example: Run the following command to display the basic information about the PV /dev/sdb:

      # pvdisplay /dev/sdb
      

      Modifying PV Attributes

      Run the pvchange command as the root user to modify the attributes of a PV.

      pvchange [option] pvname ...
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -u: generates a new UUID.
        • -x: indicates whether PE allocation is allowed.
      • pvname: specifies the name of the device corresponding to the PV to be modified. If multiple PVs need to be modified in batches, set this option to multiple device names and separate the names with spaces.

      Example: Run the following command to prohibit PEs on PV /dev/sdb from being allocated. Running pvdisplay for a PV that is not added to a VG will return the Allocatable attribute with the value NO. You need to add the PV to a VG before you can change the attribute.

      # pvchange -x n /dev/sdb
      

      Deleting a PV

      Run the pvremove command as the root user to delete a PV.

      pvremove [option] pvname ...
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -f: forcibly deletes a PV without user confirmation.
        • -y: answers yes to all questions.
      • pvname: specifies the name of the device corresponding to the PV to be deleted. If multiple PVs need to be deleted in batches, set this option to multiple device names and separate the names with spaces.

      Example: Run the following command to delete the PV /dev/sdb. If the PV has been added to a VG, you need to delete the VG or remove the PV from the VG in advance.

      # pvremove /dev/sdb
      

      Managing VGs

      Creating a VG

      Run the vgcreate command as the root user to create a VG.

      vgcreate [option] vgname pvname ...
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -l: specifies the maximum number of LVs that can be created on the VG.
        • -p: specifies the maximum number of PVs that can be added to the VG.
        • -s: specifies the PE size of a PV in the VG.
      • vgname: name of the VG to be created.

      • pvname: name of the PV to be added to the VG.

      Example: Run the following command to create VG vg1 and add the PVs /dev/sdb and /dev/sdc to the VG.

      # vgcreate vg1 /dev/sdb /dev/sdc  
      

      Viewing a VG

      Run the vgdisplay command as the root user to view VG information.

      vgdisplay [option] [vgname]
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -s: outputs information in short format.
        • -A: displays only attributes of active VGs.
      • vgname: name of the VG to be viewed. If no VGs are specified, information about all VGs is displayed.

      Example: Run the following command to display the basic information about VG vg1:

      # vgdisplay vg1
      

      Modifying VG Attributes

      Run the vgchange command as the root user to modify the attributes of a VG.

      vgchange [option] vgname
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -a: sets the active status of the VG.
      • vgname: name of the VG whose attributes are to be modified.

      Example: Run the following command to change the status of vg1 to active.

      # vgchange -ay vg1
      

      Extending a VG

      Run the vgextend command as the root user to dynamically extend a VG. In this way, the VG size is extended by adding PVs to the VG.

      vgextend [option] vgname pvname ...
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • dev: debugging mode.
        • -t: test only.
      • vgname: name of the VG whose size is to be extended.

      • pvname: name of the PV to be added to the VG.

      Example: Run the following command to add PV /dev/sdb to VG vg1:

      # vgextend vg1 /dev/sdb
      

      Shrinking a VG

      Run the vgreduce command as the root user to delete PVs from a VG to reduce the VG size. A VG must contain at least one PV.

      vgreduce [option] vgname pvname ...
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -a: If no PVs are specified in the command, all empty PVs are deleted.
        • --removemissing: deletes lost PVs in the VG to restore the VG to the normal state.
      • vgname: name of the VG to be shrunk.

      • pvname: name of the PV to be deleted from the VG.

      Example: Run the following command to remove PV /dev/sdb2 from VG vg1:

      # vgreduce vg1 /dev/sdb2
      

      Deleting a VG

      Run the vgremove command as the root user to delete a VG.

      vgremove [option] vgname
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -f: forcibly deletes a VG without user confirmation.
      • vgname: name of the VG to be deleted.

      Example: Run the following command to delete VG vg1.

      # vgremove vg1
      

      Managing LVs

      Creating an LV

      Run the lvcreate command as the root user to create an LV.

      lvcreate [option] vgname
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -L: specifies the size of the LV in kKmMgGtT.
        • -l: specifies the size of the LV (number of LEs).
        • -n: specifies the name of the LV to be created.
        • -s: creates a snapshot.
      • vgname: name of the VG to be created.

      Example 1: Run the following command to create a 10 GB LV in VG vg1.

      # lvcreate -L 10G vg1
      

      Example 2: Run the following command to create a 200 MB LV in VG vg1 and name the LV lv1.

      # lvcreate -L 200M -n lv1 vg1
      

      Viewing an LV

      Run the lvdisplay command as the root user to view the LV information, including the size of the LV, its read and write status, and snapshot information.

      lvdisplay [option] [lvname]
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

      • -v: displays the mapping from LEs to PEs.

      • lvname: device file corresponding to the LV whose attributes are to be displayed. If this option is not set, attributes of all LVs are displayed.

        NOTE: Device files corresponding to LVs are stored in the VG directory. For example, if LV lv1 is created in VG vg1, the device file corresponding to lv1 is /dev/vg1/lv1.

      Example: Run the following command to display the basic information about LV lv1:

      # lvdisplay /dev/vg1/lv1
      

      Adjusting the LV Size

      Run the lvresize command as the root user to increase or reduce the size of an LVM LV. This may cause data loss. Therefore, exercise caution when running this command.

      lvresize [option] vgname
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -L: specifies the size of the LV in kKmMgGtT.
        • -l: specifies the size of the LV (number of LEs).
        • -f: forcibly adjusts the size of the LV without user confirmation.
      • lvname: name of the LV to be adjusted.

      Example 1: Run the following command to increase the size of LV /dev/vg1/lv1 by 200 MB.

      # lvresize -L +200 /dev/vg1/lv1
      

      Example 2: Run the following command to reduce the size of LV /dev/vg1/lv1 by 200 MB.

      # lvresize -L -200 /dev/vg1/lv1
      

      Extending an LV

      Run the lvextend command as the root user to dynamically extend the size of an LV online without interrupting the access of applications to the LV.

      lvextend [option] lvname
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -L: specifies the size of the LV in kKmMgGtT.
        • -l: specifies the size of the LV (number of LEs).
        • -f: forcibly adjusts the size of the LV without user confirmation.
      • lvname: device file of the LV whose size is to be extended.

      Example: Run the following command to increase the size of LV /dev/vg1/lv1 by 100 MB.

      # lvextend -L +100M /dev/vg1/lv1
      

      Shrinking an LV

      Run the lvreduce command as the root user to reduce the size of an LV. This may delete existing data on the LV. Therefore, confirm whether the data can be deleted before running the command.

      lvreduce [option] lvname
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -L: specifies the size of the LV in kKmMgGtT.
        • -l: specifies the size of the LV (number of LEs).
        • -f: forcibly adjusts the size of the LV without user confirmation.
      • lvname: device file of the LV whose size is to be extended.

      Example: Run the following command to reduce the space of LV /dev/vg1/lvl by 100 MB:

      # lvreduce -L -100M /dev/vg1/lv1
      

      Deleting an LV

      Run the lvremove command as the root user to delete an LV. If the LV has been mounted by running the mount command, you need to run the umount command to unmount the LV before running the lvremove command.

      lvremove [option] vgname
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -f: forcibly deletes an LV without user confirmation.
      • vgname: name of the LV to be deleted.

      Example: Run the following command to delete LV /dev/vg1/lv1.

      # lvremove /dev/vg1/lv1
      

      Creating and Mounting a File System

      After creating an LV, you need to create a file system on the LV and mount the file system to the corresponding directory.

      Creating a File System

      Run the mkfs command as the root user to create a file system.

      mkfs [option] lvname
      

      In the preceding information:

      • option: command parameter options. Common parameter options are as follows:

        • -t: specifies the type of the Linux file system to be created, such as ext2, ext3, and ext4. The default type is ext2.
      • lvname: name of the LV device file corresponding to the file system to be created.

      Example: Run the following command to create the ext4 file system on LV /dev/vg1/lv1:

      # mkfs -t ext4 /dev/vg1/lv1
      

      Manually Mounting a File System

      The file system that is manually mounted is not valid permanently. It does not exist after the OS is restarted.

      Run the mount command as the root user to mount a file system.

      mount lvname mntpath
      

      In the preceding information:

      • lvname: name of the LV device file corresponding to the file system to be mounted.
      • mntpath: mount path.

      Example: Run the following command to mount LV /dev/vg1/lv1 to the directory /mnt/data.

      # mount /dev/vg1/lv1 /mnt/data
      

      Automatically Mounting a File System

      A file system that is automatically mounted does not exist after the OS is restarted. You need to manually mount the file system again. If you perform the following steps as the root user after manually mounting the file system, the file system can be automatically mounted after the OS is restarted.

      1. Run the blkid command to query the UUID of an LV. The following uses LV /dev/vg1/lv1 as an example:

        # blkid /dev/vg1/lv1
        

        Check the command output. It contains the following information in which uuidnumber is a string of digits, indicating the UUID, and fstype indicates the file system type.

        /dev/vg1/lv1: UUID=" uuidnumber " TYPE=" fstype "

      2. Run the vi /etc/fstab command to edit the fstab file and add the following content to the end of the file:

        UUID=uuidnumber  mntpath                   fstype    defaults        0 0
        

        In the preceding information:

        • Column 1: indicates the UUID. Enter uuidnumber obtained in 1.
        • Column 2: indicates the mount directory of the file system. Replace mntpath with the actual value.
        • Column 3: indicates the file system format. Enter fstype obtained in 1.
        • Column 4: indicates the mount option. In this example, defaults is used.
        • Column 5: indicates the backup option. Enter either 1 (the system automatically backs up the file system) or 0 (the system does not back up the file system). In this example, 0 is used.
        • Column 6: indicates the scanning option. Enter either 1 (the system automatically scans the file system during startup) or 0 (the system does not scan the file system). In this example, 0 is used.
      3. Verify the automatic mounting function.

        1. Run the umount command to unmount the file system. The following uses LV /dev/vg1/lv1 as an example:

          # umount /dev/vg1/lv1
          
        2. Run the following command to reload all content in the /etc/fstab file:

          # mount -a
          
        3. Run the following command to query the file system mounting information (/mnt/data is used as an example):

          # mount | grep /mnt/data
          

          Check the command output. If the command output contains the following information, the automatic mounting function takes effect:

          /dev/vg1/lv1 on /mnt/data

      Bug Catching

      Buggy Content

      Bug Description

      Submit As Issue

      It's a little complicated....

      I'd like to ask someone.

      PR

      Just a small problem.

      I can fix it online!

      Bug Type
      Specifications and Common Mistakes

      ● Misspellings or punctuation mistakes;

      ● Incorrect links, empty cells, or wrong formats;

      ● Chinese characters in English context;

      ● Minor inconsistencies between the UI and descriptions;

      ● Low writing fluency that does not affect understanding;

      ● Incorrect version numbers, including software package names and version numbers on the UI.

      Usability

      ● Incorrect or missing key steps;

      ● Missing prerequisites or precautions;

      ● Ambiguous figures, tables, or texts;

      ● Unclear logic, such as missing classifications, items, and steps.

      Correctness

      ● Technical principles, function descriptions, or specifications inconsistent with those of the software;

      ● Incorrect schematic or architecture diagrams;

      ● Incorrect commands or command parameters;

      ● Incorrect code;

      ● Commands inconsistent with the functions;

      ● Wrong screenshots.

      Risk Warnings

      ● Lack of risk warnings for operations that may damage the system or important data.

      Content Compliance

      ● Contents that may violate applicable laws and regulations or geo-cultural context-sensitive words and expressions;

      ● Copyright infringement.

      How satisfied are you with this document

      Not satisfied at all
      Very satisfied
      Submit
      Click to create an issue. An issue template will be automatically generated based on your feedback.
      Bug Catching
      编组 3备份