1. Basic Concepts
A PV (Physical Volume) is made up of one or more physical hard disks, and can also be a RAID device.
A VG (Volume Group) is made up of one or more PVs.
Space carved out of a VG as an LV (Logical Volume); after formatting, it is mounted to a directory for use.
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
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
|
1
| pvcreate /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
|
3. Managing Volume Groups
1
| vgcreate data_vg /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
|
1
| vgextend data_vg /dev/nvme4n1
|
1
| vgreduce data_vg /dev/nvme4n1
|
4. Managing Logical Volumes
4.1 Inspecting Logical Volumes
4.2 Creating a Logical Volume
1
| lvcreate -l 20%FREE -n my_data1 data_vg
|
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.
-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
|
-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
|
1
| lvcreate --type raid5 -i 3 -L 10G -n my_raid_5 data_vg
|
-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
|
-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
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
1
| mkfs.xfs /dev/data_vg/my_data1
|
1
| mkfs.ext4 /dev/data_vg/my_data2
|
1
| mount /dev/data_vg/my_data1 /mnt/my_data1
|
1
| mount /dev/data_vg/my_data2 /mnt/my_data2
|
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
1
| lvextend -L +100G /dev/data_vg/my_data1
|
Grow the filesystem
1
| xfs_growfs /mnt/my_data1
|
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.
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
|
1
| mount /dev/data_vg/my_data2 /mnt/my_data2
|