学习视频推荐
下面这个视频逻辑清晰,还带有操作实例,非常推荐!
什么是 LVM
LVM 是 Logical Volume Manager (逻辑卷管理)的缩写,是 Linux 系统中替代传统基于分区磁盘管理的一种磁盘管理方式。逻辑卷和分区的概念差不多。使用磁盘分区的方式不方便对磁盘容量进行调整,而 LVM 很好的解决了这个问题。
LVM 包含 3 个概念:
- Physical Volume - 物理卷
- Volume Group - 卷组(相当于传统概念中的磁盘)
- Logical Volume - 逻辑卷(相当于传统概念中的分区)
这 3 个概念的关系如下:
物理卷相当于存储空间的一个池子,一个物理卷下可以包含多个卷组,一个卷组下可以又有多个逻辑卷。要想对卷组扩容,卷组所属的物理卷必须要有足够的容量,逻辑卷同理。
Ubuntu 中的 LVM
在安装 ubuntu-20.04.6 桌面系统时记得勾选使用 LVM 的选项。这里遇到个问题,使用 LVM 这个选项只在默认分区下存在,自定义分区时无法指定。
这是本文中使用的安装系统默认分区方案:
可以看到安装系统会默认创建 vgubuntu 这个卷组,然后在这个卷组下创建 root 和 swap_1 两个逻辑卷。
查看 LVM 信息
使用 pvdisplay
查看物理卷信息:
root@kitazono-vm:/home/kitazono# pvdisplay
--- Physical volume ---
PV Name /dev/sda5
# 卷组名称
VG Name vgubuntu
# 物理卷的容量
PV Size <19.50 GiB / not usable 0
Allocatable yes
PE Size 4.00 MiB
Total PE 4991
Free PE 9
Allocated PE 4982
PV UUID SopW29-0S5M-Oe33-ROb5-aBh7-aZXI-RECLAP
PV Size 为物理卷容量,约等于 PE Size x Total PE / 1024。
使用 vgddisplay
查看卷组信息:
root@kitazono-vm:/home/kitazono# vgdisplay
--- Volume group ---
VG Name vgubuntu
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <19.50 GiB
PE Size 4.00 MiB
Total PE 4991
Alloc PE / Size 4982 / 19.46 GiB
Free PE / Size 9 / 36.00 MiB
VG UUID qJWlI2-TS2u-fWHT-DSXz-b60b-6Ka1-mA1XfN
本系统中包含一个卷组,就是安装系统时安装程序创建的默认卷组 vgubuntu,VG Size 约等于 20G。
使用 lvdisplay
查看逻辑卷:
root@kitazono-vm:/home/kitazono# lvdisplay
--- Logical volume ---
LV Path /dev/vgubuntu/root
LV Name root
VG Name vgubuntu
LV UUID dCd3rn-q4yn-QHY1-RWfI-dFkt-XzE6-bIthjK
LV Write Access read/write
LV Creation host, time ubuntu, 2024-07-11 23:59:14 +0800
LV Status available
# open 1
LV Size <18.51 GiB
Current LE 4738
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Logical volume ---
LV Path /dev/vgubuntu/swap_1
LV Name swap_1
VG Name vgubuntu
LV UUID Ru88TV-pasS-4TWp-DjGM-klC7-csnm-A3Pagb
LV Write Access read/write
LV Creation host, time ubuntu, 2024-07-11 23:59:14 +0800
LV Status available
# open 2
LV Size 976.00 MiB
Current LE 244
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
本系统包含 /dev/vgubuntu/root 和 /dev/vgubuntu/swap_1 两个逻辑卷,还可以看到两个逻辑卷的容量、所属卷组等信息。
使用 lsblk
查看磁盘结构:
root@kitazono-vm:/home/kitazono# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 4K 1 loop /snap/bare/5
loop1 7:1 0 63.3M 1 loop /snap/core20/1828
loop2 7:2 0 346.3M 1 loop /snap/gnome-3-38-2004/119
loop3 7:3 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop4 7:4 0 46M 1 loop /snap/snap-store/638
loop5 7:5 0 49.9M 1 loop /snap/snapd/18357
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 19.5G 0 part
├─vgubuntu-root 253:0 0 18.5G 0 lvm /
└─vgubuntu-swap_1 253:1 0 976M 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
其中 sda 对应磁盘,sda5 对应物理卷PV,vgubuntu 对应卷组,vgubuntu-root 和 vgubuntu-swap_1 对应该卷组下的两个逻辑卷。
扩容操作
新增一块 10G 的硬盘,然后重新启动虚拟机。使用 lsblk
查看磁盘:
kitazono@kitazono-vm:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 63.3M 1 loop /snap/core20/1828
loop1 7:1 0 346.3M 1 loop /snap/gnome-3-38-2004/119
loop2 7:2 0 4K 1 loop /snap/bare/5
loop3 7:3 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop4 7:4 0 46M 1 loop /snap/snap-store/638
loop5 7:5 0 49.9M 1 loop /snap/snapd/18357
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 19.5G 0 part
├─vgubuntu-root 253:0 0 18.5G 0 lvm /
└─vgubuntu-swap_1 253:1 0 976M 0 lvm [SWAP]
# 新增的磁盘
sdb 8:16 0 10G 0 disk
sr0 11:0 1 4.1G 0 rom /media/kitazono/Ubuntu 20.04.6 LTS amd64
10G 的新硬盘 sdb 已经识别到了。
使用 pvcreate
创建物理卷:
root@kitazono-vm:/home/kitazono# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
查看物理卷:
root@kitazono-vm:/home/kitazono# pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name vgubuntu
PV Size <19.50 GiB / not usable 0
Allocatable yes
PE Size 4.00 MiB
Total PE 4991
Free PE 9
Allocated PE 4982
PV UUID SopW29-0S5M-Oe33-ROb5-aBh7-aZXI-RECLAP
"/dev/sdb" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID a8qLmc-naFa-LVXu-zABA-kOfU-Wp9j-AV0L4r
/dev/sdb 就是刚才创建的物理卷。
然后使用 vgextend
给 vgubuntu 卷组增加容量:
root@kitazono-vm:/home/kitazono# vgextend vgubuntu /dev/sdb
Volume group "vgubuntu" successfully extended
查看卷组详情:
root@kitazono-vm:/home/kitazono# vgdisplay
--- Volume group ---
VG Name vgubuntu
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 29.49 GiB
PE Size 4.00 MiB
Total PE 7550
Alloc PE / Size 4982 / 19.46 GiB
Free PE / Size 2568 / 10.03 GiB
VG UUID qJWlI2-TS2u-fWHT-DSXz-b60b-6Ka1-mA1XfN
VG size 已经从 20G 增加到了约 30G,Free PE / Size 容量就是新增的磁盘容量。卷组扩容成功之后就可以给逻辑卷扩容了。
先查看一下 root 卷的容量:
root@kitazono-vm:/home/kitazono# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 63.3M 1 loop /snap/core20/1828
loop1 7:1 0 346.3M 1 loop /snap/gnome-3-38-2004/119
loop2 7:2 0 4K 1 loop /snap/bare/5
loop3 7:3 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop4 7:4 0 46M 1 loop /snap/snap-store/638
loop5 7:5 0 49.9M 1 loop /snap/snapd/18357
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 19.5G 0 part
├─vgubuntu-root 253:0 0 18.5G 0 lvm /
└─vgubuntu-swap_1 253:1 0 976M 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
sr0 11:0 1 4.1G 0 rom /media/kitazono/Ubuntu 20.04.6 LTS amd64
vgubuntu-root 此时容量为 18.5G,下面对 vgubuntu-root 扩容 5G。
root@kitazono-vm:/home/kitazono# lvextend -L +5g /dev/vgubuntu/root
Size of logical volume vgubuntu/root changed from <18.51 GiB (4738 extents) to <23.51 GiB (6018 extents).
Logical volume vgubuntu/root successfully resized.
再次查看磁盘容量情况:
root@kitazono-vm:/home/kitazono# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 63.3M 1 loop /snap/core20/1828
loop1 7:1 0 346.3M 1 loop /snap/gnome-3-38-2004/119
loop2 7:2 0 4K 1 loop /snap/bare/5
loop3 7:3 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop4 7:4 0 46M 1 loop /snap/snap-store/638
loop5 7:5 0 49.9M 1 loop /snap/snapd/18357
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 19.5G 0 part
├─vgubuntu-root 253:0 0 23.5G 0 lvm /
└─vgubuntu-swap_1 253:1 0 976M 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
└─vgubuntu-root 253:0 0 23.5G 0 lvm /
sr0 11:0 1 4.1G 0 rom /media/kitazono/Ubuntu 20.04.6 LTS amd64
此时 vgubuntu-root 容量增加到了 23.5 G。
此时如果使用 df -h
查看磁盘容量,会发现 root 分区的容量没有变化,调整逻辑卷的大小之后还要调整文件系统的大小?
root@kitazono-vm:/home/kitazono# df -h
Filesystem Size Used Avail Use% Mounted on
udev 1.9G 0 1.9G 0% /dev
tmpfs 388M 1.9M 386M 1% /run
# 此时还是 19G
/dev/mapper/vgubuntu-root 19G 6.6G 11G 39% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop0 64M 64M 0 100% /snap/core20/1828
/dev/loop1 347M 347M 0 100% /snap/gnome-3-38-2004/119
/dev/loop2 128K 128K 0 100% /snap/bare/5
/dev/loop3 92M 92M 0 100% /snap/gtk-common-themes/1535
/dev/loop5 50M 50M 0 100% /snap/snapd/18357
/dev/loop4 46M 46M 0 100% /snap/snap-store/638
/dev/sda1 511M 4.0K 511M 1% /boot/efi
tmpfs 388M 20K 388M 1% /run/user/1000
/dev/sr0 4.1G 4.1G 0 100% /media/kitazono/Ubuntu 20.04.6 LTS amd64
使用 resize2fs 调整文件系统的大小,如果是 xfs 格式的话使用 xfs_grows。
root@kitazono-vm:/home/kitazono# resize2fs /dev/vgubuntu/root
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/vgubuntu/root is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 3
The filesystem on /dev/vgubuntu/root is now 6162432 (4k) blocks long.
此时再查看磁盘容量:
root@kitazono-vm:/home/kitazono# df -h
Filesystem Size Used Avail Use% Mounted on
udev 1.9G 0 1.9G 0% /dev
tmpfs 388M 1.9M 386M 1% /run
# 容量已经调整为 23 G
/dev/mapper/vgubuntu-root 23G 6.6G 16G 30% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop0 64M 64M 0 100% /snap/core20/1828
/dev/loop1 347M 347M 0 100% /snap/gnome-3-38-2004/119
/dev/loop2 128K 128K 0 100% /snap/bare/5
/dev/loop3 92M 92M 0 100% /snap/gtk-common-themes/1535
/dev/loop5 50M 50M 0 100% /snap/snapd/18357
/dev/loop4 46M 46M 0 100% /snap/snap-store/638
/dev/sda1 511M 4.0K 511M 1% /boot/efi
tmpfs 388M 20K 388M 1% /run/user/1000
/dev/sr0 4.1G 4.1G 0 100% /media/kitazono/Ubuntu 20.04.6 LTS amd64
可以看到 root 分区的容量已经调整为 23G。
创建自己的卷组和逻辑卷
新增一块 5G 的硬盘然后重启虚拟机,然后查看磁盘详情:
root@kitazono-vm:/home/kitazono# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 4K 1 loop /snap/bare/5
loop1 7:1 0 63.3M 1 loop /snap/core20/1828
loop2 7:2 0 346.3M 1 loop /snap/gnome-3-38-2004/119
loop3 7:3 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop4 7:4 0 46M 1 loop /snap/snap-store/638
loop5 7:5 0 49.9M 1 loop /snap/snapd/18357
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 19.5G 0 part
├─vgubuntu-root 253:0 0 23.5G 0 lvm /
└─vgubuntu-swap_1 253:1 0 976M 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
└─vgubuntu-root 253:0 0 23.5G 0 lvm /
# 新增的 5G 硬盘
sdc 8:32 0 5G 0 disk
sr0 11:0 1 4.1G 0 rom /media/kitazono/Ubuntu 20.04.6 LTS amd64
然后创建物理卷:
root@kitazono-vm:/home/kitazono# pvcreate /dev/sdc
Device vgkitazono not found.
Physical volume "/dev/sdc" successfully created.
查看物理卷信息:
root@kitazono-vm:/home/kitazono# pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name vgubuntu
PV Size <19.50 GiB / not usable 0
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4991
Free PE 0
Allocated PE 4991
PV UUID SopW29-0S5M-Oe33-ROb5-aBh7-aZXI-RECLAP
--- Physical volume ---
PV Name /dev/sdb
VG Name vgubuntu
PV Size 10.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 2559
Free PE 1288
Allocated PE 1271
PV UUID a8qLmc-naFa-LVXu-zABA-kOfU-Wp9j-AV0L4r
"/dev/sdc" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID eSW0dn-QU6U-V8vj-KcG1-S6IF-bVBb-M34S4O
第三部分就是刚才创建成功的物理卷。然后再创建新的卷组:
root@kitazono-vm:/home/kitazono# vgcreate vgkitazono /dev/sdc
Volume group "vgkitazono" successfully created
查看卷组信息:
root@kitazono-vm:/home/kitazono# vgdisplay
--- Volume group ---
VG Name vgkitazono
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 <5.00 GiB
PE Size 4.00 MiB
Total PE 1279
Alloc PE / Size 0 / 0
Free PE / Size 1279 / <5.00 GiB
VG UUID JP7PLR-a3Iy-w4ox-zDDO-3eiR-MoPG-zoznfl
--- Volume group ---
VG Name vgubuntu
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 29.49 GiB
PE Size 4.00 MiB
Total PE 7550
Alloc PE / Size 6262 / 24.46 GiB
Free PE / Size 1288 / 5.03 GiB
VG UUID qJWlI2-TS2u-fWHT-DSXz-b60b-6Ka1-mA1XfN
可以看到 vgkitazono 已经创建成功,容量约为 5G。接下来创建一个 2G 的逻辑卷:
root@kitazono-vm:/home/kitazono# lvcreate -L 2g -n kitazono vgkitazono
Logical volume "kitazono" created.
-L 参数指定容量大小,-n 指定逻辑卷名称,最后一个参数是卷组名。
查看此时的逻辑卷信息:
root@kitazono-vm:/home/kitazono# lvdisplay
--- Logical volume ---
LV Path /dev/vgkitazono/kitazono
LV Name kitazono
VG Name vgkitazono
LV UUID UviiLK-ywm0-jTxP-ZtoR-IbDB-M7f3-DCIoah
LV Write Access read/write
LV Creation host, time kitazono-vm, 2024-07-12 01:56:52 +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 253:2
--- Logical volume ---
LV Path /dev/vgubuntu/root
LV Name root
VG Name vgubuntu
LV UUID dCd3rn-q4yn-QHY1-RWfI-dFkt-XzE6-bIthjK
LV Write Access read/write
LV Creation host, time ubuntu, 2024-07-11 23:59:14 +0800
LV Status available
# open 1
LV Size <23.51 GiB
Current LE 6018
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Logical volume ---
LV Path /dev/vgubuntu/swap_1
LV Name swap_1
VG Name vgubuntu
LV UUID Ru88TV-pasS-4TWp-DjGM-klC7-csnm-A3Pagb
LV Write Access read/write
LV Creation host, time ubuntu, 2024-07-11 23:59:14 +0800
LV Status available
# open 2
LV Size 976.00 MiB
Current LE 244
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
可以看到逻辑卷 /dev/vgkitazono/kitazono 已经创建成功,容量为 2G。
逻辑卷创建成功之后还需要使用 mkfs.ex4
进行格式化:
root@kitazono-vm:/home/kitazono# mkfs.ext4 /dev/vgkitazono/kitazono
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 0f25921a-4f2f-4f37-b014-b89fb79f7aeb
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
格式化成功。
创建挂载点:
mkdir /mnt/kitazono
将刚才创建的逻辑卷挂载到挂载点:
mount /dev/vgkitazono/kitazono /mnt/kitazono
挂载完成后再查看磁盘容量信息:
root@kitazono-vm:/home/kitazono# df -h
Filesystem Size Used Avail Use% Mounted on
udev 1.9G 0 1.9G 0% /dev
tmpfs 388M 1.9M 386M 1% /run
/dev/mapper/vgubuntu-root 23G 6.6G 16G 30% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop0 128K 128K 0 100% /snap/bare/5
/dev/loop1 64M 64M 0 100% /snap/core20/1828
/dev/loop2 347M 347M 0 100% /snap/gnome-3-38-2004/119
/dev/loop3 92M 92M 0 100% /snap/gtk-common-themes/1535
/dev/loop4 46M 46M 0 100% /snap/snap-store/638
/dev/loop5 50M 50M 0 100% /snap/snapd/18357
/dev/sda1 511M 4.0K 511M 1% /boot/efi
tmpfs 388M 20K 388M 1% /run/user/1000
/dev/sr0 4.1G 4.1G 0 100% /media/kitazono/Ubuntu 20.04.6 LTS amd64
# 刚才挂载的逻辑卷
/dev/mapper/vgkitazono-kitazono 2.0G 24K 1.8G 1% /mnt/kitazono
2G 容量的逻辑卷就可以正常使用了。
删除操作
删除命令:
- lvremove
- vgremove
- pvremove
卸载逻辑卷:
umount /mnt/kitazono/
删除逻辑卷:
root@kitazono-vm:/home/kitazono# lvremove /dev/vgkitazono/kitazono
Do you really want to remove and DISCARD active logical volume vgkitazono/kitazono? [y/n]: y
Logical volume "kitazono" successfully removed
删除卷组:
root@kitazono-vm:/home/kitazono# vgremove vgkitazono
Volume group "vgkitazono" successfully removed
删除物理卷:
root@kitazono-vm:/home/kitazono# pvremove /dev/sdc
Labels on physical volume "/dev/sdc" successfully wiped.