我在 CentOS KVM 主机上设置了一个 Ubuntu 客户端,初始磁盘空间为 6GB。如何从命令行增加 Ubuntu 客户端的磁盘空间?
编辑#1:我正在使用磁盘映像文件(qemu)。
答案1
- 停止虚拟机
- 运行
qemu-img resize vmdisk.img +10G
以将图像大小增加 10Gb - 启动虚拟机,正常调整其中的分区和 LVM 结构
答案2
在线方法(使用 qemu、libvirt 和 virtio-block)
不管怎样,即使目标虚拟磁盘已挂载,以下命令也会运行。这在磁盘无法卸载(例如根分区)、虚拟机必须保持开启状态且系统所有者愿意承担数据损坏的风险为了消除这种风险,您需要先登录虚拟机并卸载目标磁盘,但这并不总是可行的。
从 KVM 虚拟机管理程序执行以下操作。
增加磁盘映像文件本身的大小(指定要增加的数量):
qemu-img resize <my_vm>.img +10G
通过 libvirt shell 获取 virtio 设备的名称(
drive-virtio-disk0
在此示例中):virsh qemu-monitor-command <my_vm> info block --hmp drive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/<my_vm>.img ro=0 drv=raw encrypted=0 drive-ide0-1-0: removable=1 locked=0 tray-open=0 io-status=ok [not inserted]
向 virtio 驱动程序发出信号以检测新的大小(指定新的总容量):
virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
然后登录虚拟机。运行dmesg
应报告 virtio 磁盘检测到容量变化。此时,继续根据需要调整分区和 LVM 结构的大小。
答案3
这些 serverfault 问题类似,但更具体,KVM 在线调整磁盘大小?&Centos Xen 调整 DomU 分区和卷组的大小。第一个问题是如何在 KVM 客户机在线时增加它,而第二个问题则是使用 LVM 的 XEN 特定问题。我问的是如何在 KVM 离线时完成此操作。
笔记:此链接对于方法 #1 很有用,并展示了如何增加 KVM 的磁盘空间(基于 ext3),如何:调整 KVM 虚拟机映像的大小。
对于 KVM 客户机要注意的一件事是,它们内部使用的分区会影响您可以使用哪种方法来增加其磁盘空间。
方法一:分区基于 ext2/ext3/ext4
该方法的具体内容如下:
# 1. stop the VM
# 2. move the current image
mv mykvm.img mykvm.img.bak
# 3. create a new image
qemu-img create -f raw addon.raw 30G
# 4. concatenate the 2 images
cat mykvm.img.bak addon.raw >> mykvm.img
现在有了更大的 mykvm.img 文件,启动分区并将现有分区扩展到新添加的磁盘空间。这最后一步基本上扩展了操作系统分区,以便它可以利用额外的空间。
方法 2:分区基于 LVM
以下是我大致遵循的调整内部使用 LVM 的 KVM 客户机大小的步骤。
- 关闭虚拟机
- 为客户的“图像文件”添加更多空间(例如:cat old.img 10G_addon.raw >> new.img
- 启动虚拟机(使用新创建的 new.img)
在虚拟机内运行 fdisk 并删除并重新创建 LVM 分区
% fdisk /dev/vda ... Device Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux /dev/vda2 14 3263 26105625 8e Linux LVM Command (m for help): d Partition number (1-4): 2 Command (m for help): p Disk /dev/vda: 48.3 GB, 48318382080 bytes 255 heads, 63 sectors/track, 5874 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (14-5874, default 14): 14 Last cylinder or +size or +sizeM or +sizeK (14-5874, default 5874): Using default value 5874 Command (m for help): p Disk /dev/vda: 48.3 GB, 48318382080 bytes 255 heads, 63 sectors/track, 5874 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux /dev/vda2 14 5874 47078482+ 83 Linux Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Linux LVM) Command (m for help): p Disk /dev/vda: 48.3 GB, 48318382080 bytes 255 heads, 63 sectors/track, 5874 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux /dev/vda2 14 5874 47078482+ 8e Linux LVM Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks. %
重启虚拟机
调整 LVM 物理卷的大小
% pvdisplay --- Physical volume --- PV Name /dev/vda2 VG Name VolGroup00 PV Size 24.90 GB / not usable 21.59 MB Allocatable yes (but full) PE Size (KByte) 32768 Total PE 796 Free PE 0 ... % pvresize /dev/vda2 % pvdisplay --- Physical volume --- PV Name /dev/vda2 VG Name VolGroup00 PV Size 44.90 GB / not usable 22.89 MB Allocatable yes PE Size (KByte) 32768 Total PE 1436 Free PE 640 ...
调整 LVM 逻辑卷的大小
% lvresize /dev/VolGroup00/LogVol00 -l +640 Extending logical volume LogVol00 to 43.88 GB Logical volume LogVol00 successfully resized
扩大文件系统
% resize2fs /dev/VolGroup00/LogVol00 resize2fs 1.39 (29-May-2006) Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required Performing an on-line resize of /dev/VolGroup00/LogVol00 to 11501568 (4k) blocks. The filesystem on /dev/VolGroup00/LogVol00 is now 11501568 blocks long.
以上是我的例子,但我遵循了此步骤网站
答案4
无需停止虚拟机即可进行在线调整大小。libvirtd 原生支持此功能:
查找块设备名称。应该类似于“vda”
$ virsh domblklist <libvirtd_vm_name>
调整虚拟设备的大小:
$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>
下面是我将vda
磁盘从扩展50GB
到VM51GB
的一个例子undercloud
。
[root@localhost ~]# virsh domblklist undercloud
Target Source
------------------------------------------------
vda /home/images/undercloud.qcow2
现在看一下.qcow2 图像文件的详细信息:
[root@localhost ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
现在让我们调整 vda 块设备的大小:
[root@localhost ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized
并确认:
[root@localhost ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 51G (54760833024 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
[root@localhost ~]#
然后,您可以在虚拟机内部使用此脚本来显示调整块设备和 fs 大小的命令:https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh。以下是示例输出:
mvutcovi@ubuntu1904:~$ wget -q https://raw.githubusercontent.com/mircea-vutcovici/scripts/master/vol_resize.sh
mvutcovi@ubuntu1904:~$ df /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 15414216 7928904 6682600 55% /
mvutcovi@ubuntu1904:~$ sudo bash vol_resize.sh --block-device /dev/vda1
sfdisk -d /dev/vda > dev_vda-partition-table-$(date +%F_%H%M%S).txt # Backup MS-DOS partition table for /dev/vda block device.
parted -s /dev/vda resizepart 1 # Resize MS-DOS partition /dev/vda1
# Update kernel with new partition table from disk
partx -u /dev/vda
partprobe /dev/vda
blockdev --rereadpt /dev/vda
kpartx -u /dev/vda
resize2fs /dev/vda1 # Resize ext3 or ext4 filesystem
mvutcovi@ubuntu1904:~$