每次扩容磁盘都会忘记是怎么操作的,所以记录一下,本身 VirtualBox (这篇文章同样也适用于VMware虚拟机) 扩展磁盘容量非常简单,可以直接图形化操作,但是使用了LVM的系统(比如 Ubuntu 22.04)操作要稍麻烦些。
扩完容量之后可以用命令 fdisk -l
查看:
可以看到现在我的物理磁盘 /dev/nvme0n1
已经被我扩容到了 13G,但实际分区还是之前的大小,扩展出来的空间目前属于未分配空间,可以用命令 fdisk /dev/nvme0n1
然后输入 F
进一步看到当前磁盘未分配空间大小是 3G:
如果是传统的分区,到这里可以使用 fdisk
删除老的 /dev/nvme0n3
然后再新建一个 /dev/nvme0n3
分区即可以实现对分区的扩容,或者另创建一个新分区/dev/nvme0n4
,也可以使用类似 GParted 的图形化工具来操作,但对于使用了 LVM 的逻辑卷扩容操作稍微不同。
在进行操作之前先简单介绍下 Linux LVM,以下内容来自百度百科:
LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的存储卷,在存储卷上建立文件系统。首先我们讨论以下几个LVM术语:
-
物理存储介质(PhysicalStorageMedia)
指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。 -
物理卷(Physical Volume,PV)
指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。 -
卷组(Volume Group,VG)
类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。 -
逻辑卷(Logical Volume,LV)
类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。 -
物理块(Physical Extent,PE)
PE是物理卷PV的基本划分单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。 -
逻辑块(Logical Extent,LE)
逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
上图所示LVM抽象模型,展示了PV、VG、LV三者之间关系:
和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容:PV描述符、VG描述符、LV描述符、和一些PE描述符。
系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。
查看自己的磁盘分区是否启用了 LVM 可以用命令 lsblk
查看:
先使用命令 fdisk /dev/nvme0n1
在磁盘未分配空间上创建一个新分区 /dev/nvme0n1p4
,
先输入 p
查看已有分区:
受益于LVM物理分区和逻辑卷之间的隔离,这里并不需要把扩容的空间追加到老的分区/dev/nvme0n1p3
上,直接创建一个新分区并加入LVM卷组最终实现的效果是一样的,输入 n
创建新分区,数字输入 4
,大小默认就是磁盘所有未分配的容量,这样就创建了新分区/dev/nvme0n1p4
,大小是 3GB:
最后输入 w
保存退出,如果期间操作有误输入 q
退出并放弃所有修改,然后再重新操作。
再次用 lsblk
看下:
这里先说几个简单的关于 LVM 操作的命令:
vgdisplay
: 显示当前的物理卷组
vgextend
: 把一个物理卷加入到卷组
pvdisplay
: 显示当前的物理卷
pvcreate
: 创建物理卷,一个物理卷可以是整个磁盘,也可以是一个磁盘分区
lvdisplay
: 显示当前的逻辑卷
lvextend
: 给一个逻辑卷增加空间
当前的卷组 ubuntu-vg
大小是 7.72GB,只有一个物理卷 /dev/nvme0n1p3
,大小也是 7.72GB,我们现在来创建一个新物理卷:
把新创建的物理卷加入卷组 ubuntu-vg
:
操作之后卷组就多出来了3GB的空闲PE,接下来就可以使用 lvextend
命令来扩展逻辑卷的大小:
-l +100%FREE
表示用当前卷组中所有可用的空间来扩容
再来看下逻辑卷大小:
最后使用命令 resize2fs
(ex2/ext3/ext4文件系统) 或者 xfs_growfs (XFS文件系统) 来扩展文件系统大小,否则 df -h
看到的还是原来的大小
文件系统类型可以在 mount
里看到:
至此就完成了创建磁盘分区和逻辑卷的扩容, 逻辑卷 ubuntu--vg-ubuntu--lv
底层基于两个物理卷。