1.查看磁盘占用
root@wwyt-prod06-hlsh:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 793M 50M 744M 7% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 29G 29G 0 100% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda2 976M 108M 802M 12% /boot
/dev/loop0 72M 72M 0 100% /snap/lxd/16099
/dev/loop1 45M 45M 0 100% /snap/snapd/15534
/dev/loop2 68M 68M 0 100% /snap/lxd/22753
/dev/loop3 44M 44M 0 100% /snap/snapd/15177
/dev/loop4 62M 62M 0 100% /snap/core20/1405
/dev/loop5 55M 55M 0 100% /snap/core18/1880
/dev/loop6 62M 62M 0 100% /snap/core20/1376
/dev/loop7 56M 56M 0 100% /snap/core18/2344
发现磁盘已占满,需要扩容;
在 Linux 系统中,我们经常使用 LVM (逻辑卷管理)的方式去管理和使用磁盘, LVM 可以动态扩容,给我们的使用带来了很多的便捷性。
- 物理卷(Physical Volume,PV)
指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。- 卷组(Volume Group,VG)
类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。- 逻辑卷(Logical Volume,LV)
类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。LVM结构图如下:
2.查看系统卷组:
root@wwyt-prod06-hlsh:~# vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size <59.00 GiB
PE Size 4.00 MiB
Total PE 15103
Alloc PE / Size 7552 / 29.50 GiB
Free PE / Size 7551 / <29.50 GiB
VG UUID P0V2bc-ClZT-rZXH-P8RU-fT4R-Jrhx-176qNw
其中,Free PE / Size 7551 / <29.50 GiB 是剩余还可使用的空间
如果逻辑卷剩余空间不足,则需要扩容逻辑卷VG(参考 2.1 ~ 2.5):
2.1 查看物理磁盘,
指令 fdisk -l
发现还有一个空闲的磁盘/dev/vdb1可使用,如果vdb未分区,则需要使用fdisk指令手动分区
root@skyf:/var/lib/docker# fdisk -l
Disk /dev/vda: 200 GiB, 214748364800 bytes, 419430400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 2A1BBC7F-6EE3-40DB-A5BD-6272620386FF
Device Start End Sectors Size Type
/dev/vda1 2048 4095 2048 1M BIOS boot
/dev/vda2 4096 2101247 2097152 1G Linux filesystem
/dev/vda3 2101248 419428351 417327104 199G Linux filesystem
Disk /dev/vdb: 1 TiB, 1099511627776 bytes, 2147483648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x65e59086
Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 2147483647 2147481600 1024G 83 Linux
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 198 GiB, 212600881152 bytes, 415236096 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
2.2 查看pv
指令 pvs
此时PV只有一个/dev/vda3
所以VG也只有一个ubuntu-vg
root@skyf:~# pvs
PV VG Fmt Attr PSize PFree
/dev/vda3 ubuntu-vg lvm2 a-- <199.00g 1020.00m
2.3 创建新PV
如果是新磁盘,可能需要手动先创建分区,例如 fdisk /dev/vdb
命令:pvcreate /dev/vdb1
并查看到新增的/dev/vdb1 容量为1024G
root@skyf:/# pvcreate /dev/vdb1
WARNING: ext4 signature detected on /dev/vdb1 at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/vdb1.
Physical volume "/dev/vdb1" successfully created.
2.4 再次查看pv
可以看到多了一条大小为1024g未绑定vg的pv
root@skyf:/# pvs
PV VG Fmt Attr PSize PFree
/dev/vda3 ubuntu-vg lvm2 a-- <199.00g 1020.00m
/dev/vdb1 lvm2 --- <1024.00g <1024.00g
2.5 扩容VG
指令 vgextend ubuntu-vg /dev/vdb1
把新建的pv:/dev/vdb1 扩容给vg:ubuntu-vg,
并比对前后信息可以看到一条名为ubuntu-vg的VG,大小从199g扩容到1.19t
root@skyf:/# vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- <199.00g 1020.00m
root@skyf:/# vgextend ubuntu-vg /dev/vdb1
Volume group "ubuntu-vg" successfully extended
root@skyf:/# vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 2 1 0 wz--n- 1.19t 1.00t
至此,逻辑卷VG扩容成功。
3.再次查看系统卷组
root@wwyt-prod06-hlsh:~# vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size <59.00 GiB
PE Size 4.00 MiB
Total PE 15103
Alloc PE / Size 12800 / 50.00 GiB
Free PE / Size 2303 / <9.00 GiB
VG UUID P0V2bc-ClZT-rZXH-P8RU-fT4R-Jrhx-176qNw
4.执行扩容指令(示例):
root@wwyt-prod06-hlsh:~# lvextend -L 50G /dev/mapper/ubuntu--vg-ubuntu--lv //增大至50G
Size of logical volume ubuntu-vg/ubuntu-lv changed from 49.50 GiB (12672 extents) to 50.00 GiB (12800 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
// 更多指令参考
// lvextend -L +100G /dev/mapper/ubuntu--vg-ubuntu--lv //直接增加100GB
5.重新计算磁盘大小
root@wwyt-prod06-hlsh:~# resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 7
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 13107200 (4k) blocks long.
6.再次查看磁盘情况
root@wwyt-prod06-hlsh:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 793M 1.6M 792M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 50G 29G 19G 61% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda2 976M 108M 802M 12% /boot
/dev/loop2 56M 56M 0 100% /snap/core18/2344
/dev/loop3 72M 72M 0 100% /snap/lxd/16099
/dev/loop1 62M 62M 0 100% /snap/core20/1405
/dev/loop0 62M 62M 0 100% /snap/core20/1376
/dev/loop4 55M 55M 0 100% /snap/core18/1880
/dev/loop5 68M 68M 0 100% /snap/lxd/22753
/dev/loop6 45M 45M 0 100% /snap/snapd/15534
/dev/loop7 44M 44M 0 100% /snap/snapd/15177
tmpfs 793M 0 793M 0% /run/user/0