增加 KVM 虚拟机磁盘容量
在 KVM 中扩展虚拟机磁盘容量分为两步:扩展虚拟磁盘文件 和 扩展虚拟机内的分区和文件系统。
第一步:扩展虚拟磁盘文件
1. 确认虚拟磁盘文件路径
使用以下命令查找虚拟机磁盘文件的位置:
virsh domblklist <虚拟机名称>
示例输出:
Target Source
------------------------------------------------
vda /var/lib/libvirt/images/vm-disk.qcow2
记下磁盘文件路径(例如 /var/lib/libvirt/images/vm-disk.qcow2)。
2. 扩展磁盘文件
假设需要将磁盘扩展为 50 GB,根据磁盘格式选择以下命令:
QCOW2 格式磁盘扩展
qemu-img resize /var/lib/libvirt/images/vm-disk.qcow2 50G
RAW 格式磁盘扩展
qemu-img resize /var/lib/libvirt/images/vm-disk.raw 50G
验证磁盘扩展结果
qemu-img info /var/lib/libvirt/images/vm-disk.qcow2
第二步:扩展虚拟机内的分区和文件系统
1. 启动虚拟机并登录
启动虚拟机:
virsh start <虚拟机名称>
通过控制台或 SSH 登录虚拟机:
virsh console <虚拟机名称>
2. 检查新增磁盘空间
登录虚拟机后,运行以下命令查看磁盘大小是否更新:
lsblk
示例输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 254:0 0 50G 0 disk
└─vda1 254:1 0 20G 0 part /
- vda 是整个磁盘,vda1 是当前分区。
3. 调整分区
比如我现在的分区:
➜ ~ fdisk -l
Disk /dev/vda: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2d23b3e0
Device Boot Start End Sectors Size Id Type
/dev/vda1 2048 39942143 39940096 19G 83 Linux
/dev/vda2 39944190 41940991 1996802 975M 5 Extended
/dev/vda5 39944192 41940991 1996800 975M 82 Linux swap / Solaris
使用 fdisk 扩展分区
启动 fdisk:
fdisk /dev/vda删除原分区(不会丢失数据):
- 输入 d 删除分区,依次删除 /dev/vda2 和 /dev/vda1。
重新创建新分区:
- 输入 n,选择分区类型(默认 primary)。
- 分区号(如 1)。
- 起始扇区和终止扇区(默认使用整个磁盘空间)。
保存分区表并退出:
- 输入 w。
重新加载分区表:
partprobe /dev/vda
4. 扩展文件系统
根据分区的文件系统类型,运行以下命令扩展文件系统:
EXT4 文件系统
resize2fs /dev/vda1
输出:
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/vda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 13
The filesystem on /dev/vda1 is now 26214144 (4k) blocks long.
5. 验证扩展结果
运行以下命令检查扩展后的文件系统大小:
df -h
输出:
文件系统 大小 已用 可用 已用% 挂载点
udev 1.9G 0 1.9G 0% /dev
tmpfs 392M 1.8M 390M 1% /run
/dev/vda1 99G 16G 79G 17% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
overlay 99G 16G 79G 17% /var/lib/docker/overlay2...
...
tmpfs 392M 0 392M 0% /run/user/0
问题
因为原来的 SWAP 分区被删除了, 需要调整 fstab 文件。
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/vda1 during installation
UUID=1a373f29-fa77-43dd-8d01-e8d848b35b11 / ext4 errors=remount-ro 0 1
# swap was on /dev/vda5 during installation
#UUID=efbc7849-ed9c-44ef-b34a-c5b8d7e8bab0 none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
将 swap 的挂在配置注释掉, 因为我也不打算使用 swap.
注意事项
备份数据:扩展磁盘前,请确保虚拟机数据已备份。
LVM 情况: 如果虚拟机使用 LVM,需额外扩展逻辑卷和物理卷: - 扩展物理卷:
pvresize /dev/vda1- 扩展逻辑卷:
lvextend -l +100%FREE /dev/mapper/volume-group-logical-volume- 扩展文件系统:
resize2fs /dev/mapper/volume-group-logical-volume确认文件系统类型:不同文件系统(如 EXT4、XFS)使用不同的扩展命令。
总结
扩展 KVM 虚拟机磁盘容量涉及两个关键步骤:
- 使用 qemu-img 扩展磁盘文件。
- 登录虚拟机,调整分区和文件系统。
