本文介绍在麒麟桌面操作系统系统中,对数据盘实现无损扩容的方法。
原由
某应用场景中,系统安装在一块容量较小的磁盘,使用再生龙做成母盘后,还要将其安装到容量大的磁盘上,因此会涉及到磁盘分区扩容问题。此需求是基于lvm技术的,麒麟桌面系统支持lvm(但不支持lvm的手动分区),在系统中,会划分出系统盘(盘符或目录为/
)和数据盘(盘符或目录为/data
)两类磁盘空间,现在要做的是,将新的大容量磁盘的剩余空间归到/data目录。
注意,本文所述的扩容,与先前(2022年)在虚拟机对centos扩容是不一样的,那时是因为虚拟机空间不够,单独分配一块磁盘,再扩容的,本次是在已有数据的数据盘上进行扩容。
实践
本节的实践过程,是假定已经将母盘镜像安装到新磁盘上,再进行扩容的。
当前分区分析
使用df
查看当前的分区情况:
test@test-pc:~$ df -lh
文件系统 容量 已用 可用 已用% 挂载点
udev 7.7G 0 7.7G 0% /dev
tmpfs 1.6G 101M 1.5G 7% /run
/dev/mapper/kylin--vg-root 49G 8.4G 38G 19% /
/dev/sda2 2.0G 113M 1.7G 7% /boot
/dev/sda1 511M 288K 511M 1% /boot/efi
/dev/mapper/kylin--vg-data 33G 9.7G 21G 32% /data
tmpfs 7.8G 24K 7.8G 1% /dev/shm
tmpfs 5.0M 8.0K 5.0M 1% /run/lock
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
tmpfs 1.6G 4.0K 1.6G 1% /run/user/1000
从结果看,系统为49GB,数据盘为33GB,加上其它分区占用,总容量与原本的磁盘容量128GB基本对得上。
使用lsblk
和fdisk
查看当前的磁盘情况,输出如下:
test@test-pc:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1.8T 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 116.8G 0 part
├─kylin--vg-root 253:0 0 49.3G 0 lvm /
├─kylin--vg-data 253:1 0 32.9G 0 lvm /data
├─kylin--vg-backup 253:2 0 16G 0 lvm
└─kylin--vg-swap 253:3 0 18.5G 0 lvm [SWAP]
root@test-pc:/home/test# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.34)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助): p
Disk /dev/sda:1.84 TiB,2000398934016 字节,3907029168 个扇区
Disk model: WDC WD20SPZX-00U
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:gpt
磁盘标识符:D04A84AA-1BD7-45BA-8F3A-71FD38094C02
设备 起点 末尾 扇区 大小 类型
/dev/sda1 2048 1050623 1048576 512M EFI 系统
/dev/sda2 1050624 5244927 4194304 2G Linux 文件系统
/dev/sda3 5244928 250068991 244824064 116.8G Linux 文件系统
命令(输入 m 获取帮助): q
使用vgdisplay
查看逻辑卷:
# vgdisplay
--- Volume group ---
VG Name kylin-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 4
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size <116.74 GiB
PE Size 4.00 MiB
Total PE 29885
Alloc PE / Size 29885 / <116.74 GiB
Free PE / Size 0 / 0
VG UUID uDfEBD-94zU-S1sr-m1m0-IWwl-D37h-D9K1qy
从结果看到,逻辑卷大小近120GB,逻辑卷组名称为kylin-vg
,这个名称下文会使用到。
综合上面的结果,可知,当前的新硬盘总容量为1.8TB,数据盘33GB,剩余空间还没有充分利用。
磁盘分区
使用parted
创建分析,当然也可以用fdisk
命令,效果一样。
root@test-pc:/home/test# parted /dev/sda
GNU Parted 3.3
使用 /dev/sda
欢迎使用 GNU Parted!输入 'help' 来查看命令列表。
(parted) mkpart
分区名称? []?
文件系统类型? [ext2]?
起始点? 128G
结束点? -1
(parted) toggle 4 lvm
(parted) q
信息: 你可能需要 /etc/fstab。
注意 ,mkpart
子命令要指定起始点,原来磁盘大小为128GB,则此处也使用该值作为起始点。下面查看结果:
# parted -l | grep lvm
4 128GB 2000GB 1872GB lvm
# fdisk -l
Disk /dev/sda:1.84 TiB,2000398934016 字节,3907029168 个扇区
Disk model: WDC WD20SPZX-00U
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:gpt
磁盘标识符:D04A84AA-1BD7-45BA-8F3A-71FD38094C02
设备 起点 末尾 扇区 大小 类型
/dev/sda1 2048 1050623 1048576 512M EFI 系统
/dev/sda2 1050624 5244927 4194304 2G Linux 文件系统
/dev/sda3 5244928 250068991 244824064 116.8G Linux 文件系统
/dev/sda4 250068992 3907026943 3656957952 1.7T Linux LVM
对比上一次fdisk
的结果,可以看到创建了新的分区/dev/sda4
。
执行下面命令将其生效:
sudo partprobe
创建物理卷(pv)
创建物理卷,使用刚刚新建的分区/dev/sda4
。
root@test-pc:/home/test# sudo pvcreate /dev/sda4
Physical volume "/dev/sda4" successfully created.
扩展卷组(vg)
即将sda4
添加到卷组(Volume group)中,卷组名为kylin-vg
。
root@test-pc:/home/test# sudo vgextend kylin-vg /dev/sda4
Volume group "kylin-vg" successfully extended
查看扩容后的逻辑卷信息:
# sudo vgs
VG #PV #LV #SN Attr VSize VFree
kylin-vg 1 4 0 wz--n- 116.74g 0 # 注意,此处空余大小为0
root@test-pc:/home/test# sudo vgs
VG #PV #LV #SN Attr VSize VFree
kylin-vg 2 4 0 wz--n- <1.82t 1.70t # 注意,此处空余空间为1.7t
# sudo pvcreate /dev/sda4
Physical volume "/dev/sda4" successfully created.
# vgextend kylin-vg /dev/sda4
Volume group "kylin-vg" successfully extended
root@test-pc:/home/test# sudo vgs
VG #PV #LV #SN Attr VSize VFree
kylin-vg 2 4 0 wz--n- <1.82t 138.25g # 扩容后,空余大小为实际硬盘的(但小一些)
root@test-pc:/home/test# vgdisplay
--- Volume group ---
VG Name kylin-vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 8
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 4
Open LV 3
Max PV 0
Cur PV 2
Act PV 2
VG Size <1.82 TiB
PE Size 4.00 MiB
Total PE 476290
Alloc PE / Size 29885 / <116.74 GiB
Free PE / Size 446405 / 1.70 TiB
VG UUID uDfEBD-94zU-S1sr-m1m0-IWwl-D37h-D9K1qy
对比前后两次执行vgdisplay
命令的结果,Free PE / Size
一行对应的值已经发生变化,目前空余大小为1.7TiB。为安全起见,没有所有空间都扩容到数据盘,而是使用1.7TiB空间,执行lvextend
扩容:
root@test-pc:/home/test# sudo lvextend -L 1.6T /dev/kylin-vg/data
Rounding size to boundary between physical extents: 1.60 TiB.
Size of logical volume kylin-vg/data changed from <32.89 GiB (8419 extents) to 1.60 TiB (419431 extents).
Logical volume kylin-vg/data successfully resized.
注意,使用lvextend
命令只是扩展了lv的大小,还没有到文件系统这一层,因此,还要用xfs_growfs
或resize2fs
等命令来扩展文件系统,两个命令扩展的文件系统不同,前者针对xfs文件系统,后者针对ext4文件系统。
本文件使用resize2fs
对文件系统扩容:
root@test-pc:/home/test# sudo resize2fs /dev/kylin-vg/data
resize2fs 1.45.5 (07-Jan-2020)
/dev/kylin-vg/data 上的文件系统已被挂载于 /data;需要进行在线调整大小
old_desc_blocks = 5, new_desc_blocks = 205
/dev/kylin-vg/data 上的文件系统现在为 429497344 个块(每块 4k)。
查看扩容后大小
再次使用df
查看分区空间大小:
root@test-pc:/home/test# df -h
文件系统 容量 已用 可用 已用% 挂载点
udev 7.8G 0 7.8G 0% /dev
tmpfs 1.6G 30M 1.6G 2% /run
/dev/mapper/kylin--vg-root 49G 8.2G 38G 18% /
/dev/sda2 2.0G 107M 1.7G 6% /boot
/dev/sda1 511M 288K 511M 1% /boot/efi
/dev/mapper/kylin--vg-data 1.6T 8.8G 1.6T 1% /data
tmpfs 7.8G 24K 7.8G 1% /dev/shm
tmpfs 5.0M 8.0K 5.0M 1% /run/lock
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
tmpfs 1.6G 0 1.6G 0% /run/user/1000
扩容前数据盘大小:
/dev/mapper/kylin--vg-data 33G 9.7G 21G 32% /data
扩容后数据盘大小:
/dev/mapper/kylin--vg-data 1.6T 8.8G 1.6T 1% /data
小结
麒麟桌面系统使用lvm管理磁盘分区情况下,可以实现磁盘分区的无损扩容。