This page looks best with JavaScript enabled

LVM Daily Maintenance

 ·  ☕ 6 min read

1. Basic Concepts

  • Physical Volume

A PV (Physical Volume) is made up of one or more physical hard disks, and can also be a RAID device.

  • Volume Group

A VG (Volume Group) is made up of one or more PVs.

  • Logical Volume

Space carved out of a VG as an LV (Logical Volume); after formatting, it is mounted to a directory for use.

  • Data safety

LVM has built-in RAID functionality, and you can also build a RAID device ahead of time and hand it to LVM to manage.

2. Managing Physical Volumes

  • Inspect storage devices
1
lsblk -d -o NAME,SIZE,TYPE | grep nvme
1
2
3
4
5
6
nvme0n1 745.2G disk
nvme5n1 745.2G disk
nvme1n1 745.2G disk
nvme3n1 745.2G disk
nvme4n1 745.2G disk
nvme2n1 745.2G disk
  • Inspect physical volumes
1
pvs
  • Create a physical volume
1
pvcreate /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
  • Add a disk
1
pvcreate /dev/nvme4n1
  • Remove a disk
1
pvremove /dev/nvme0n1 

3. Managing Volume Groups

  • Inspect volume groups
1
vgs
  • Create a volume group
1
vgcreate data_vg /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
  • Add a disk
1
vgextend data_vg /dev/nvme4n1
  • Remove a disk
1
vgreduce data_vg /dev/nvme4n1
  • Remove a volume group
1
lvremove data_vg

4. Managing Logical Volumes

4.1 Inspecting Logical Volumes

1
lvdisplay

4.2 Creating a Logical Volume

  • By percentage
1
lvcreate -l 20%FREE -n my_data1 data_vg
  • By size
1
lvcreate -L 100G -n my_data2 data_vg

4.3 Creating a RAID Logical Volume

Based on the RAID type, LVM automatically finds physical disks that satisfy the capacity and redundancy requirements.

  • RAID 0

-i 3 is the stripe count, that is, striping across 3 physical disks.

1
lvcreate --type raid0 -i 3 -L 100G -n my_raid_0 data_vg
  • RAID 1

-m 1 is the mirror count, that is, mirroring with 2 physical disks.

1
lvcreate --type raid1 -L 100G -m1 -n my_raid_1 data_vg
  • RAID 5
1
lvcreate --type raid5 -i 3 -L 10G -n my_raid_5 data_vg
  • RAID 6

-i 4 is the stripe count, that is, striping across 4 physical disks.

1
lvcreate --type raid6 -i 4 -L 100G -n my_raid_6 data_vg
  • RAID 10

-i 2 is the stripe count, that is, striping across 2 physical disks.

-m 1 is the mirror count, that is, mirroring with 2 physical disks.

1
lvcreate --type raid10 -i 2 -m1 -L 100G -n my_raid_10 data_vg
  • Inspect RAID device status
1
lsblk
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
NAME                          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                             8:0    0   1.1T  0 disk 
├─sda1                          8:1    0   1.1T  0 part /
└─sda2                          8:2    0    64M  0 part 
nvme0n1                       259:0    0 745.2G  0 disk 
├─data_vg-my_raid_6_rmeta_4   253:27   0     4M  0 lvm  
│ └─data_vg-my_raid_6         253:31   0   100G  0 lvm  
└─data_vg-my_raid_6_rimage_4  253:28   0    25G  0 lvm  
  └─data_vg-my_raid_6         253:31   0   100G  0 lvm  
nvme5n1                       259:1    0 745.2G  0 disk 
├─data_vg-my_raid_6_rmeta_5   253:29   0     4M  0 lvm  
│ └─data_vg-my_raid_6         253:31   0   100G  0 lvm  
└─data_vg-my_raid_6_rimage_5  253:30   0    25G  0 lvm  
  └─data_vg-my_raid_6         253:31   0   100G  0 lvm  
nvme1n1                       259:2    0 745.2G  0 disk 
├─data_vg-my_data2            253:0    0   105G  0 lvm  /mnt/my_data2
├─data_vg-my_raid_0_rimage_0  253:1    0  33.3G  0 lvm  
│ └─data_vg-my_raid_0         253:4    0   100G  0 lvm  
├─data_vg-my_raid_1_rmeta_0   253:5    0     4M  0 lvm  
│ └─data_vg-my_raid_1         253:9    0   100G  0 lvm  
├─data_vg-my_raid_1_rimage_0  253:6    0   100G  0 lvm  
│ └─data_vg-my_raid_1         253:9    0   100G  0 lvm  
├─data_vg-my_raid_5_rmeta_0   253:10   0     4M  0 lvm  
│ └─data_vg-my_raid_5         253:18   0    10G  0 lvm  
├─data_vg-my_raid_5_rimage_0  253:11   0   3.3G  0 lvm  
│ └─data_vg-my_raid_5         253:18   0    10G  0 lvm  
├─data_vg-my_raid_6_rmeta_0   253:19   0     4M  0 lvm  
│ └─data_vg-my_raid_6         253:31   0   100G  0 lvm  
├─data_vg-my_raid_6_rimage_0  253:20   0    25G  0 lvm  
│ └─data_vg-my_raid_6         253:31   0   100G  0 lvm  
├─data_vg-my_raid_10_rmeta_0  253:32   0     4M  0 lvm  
│ └─data_vg-my_raid_10        253:40   0   100G  0 lvm  
└─data_vg-my_raid_10_rimage_0 253:33   0    50G  0 lvm  
  └─data_vg-my_raid_10        253:40   0   100G  0 lvm  
nvme3n1                       259:3    0 745.2G  0 disk 
├─data_vg-my_raid_0_rimage_2  253:3    0  33.3G  0 lvm  
│ └─data_vg-my_raid_0         253:4    0   100G  0 lvm  
├─data_vg-my_raid_5_rmeta_2   253:14   0     4M  0 lvm  
│ └─data_vg-my_raid_5         253:18   0    10G  0 lvm  
├─data_vg-my_raid_5_rimage_2  253:15   0   3.3G  0 lvm  
│ └─data_vg-my_raid_5         253:18   0    10G  0 lvm  
├─data_vg-my_raid_6_rmeta_2   253:23   0     4M  0 lvm  
│ └─data_vg-my_raid_6         253:31   0   100G  0 lvm  
├─data_vg-my_raid_6_rimage_2  253:24   0    25G  0 lvm  
│ └─data_vg-my_raid_6         253:31   0   100G  0 lvm  
├─data_vg-my_raid_10_rmeta_2  253:36   0     4M  0 lvm  
│ └─data_vg-my_raid_10        253:40   0   100G  0 lvm  
└─data_vg-my_raid_10_rimage_2 253:37   0    50G  0 lvm  
  └─data_vg-my_raid_10        253:40   0   100G  0 lvm  
nvme4n1                       259:4    0 745.2G  0 disk 
├─data_vg-my_raid_5_rmeta_3   253:16   0     4M  0 lvm  
│ └─data_vg-my_raid_5         253:18   0    10G  0 lvm  
├─data_vg-my_raid_5_rimage_3  253:17   0   3.3G  0 lvm  
│ └─data_vg-my_raid_5         253:18   0    10G  0 lvm  
├─data_vg-my_raid_6_rmeta_3   253:25   0     4M  0 lvm  
│ └─data_vg-my_raid_6         253:31   0   100G  0 lvm  
├─data_vg-my_raid_6_rimage_3  253:26   0    25G  0 lvm  
│ └─data_vg-my_raid_6         253:31   0   100G  0 lvm  
├─data_vg-my_raid_10_rmeta_3  253:38   0     4M  0 lvm  
│ └─data_vg-my_raid_10        253:40   0   100G  0 lvm  
└─data_vg-my_raid_10_rimage_3 253:39   0    50G  0 lvm  
  └─data_vg-my_raid_10        253:40   0   100G  0 lvm  
nvme2n1                       259:5    0 745.2G  0 disk 
├─data_vg-my_raid_0_rimage_1  253:2    0  33.3G  0 lvm  
│ └─data_vg-my_raid_0         253:4    0   100G  0 lvm  
├─data_vg-my_raid_1_rmeta_1   253:7    0     4M  0 lvm  
│ └─data_vg-my_raid_1         253:9    0   100G  0 lvm  
├─data_vg-my_raid_1_rimage_1  253:8    0   100G  0 lvm  
│ └─data_vg-my_raid_1         253:9    0   100G  0 lvm  
├─data_vg-my_raid_5_rmeta_1   253:12   0     4M  0 lvm  
│ └─data_vg-my_raid_5         253:18   0    10G  0 lvm  
├─data_vg-my_raid_5_rimage_1  253:13   0   3.3G  0 lvm  
│ └─data_vg-my_raid_5         253:18   0    10G  0 lvm  
├─data_vg-my_raid_6_rmeta_1   253:21   0     4M  0 lvm  
│ └─data_vg-my_raid_6         253:31   0   100G  0 lvm  
├─data_vg-my_raid_6_rimage_1  253:22   0    25G  0 lvm  
│ └─data_vg-my_raid_6         253:31   0   100G  0 lvm  
├─data_vg-my_raid_10_rmeta_1  253:34   0     4M  0 lvm  
│ └─data_vg-my_raid_10        253:40   0   100G  0 lvm  
└─data_vg-my_raid_10_rimage_1 253:35   0    50G  0 lvm  
  └─data_vg-my_raid_10        253:40   0   100G  0 lvm  

4.4 Removing a Logical Volume

1
lvremove data_vg/my_data1

4.5 Mounting for Use

  • Format
1
mkfs.xfs /dev/data_vg/my_data1
1
mkfs.ext4 /dev/data_vg/my_data2
  • Create the mount point
1
mkdir /mnt/my_data1
1
mkdir /mnt/my_data2
  • Mount
1
mount /dev/data_vg/my_data1 /mnt/my_data1
1
mount /dev/data_vg/my_data2 /mnt/my_data2
  • Inspect mounts
1
df -h | grep data_vg
1
2
/dev/mapper/data_vg-my_data1   427G  468M  427G   1% /mnt/my_data1
/dev/mapper/data_vg-my_data2    98G   61M   93G   1% /mnt/my_data2

4.6 Growing

  • By size
1
lvextend -L +100G /dev/data_vg/my_data1

Grow the filesystem

1
xfs_growfs /mnt/my_data1
  • By percentage
1
lvextend -l +10%FREE /dev/data_vg/my_data2

Grow the filesystem, but the argument points to the logical volume.

1
resize2fs /dev/data_vg/my_data2

4.7 Shrinking

xfs and zfs do not support shrinking; ext4 and Btrfs do. If an error occurs, try growing again.

  • Unmount the mount point
1
umount /mnt/my_data2
  • Check filesystem health
1
e2fsck -f /dev/data_vg/my_data2
  • Shrink the filesystem to the specified size
1
resize2fs /dev/data_vg/my_data2 100G
  • Shrink the logical volume to the specified size

The logical volume size >= the filesystem size.

1
lvreduce -L 105G /dev/data_vg/my_data2
  • Remount
1
mount /dev/data_vg/my_data2 /mnt/my_data2
  • Inspect the mount point
1
df -h | grep data_vg

微信公众号
WRITTEN BY
微信公众号