KVM虚拟机磁盘扩容+Linux根分区数据无损扩容(非LVM)

背景

生产系统的KVM虚拟机跑的CetnOS6.10因为当初部署的时候硬盘只分配了50G,系统也没有使用LVM进行分区管理,系统内指有一个EXT4的根分区,直接挂在所有的磁盘空间;现在空间不足需要对这台CentOS的磁盘进行扩容,业务限制只能在现有的/分区上进行扩容;

KVM磁盘状态:虚拟机磁盘容量50GB
LVM-disk.png

CentOS系统分区状态:sda共50G,/分区48G
CetnOS-disk.png

因此我的目标是:希望能实现直接在现有的非LVM管理的常规分区上实现数据无损的空间扩容;

找了一圈的资料后发现所有讲Linux分区扩容的方案都要么是通过LVM动态卷进行扩展,要么是将新增的磁盘容量作为第二个磁盘或分区额外mount到系统进行使用,这两种方式都不能满足我的需求;

差点就要放弃了,毕竟想要直接在现有分区上实现数据无损的空间扩容,涉及分区表的修改以及分区格式的问题,认为技术上可能还是非常有难度的,差点就要放弃了;不过追求完美的我最后还是找到了完美的解决方案,开始动手

KVM raw 磁盘空间扩容

KVM磁盘扩容相对比较容易,qemu-img命令可以通过resize选项对raw格式的虚拟磁盘镜像文件增或减小虚拟磁盘的容量,但对qcow2的格式时只能增加容量,不支持缩减容量;如果需要缩减必须先将磁盘格式从qcow2转换为raw之后才可以缩减;

使用如下指令对虚拟机的磁盘镜像文件,扩充100G空间(+为增加空间,-为缩减空间,单位支持KB,GB,MB)

#qemu-img resize NeoKylin417.qcow2 +100G

切记一定要将虚拟机关机后在对磁盘进行进行扩容操作,否则会有磁盘数据损坏风险

扩充后查看磁盘镜像信息,在KVM中显示此磁盘镜像的虚拟磁盘容量已经变成了150G
kvm-img-resize.png

CentOS 根分区无损扩展

KVM的磁盘镜像完成扩展后重开机该虚拟机,进入CentOS系统中用fdisklsblk命令就可以看到系统已经识别到扩容后的磁盘总容量了
rsize-Centos-disk.png

但此时扩充多出来的磁盘空间是属于未分配的剩余空间,并没有增加到任何的磁盘分区中;要把这些多出来的可用空间无损扩展到当前的/根分区中,就需要用到growpart这个工具;

安装growpart工具

#yum install -y epel-release
#yum install -y growpart

执行growpart指令对需要扩容的分区进行容量扩展操作,如下:

#growpart /dev/sda 2    //参数是要操作的磁盘代号,需要扩容的分区id
#reboot                 //要重启系统才能识别到新的分区大小

CentOS-growpart.png

重启系统后,直接执行lsblk可以看到/分区已经扩大了,但是df -lh看分区空间还是没有变
Centos-lsblk.png

此时只要使用resize2fs指令对之前growpart过的分区进行一次重新扫描识别就可以看到正确的分区容量了,如下:
CentOS-resize-root.png

友情提示

注意:本次在CentOS中扩容的/分区是这块磁盘上的最后一个分区,也就是磁盘扩展后增加的空间是加在附加在磁盘的最后的,所以可以通过growpart工具修改硬盘的分区表,将这部分空间直接append到最后一个分区(也就是我这里原本/分区的后面了)所以如果你要扩容的分区在你的系统上,并非是磁盘上的最后一个分区的话,可能无法直接无损扩充分区;请谨慎使用此方法进行操作,发生数据损坏或丢失概不负责!!

Last modification:March 10th, 2019 at 01:34 am
If you think my article is useful to you, please feel free to appreciate

3 comments

  1. [...]https://www.moonfly.net/archives/49.html[...]

  2. CentOS7宿主机
    [root@office-prd-kvm-01 networks]# qemu-img info /home/office-com-ldap-01/office-com-ldap-01.system.qcow2 |grep "virtual"
    virtual size: 15G (16106127360 bytes)
    kvm虚拟机
    [root@office-com-ldap-01 ~]# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sr0 11:0 1 1024M 0 rom
    vda 252:0 0 15G 0 disk
    ├─vda1 252:1 0 1G 0 part /boot
    └─vda2 252:2 0 9G 0 part
    ├─centos-root 253:0 0 8G 0 lvm /
    └─centos-swap 253:1 0 1G 0 lvm
    [root@office-com-ldap-01 ~]# df -Th
    文件系统 类型 容量 已用 可用 已用% 挂载点
    /dev/mapper/centos-root xfs 8.0G 1.3G 6.8G 16% /
    devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
    tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
    tmpfs tmpfs 1.9G 8.5M 1.9G 1% /run
    tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
    /dev/vda1 xfs 1014M 145M 870M 15% /boot
    tmpfs tmpfs 181M 0 181M 0% /run/user/0
    [root@office-com-ldap-01 ~]# growpart /dev/vda 2
    NOCHANGE: partition 2 is size 29358047. it cannot be grown
    使用lsdisk貌似也不可以,难道不支持逻辑卷

    1. 帅哥
      @张

      https://www.cnblogs.com/yizhipanghu/p/11393185.html

Leave a Comment