在 KVM 虚拟化系统下,给现有虚拟机扩充硬盘空间
经常会遇到,运行中虚拟主机遇到了硬盘空间不足的问题,那么,如何在现有的 KVM 系统下,为虚拟主机扩充硬盘空间呢。本文即为大家介绍操作的方法。
基本思路
在开始添加前,先要捋一下基本思路。为虚拟主机扩充硬盘,有两个方面,一方面是扩充虚拟主机的磁盘文件的大小,另外一个,就是在虚拟主机的主机系统中,识别并利用上扩充的磁盘空间。
扩充虚拟主机的磁盘文件,有两种做法,一个是直接扩大文件,还有一个,就是添加一个新的磁盘镜像文件。
而在虚拟主机的主机系统中,对扩充的磁盘空间进行识别并利用,主要用到了分区工具和 LVM 的扩充功能,如果虚拟主机中,没用使用 LVM ,那就只能使用直接加载硬盘分区的方式来扩充硬盘了。
本文以下的方法,主要讲述的是,在直接扩大虚拟主机磁盘镜像文件的基础上,借助虚拟主机系统(CentOS 7)的 LVM 功能的扩充功能,在不改变主机文件系统目录结构的情况下,扩充主机的磁盘空间。
扩大虚拟主机的磁盘镜像文件
- 先查看下目标虚拟主机当前的磁盘情况
# virsh domblklist <虚拟机名称>
该命令会列出目标虚拟机当前使用的磁盘镜像文件情况。
- 在宿主机查看虚拟机磁盘镜像文件的情况
# qemu-img info /data/kvm/images/vm1.img
示例:
[root@kvm002 images]# qemu-img info test_vm3.img
image: test_vm3.img
file format: raw
virtual size: 50G (53687091200 bytes)
disk size: 2.3G
- 关闭虚拟机
# virsh shutdown <虚拟机名称>
- 扩大镜像文件的容量(扩大 50G 的容量)
# qemu-img resize /data/kvm/images/vm1.img +50G
示例:
[root@kvm002 images]# qemu-img resize test_vm3.img +50G
Image resized. #扩容成功
- 查看是否成功
# qemu-img info /data/kvm/images/vm1.img
示例:
[root@kvm002 images]# qemu-img info test_vm3.img
image: test_vm3.img
file format: raw
virtual size: 100G (107374182400 bytes)
disk size: 2.3G
扩大虚拟主机系统中的硬盘空间
- 启动虚拟主机
# virsh start <虚拟机名称>
- 连接进入虚拟机,查看系统中的磁盘信息
使用 ssh 或者通过控制台的方式,进入虚拟机系统后,查看系统的磁盘信息。
# lsblk
示例:
[admin@localhost ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 100G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 49G 0 part
├─centos-root 253:0 0 47G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
查看命令的输出,会发现,磁盘块存在未使用的空间。
- 对未使用的磁盘空间进行分区
# fdisk /dev/vda
进入磁盘分区的交互界面后,依次执行以下命令:
m - 打印命令菜单
p - 打印分区表
n - 添加一个新的分区
p - 分区类型选择主分区(primary)
t - 修改分区的系统类型(更改为 Linux LVM)
l - 列出所有的分区类型的代码(8e 为 Linux LVM)
8e - 将分区类型修改为 Linux LVM
p - 打印分区表
w - 将分区表的修改写入并退出
示例:
[root@localhost admin]# fdisk /dev/vda
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
命令(输入 m 获取帮助):p
磁盘 /dev/vda:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a8c59
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 104857599 51379200 8e Linux LVM
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
分区号 (3,4,默认 3):
起始 扇区 (104857600-209715199,默认为 104857600):
将使用默认值 104857600
Last 扇区, +扇区 or +size{K,M,G} (104857600-209715199,默认为 209715199):
将使用默认值 209715199
分区 3 已设置为 Linux 类型,大小设为 50 GiB
命令(输入 m 获取帮助):t ###更改分区类型为Linux LVM
分区号 (1-3,默认 3):
Hex 代码(输入 L 列出所有代码):l
0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris
1 FAT12 27 隐藏的 NTFS Win 82 Linux 交换 / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 隐藏的 C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux 扩展 c7 Syrinx
5 扩展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系统数据
6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 纯文本 de Dell 工具
8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt
9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问
a OS/2 启动管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 扩展 (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC
11 隐藏的 FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq 诊断 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 隐藏的 FAT16 <3 61 SpeedStor ab Darwin 启动 f2 DOS 次要
16 隐藏的 FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 隐藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fd Linux raid 自动
1b 隐藏的 W95 FAT3 70 DiskSecure 多启 bb Boot Wizard 隐 fe LANstep
1c 隐藏的 W95 FAT3 75 PC/IX be Solaris 启动 ff BBT
1e 隐藏的 W95 FAT1 80 旧 Minix
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p ### 打印分区表
磁盘 /dev/vda:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a8c59
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 104857599 51379200 8e Linux LVM
/dev/vda3 104857600 209715199 52428800 8e Linux LVM
命令(输入 m 获取帮助):w ###保存
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
- 刷新虚拟机系统中的分区
# partprobe
将新创建的分区加入逻辑卷中
- 将新添加的分区做成物理卷(PV)
# pvcreate /dev/vda3
添加成功后,可使用 pvdisplay 命令查看一下。
示例:
[root@localhost admin]# pvcreate /dev/vda3
Physical volume "/dev/vda3" successfully created.
[root@localhost admin]# pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 centos lvm2 a-- <49.00g 4.00m
/dev/vda3 lvm2 --- 50.00g 50.00g
- 将新创建的物理卷(PV)合并到要扩容的卷组(VG)中
# vgextend centos /dev/vda3
其中,“centos” 为卷组名,执行成功后,可通过 vgdisplay 命令查看一下情况
[root@localhost admin]# vgextend centos /dev/vda3
Volume group "centos" successfully extended
[root@localhost admin]# vgs # 查看卷组
VG #PV #LV #SN Attr VSize VFree
centos 2 2 0 wz--n- 98.99g 50.00g
- 将需要扩容的逻辑卷进行扩容
在扩容前,可使用 lvdisplay 查看下现有的逻辑卷,确定需要扩容的逻辑卷名,及所在的卷组。
# lvextend -l +100%FREE /dev/mapper/centos-root
以上命令,将卷组所有的剩余可用空间都扩充到 /dev/mapper/centos-root 这个逻辑卷了。可使用 lvdisplay 再次查看一下。
示例:
[root@localhost admin]# lvextend -l +100%FREE /dev/mapper/centos-root
Size of logical volume centos/root changed from 46.99 GiB (12030 extents) to 96.99 GiB (24830 extents).
Logical volume centos/root successfully resized.
- 同步文件系统
# xfs_groufs /dev/mapper/centos-root
centos 7 默认是使用 xfs 文件系统。
至此,虚拟主机的硬盘空间扩容完成。
示例:
[root@localhost admin]# xfs_growfs /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=3079680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=12318720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=6015, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 12318720 to 25425920