背景
生产系统的KVM
虚拟机跑的CetnOS6.10
因为当初部署的时候硬盘只分配了50G,系统也没有使用LVM
进行分区管理,系统内指有一个EXT4的根/
分区,直接挂在所有的磁盘空间;现在空间不足需要对这台CentOS
的磁盘进行扩容,业务限制只能在现有的/
分区上进行扩容;
KVM磁盘状态:虚拟机磁盘容量50GB
CentOS系统分区状态:sda
共50G,/
分区48G
因此我的目标是:希望能实现直接在现有的非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
CentOS 根分区无损扩展
KVM
的磁盘镜像完成扩展后重开机该虚拟机,进入CentOS
系统中用fdisk
和lsblk
命令就可以看到系统已经识别到扩容后的磁盘总容量了
但此时扩充多出来的磁盘空间是属于未分配的剩余空间,并没有增加到任何的磁盘分区中;要把这些多出来的可用空间无损扩展到当前的/
根分区中,就需要用到growpart
这个工具;
安装growpart
工具
#yum install -y epel-release
#yum install -y growpart
执行growpart
指令对需要扩容的分区进行容量扩展操作,如下:
#growpart /dev/sda 2 //参数是要操作的磁盘代号,需要扩容的分区id
#reboot //要重启系统才能识别到新的分区大小
重启系统后,直接执行lsblk
可以看到/
分区已经扩大了,但是df -lh
看分区空间还是没有变
此时只要使用resize2fs
指令对之前growpart
过的分区进行一次重新扫描识别就可以看到正确的分区容量了,如下:
友情提示
/
分区是这块磁盘上的最后一个分区,也就是磁盘扩展后增加的空间是加在附加在磁盘的最后的,所以可以通过growpart
工具修改硬盘的分区表,将这部分空间直接append到最后一个分区(也就是我这里原本/
分区的后面了)所以如果你要扩容的分区在你的系统上,并非是磁盘上的最后一个分区的话,可能无法直接无损扩充分区;请谨慎使用此方法进行操作,发生数据损坏或丢失概不负责!!
4 comments
在准备放弃时候看到这一篇,管用的;就是不同环境安装growpart可能不同,可以先执行“yum list | grep grow”查看一下
[...]https://www.moonfly.net/archives/49.html[...]
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貌似也不可以,难道不支持逻辑卷
https://www.cnblogs.com/yizhipanghu/p/11393185.html