使用 LVM 添加存储

使用 LVM 添加存储

LVM 为你配置存储的方式提供了极大的灵活性。

LVM逻辑卷管理器(Logical Volume Manager)允许在操作系统和硬件之间建立一个抽象层。通常,你的操作系统会查找磁盘(/dev/sda、/dev/sdb 等)和这些磁盘中的分区(/dev/sda1、/dev/sdb1 等)。

LVM 在操作系统和磁盘之间创建了一个虚拟层。LVM 不是一个驱动器持有一定数量的分区,而是创建一个统一的存储池(称为卷组Volume Group),跨越任意数量的物理驱动器(称为物理卷Physical Volume)。使用卷组中可用的存储,LVM 可以为你的操作系统提供类似磁盘和分区的功能。操作系统完全没有意识到它被“欺骗”了。

lvm与传统存储对比

由于 LVM 虚拟地创建卷组和逻辑卷,因此即使在系统运行时,也可以轻松调整它们的大小或移动它们,或者创建新卷。此外,LVM 提供了其它情况下不存在的特性,比如创建逻辑卷的活动快照时无需首先卸载磁盘。

LVM 中的卷组是一个命名的虚拟容器,将底层物理磁盘组合在一起。它充当一个池,可以从中创建不同大小的逻辑卷Logical Volume。逻辑卷包含实际的文件系统并且可以跨越多个磁盘,并且不需要物理上连续。

特性

  • 分区名称通常具有系统名称,例如 /dev/sda1。LVM 具有便于人们理解的名称,例如 home 或者 media。
  • 分区的总大小受底层物理磁盘大小的限制。在 LVM 中,卷可以跨越多个磁盘,并且仅受 LVM 中所有物理磁盘总大小的限制。
  • 分区通常只有在磁盘未使用且已卸载时才能调整大小、移动或删除。LVM 卷可以在系统运行时进行操作。
  • 只能通过分配与分区相邻的可用空间来扩展分区。LVM 卷可以从任何地方占用可用空间。
  • 扩展分区涉及移动数据以腾出可用空间,这非常耗时,并且可能会在断电期间导致数据丢失。LVM 卷可以从卷组中的任何地方占用可用空间,甚至可以在另一块磁盘上。
  • 因为在 LVM 中创建卷非常容易,所以它鼓励创建不同的卷,例如创建单独的卷来测试功能或尝试不同的操作系统。对于分区,此过程将非常耗时并且容易出错。
  • 快照只能在 LVM 中创建。它允许你创建当前逻辑卷的时间点镜像,即使在系统运行时也可以。这非常适合备份。

测试设置

作为演示,假设你的系统具有以下驱动器配置:

1
2
3
4
5
6
7
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 19G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 975M 0 part [SWAP]
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 4G 0 disk

初始化磁盘以用于 LVM

运行 pvcreate /dev/nvme0n1。输出应如下:

1
Physical volume "/dev/nvme0n1" successfully created.

使用 pvs 或者 pvdisplay 查看结果:

1
2
3
4
5
6
7
8
9
10
11
"/dev/nvme0n1" is a new physical volume of "4.00 GiB"
--- NEW Physical volume ---
PV Name /dev/nvme0n1
VG Name
PV Size 4.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID qAYPfQ-UApi-WB0d-VLlW-6Nfx-Sdhl-WHKloH

创建卷组

运行 vgcreate nvme /dev/nvme0n1。通过 vgs 或者 vgdisplay 查看结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
--- Volume group ---
VG Name nvme
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <4.00 GiB
PE Size 4.00 MiB
Total PE 1023
Alloc PE / Size 0 / 0
Free PE / Size 1023 / <4.00 GiB
VG UUID pv4pI6-cO5e-mu0o-JUs7-6DZR-iY7N-mjLlOR

创建逻辑卷

运行以下命令:

1
2
lvcreate nvme --name home --size 1G
lvcreate nvme --name neo --size 2G

使用 lvs 或者 lvdisplay 验证结果:

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
--- Logical volume ---
LV Path /dev/nvme/home
LV Name home
VG Name nvme
LV UUID AIBuqQ-d9WQ-h4oV-E33C-Bv8l-SVfI-7ZfPDc
LV Write Access read/write
LV Creation host, time debian, 2022-03-16 11:03:29 +0800
LV Status available
# open 0
LV Size 1.00 GiB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0

--- Logical volume ---
LV Path /dev/nvme/neo
LV Name neo
VG Name nvme
LV UUID YhrLRK-Yc2Y-emEV-02Gm-Qi9n-pW0s-0UXdWs
LV Write Access read/write
LV Creation host, time debian, 2022-03-16 11:04:00 +0800
LV Status available
# open 0
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1

创建文件系统

使用以下命令创建文件系统:

1
2
mkfs.ext4 /dev/nvme/neo
mkfs.ext4 /dev/nvme/home

挂载它:

1
2
mount /dev/nvme/neo /root/neo
mount /dev/nvme/home /home

使用 lsblk 命令查看完整配置:

1
2
3
4
5
6
7
8
9
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 19G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 975M 0 part [SWAP]
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 4G 0 disk
├─nvme-home 254:0 0 1G 0 lvm /home
└─nvme-neo 254:1 0 2G 0 lvm /root/neo

扩展 LVM

添加一块新的 /dev/xvdg 磁盘。要扩展 home 卷,运行以下命令:

1
2
3
4
pvcreate /dev/xvdg
vgextend nvme /dev/xvdg
lvextend -l 100%FREE /dev/nvme/home
resize2fs /dev/nvme/home

运行 df -Th,你应该可以看到新的磁盘大小。

LVM 为你配置存储的方式提供了极大的灵活性。尝试一下,并享受 LVM 的乐趣!

删除逻辑卷步骤

  1. 取消挂载
    umount /home
    umount /root/neo

  2. 取消逻辑卷
    lvremove /dev/nvme/home
    lvremove /dev/nvme/neo

  3. 取消卷组(直接写卷组名称就可以)
    vgremove nvme

  4. 取消物理卷
    pvremove /dev/nvme0n1

  5. 取消/etc/fstab配置文件中对应的挂载信息

作者

孤独小狼

发布于

2022-03-19

更新于

2022-03-19

许可协议

评论