LVM 基础操作:扩容
之前创建的VM只给了32GB的空间,Ubuntu Server默认创建了LVM。后来发现不够大,于是PVE上面给VM加了32GB的空间,但是VM里面还需要进行操作才能使用这部分空间。这篇日志就记录一下这个过程,顺便记录一下LVM的一些基础操作命令。
查看信息
首先扫描一下目前在使用的Logic Volume 和 Physical Volume
$ sudo lvscan
# output:
ACTIVE '/dev/ubuntu-vg/ubuntu-lv' [<31.00 GiB] inherit
$ sudo pvscan
# output:
PV /dev/sda3 VG ubuntu-vg lvm2 [<62.00 GiB / 31.00 GiB free]
Total: 1 [<62.00 GiB] / in use: 1 [<62.00 GiB] / in no VG: 0 [0 ]
可以看到Logical Volume 只有32GB (31 actually),而Physical Volume有64GB (62 actually)(如果PV没有增大,请转去 附录2 部分)。
如果要看更多的信息,要用pvdisplay
和 lvdisplay
$ sudo pvdisplay
# output
--- Physical volume ---
PV Name /dev/sda3
VG Name ubuntu-vg
PV Size <62.00 GiB / not usable 0
Allocatable yes
PE Size 4.00 MiB
Total PE 15871
Free PE 7936
Allocated PE 7935
PV UUID Xab6Y5-ngT4-IhWw-E1kB-GKMf-F4Uz-XXXXXX
$ sudo lvdisplay
# output
--- Logical volume ---
LV Path /dev/ubuntu-vg/ubuntu-lv
LV Name ubuntu-lv
VG Name ubuntu-vg
LV UUID 1oegcQ-9kZO-sgsz-svPc-p18U-IGib-XXXXXX
LV Write Access read/write
LV Creation host, time ubuntu-server, 2023-04-07 22:17:26 +0000
LV Status available
# open 1
LV Size <31.00 GiB
Current LE 7935
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
别忘了LVM里面,将 logical volume 和 Physical Volume 组合起来的中间层: Volume Group
$ sudo vgdisplay
# output
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
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 <62.00 GiB
PE Size 4.00 MiB
Total PE 15871
Alloc PE / Size 7935 / <31.00 GiB
Free PE / Size 7936 / 31.00 GiB
VG UUID iOs22a-Dh2K-zMJU-PVyI-ipsg-fCK9-OxMnXS
这里可以看到,VG实际上是直接就增大了的。
最后看下基础的 fdisk -l
,看一下当前的挂载情况
$ sudo fdisk -l
# output
...
Disk /dev/sda: 64 GiB, 68719476736 bytes, 134217728 sectors
Disk model: QEMU HARDDISK
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: 5A6D46D9-72DA-49F5-88E0-966CEC3E22E2
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 4198399 4194304 2G Linux filesystem
/dev/sda3 4198400 134215679 130017280 62G Linux filesystem
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 31 GiB, 33281802240 bytes, 65003520 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
# Check df -h output
$ df -h
#output
Filesystem Size Used Avail Use% Mounted on
tmpfs 393M 1.7M 391M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 31G 21G 7.9G 73% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 218M 1.6G 12% /boot
tmpfs 393M 8.0K 393M 1% /run/user/1000
结合 df -h
的输出可以看到,从fdisk
看来,/dev/mapper/ubuntu--vg-ubuntu--lv
是真正被 fdisk
当作 disk partition,挂载在根目录下的。而 /dev/sda3
这个分区实际上没有直接挂载。这个分区实际上是被 LVM 当作 PV 了。
扩容
这里用到的是 lvextend
命令。
$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
# output
Size of logical volume ubuntu-vg/ubuntu-lv changed from <31.00 GiB (7935 extents) to <62.00 GiB (15871 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
其中 /dev/ubuntu-vg/ubuntu-lv
是 LV的path。这个是从 lvdisplay
里面拿到的。
而直接使用 lvextend
的条件是,VG上面有多余的空间。因为是PVE环境,VM的harddisk空间直接改变了,所以同一个PV的空间直接变大了,相应的VG就变大了。如果是Bare Metal的环境,通常还需要 pvcreate
给新的磁盘创建PV,然后用 vgextend
把新创建的 PV 加入到 VG 里面。然后才能用 lvextend
使用VG里面的新空间。
到这里还没完,挂载的文件系统目前还不能使用新的空间。File system还没有扩容
- 如果是没有使用LVM的VM,则在PVE里面的Harddisk里面给VM扩容之后,还需要用
growpart
。然后就是下面这一步了。
通常扩展分区(partition),就是直接使用 resize2fs
工具
$ sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
# output:
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 8
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 16251904 (4k) blocks long.
# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 393M 1.7M 391M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 61G 21G 38G 37% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 218M 1.6G 12% /boot
tmpfs 393M 8.0K 393M 1% /run/user/1000
附录:对于没有使用LVM的 Ext4 FS的扩容
同样是Ubuntu VM环境下:
# Use root
sudo -i
# Check the current disk partitions and the current size
fdisk -l
# Call grow part, assume the partition to expand is /dev/sda2, make sure there is no /dev/sda3
# Note the ' ' between 'sda' and '2'.
growpart /dev/sda 2
# Then use resize2fs
resize2fs /dev/sda2
# Check the size now.
fdisk -l
附录2:PV显示没有多余的空间
后续的一次扩容(从64GB到128GB)发现pvdisplay
没有显示多分配出来的空间。故而发现有时直接用 lvextend
肯定是不行的。(参考文章:How to Extend Linux LVM Logical Volume)
- 首先用
fdisk -l /dev/sda
检查一下,确认/dev/sda有128GB,但是 /dev/sda3 只有62GB。 pvdisplay
确认 PV 是用的 /dev/sda3 这个partition 做 physical volume,同样大小只有62GB。
接下来是具体步骤
- 扩容 /dev/sda3,用
cfdisk
$ sudo cfdisk
# Then, use "resize" tool to extend the size of /dev/sda3
# First "write" then "quit"
pvdisplay
验证,这时实际上 PV 的大小还么有变。
- 用
pvresize
扩容 PV
$ sudo pvresize /dev/sda3
# Then use "pvdisplay" 验证 PV 扩容
- 用 lvextend 扩容 LV
$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
- Resize用来做FS的那个 mapper
$ sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv