Bootstrap

麒麟桌面系统数据盘扩容记录

本文介绍在麒麟桌面操作系统系统中,对数据盘实现无损扩容的方法。

原由

某应用场景中,系统安装在一块容量较小的磁盘,使用再生龙做成母盘后,还要将其安装到容量大的磁盘上,因此会涉及到磁盘分区扩容问题。此需求是基于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基本对得上。

使用lsblkfdisk查看当前的磁盘情况,输出如下:

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_growfsresize2fs等命令来扩展文件系统,两个命令扩展的文件系统不同,前者针对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管理磁盘分区情况下,可以实现磁盘分区的无损扩容。

;