Answers:
qemu-img resize vmdisk.img +10G
以将图像大小增加10Gbstart the VM, resize the partitions and LVM structure within it normally
怎么做?请解释一下。
不管是好是坏,即使安装了目标虚拟磁盘,下面的命令也会运行。在无法卸载磁盘(例如根分区),VM必须保留且系统所有者愿意承担数据损坏风险的环境中,这很有用。要消除这种风险,您需要先登录VM并卸载目标磁盘,但这并非总是可能的。
从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结构的大小。
这些serverfault问题类似,但更具体,KVM在线磁盘大小是否调整?&Centos Xen调整DomU分区和卷组的大小。第一个询问如何在线增加KVM guest虚拟机的问题,第二个询问使用LVM的XEN专用。我问KVM离线时如何完成此操作。
注意:此链接对方法#1有用,并且显示了如何完成增加KVM的磁盘空间(基于ext3),方法:调整KVM虚拟机映像的大小。
KVM guest虚拟机要注意的一件事是,它们在内部使用的分区会影响您可以使用哪种方法来增加其磁盘空间。
方法1:分区基于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文件,启动gparted并将现有分区扩展到新添加的磁盘空间中。最后一步基本上扩展了OS分区,以便可以利用额外的空间。
方法2:分区基于LVM
这是我大致遵循的步骤,以调整内部使用LVM的KVM来宾的大小。
在VM内运行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.
以上是我的示例,但我按照此网站上的步骤进行操作
virt-manager
在将我们的KVM服务器迁移到KVM的较新版本(CentOS 5-> CentOS 6)之前,我广泛使用并使用了方法#1和#2。我现在也使用该qemu-img resize
方法。
lvextend /dev/Volgroup/lvname /dev/vda2
handier :(全部位于一行中,其中/ dev / vda2将是您的物理卷)。如果没有其他选择,它将使用该卷组中的最大大小。
一步调整和扩展内部分区
我有一台带有qcow2 guest虚拟机文件映像的Ubuntu主机,想要一步调整磁盘大小并扩展适当的分区。它要求您设置libvirt guest虚拟机文件系统实用程序,但是无论如何都具有实用性。
来自这里的启示:http : //libguestfs.org/virt-resize.1.html
此处的关键命令是: virt-resize
制备:
* Install libvirt file system utilities package
* sudo apt-get install libguestfs-tools
* Test to see if it works (it won't) -- you need to see "===== TEST FINISHED OK =====" at the bottom:
* sudo libguestfs-test-tool
* If you don't see "===== TEST FINISHED OK =====" at the bottom then repair it:
* sudo update-guestfs-appliance
* Run the test again and verify it works
* sudo libguestfs-test-tool
现在执行以下操作:
1)关闭来宾:
2)检查当前的大小并使用libvirt实用程序查看要扩展的分区名称:
sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file
3)创建新的(40G)输出磁盘:
qcow: sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G
img: sudo truncate -s 40G outdisk
4)在扩展适当的分区的同时将旧分区复制到新分区(假设您从步骤2开始的磁盘分区为/ dev / sda1):
sudo virt-resize --expand /dev/sda1 indisk outdisk
5)将indisk文件重命名为备份,将outdisk重命名为indisk(或修改来宾XML)
6)重新启动来宾并仔细测试新磁盘文件,然后再删除原始文件
7)利润!
-o preallocation=metadata
创建一个稀疏文件。使用该选项,它将预分配整个大小。
-o preallocation=metadata
,如果不需要,也应该跳过此truncate
步骤。 virt-resize
无论如何都会增加文件的大小。
如果要在VM内使用LVM,最简单的方法是将新的虚拟磁盘添加到VM并在其上扩展卷组和逻辑卷。
要检查您是否正在使用LVM run sudo pvs; sudo vgs; sudo lvs
,您将得到以下信息:
PV VG Fmt Attr PSize PFree
/dev/vda1 vgWWW lvm2 a- 30.00g 0
VG #PV #LV #SN Attr VSize VFree
vgWWW 1 2 0 wz--n- 30.00g 0
LV VG Attr LSize
root vgWWW -wi-ao 28.80g
swap vgWWW -wi-ao 1.19g
如果VM的操作系统正在使用LVM。在上面的示例中,VM具有一个30GB的虚拟磁盘,该虚拟磁盘使用LVM配置,其中一个名为vgWWW的卷组包含两个逻辑卷,一个逻辑卷用于交换,另一个逻辑卷用于其他所有。
如果VM中使用了LV:
sudo pvcreate /dev/vdb
sudo vgextend vgWWW /dev/vdb
sudo lvextend --extents +100%FREE /dev/vgWWW/root
(或者sudo lvextend --size +8G /dev/vgWWW/root
如果您不希望将其完全扩展,则该示例将为该卷增加8Gb)resize2fs /dev/vgWWW/root
注意:以上假设vg / lv名称与我的示例相同,这不太可能,请适当更改,如果VM已经有一个名为vdb
new 的虚拟驱动器,它将是其他名称(vdc
,依此类推)
注意: resize2fs
仅适用于ext2,ext3和ext4文件系统。如果您使用其他东西,它将出错并且什么也不做。
注意:由于您要调整活动文件系统的大小,resize2fs
因此不会像提示fsck
已卸载文件系统那样提示您首先运行,它将继续进行。您可能要运行只读文件系统检查,然后再进行操作。
可以在线调整大小。libvirtd本机支持:
查找块设备名称。应该是“ vda”之类的东西
$ virsh domblklist <libvirtd_vm_name>
调整虚拟设备的大小:
$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>
这里是被我展开一个例子vda
,从磁盘50GB
到51GB
了undercloud
虚拟机。
[root@gss-rhos-4 ~]# virsh domblklist undercloud
Target Source
------------------------------------------------
vda /home/images/undercloud.qcow2
现在看一下.qcow2图像文件的详细信息:
[root@gss-rhos-4 ~]# 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@gss-rhos-4 ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized
并确认:
[root@gss-rhos-4 ~]# 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@gss-rhos-4 ~]#
然后,您可以在VM中使用此脚本来显示用于调整块设备和fs大小的命令:https : //github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh。
如果您使用virtio驱动器和LVM,则可以在不重新引导VM的情况下增加VM磁盘的大小。
(可选)使用fdisk创建一个主分区以获取/ dev / vdb1,然后使用kpartx -a / dev / vdb重新读取分区表
使用vgextend vg_name / dev / vdb1(如果未创建分区,则使用/ dev / vdb)
你完成了。
这样,您可以扩展所需的分区:
# see what partitions you have?
virt-filesystems --long -h --all -a olddisk
truncate -r olddisk newdisk
truncate -s +5G newdisk
# Note "/dev/sda2" is a partition inside the "olddisk" file.
virt-resize --expand /dev/sda2 olddisk newdisk
在这里查看更多示例。
如果您的VM中有LVM,那么这非常容易且快捷。
sudo system-config-lvm
终端)*。我发现GUI非常直观,但是如果遇到问题,请按照以下步骤操作。
注意!至少默认情况下未安装CentOS 6 LVM GUI,但是您可以使用进行安装yum install system-config-lvm
。
调整图片大小:
qemu-img resize vmdisk.img +16G
将图像大小增加16 GB。
如果您的映像具有GPT(GUID分区表),则GPT中使用的驱动器大小将与新大小不同,您需要使用以下方法进行修复gdisk
:
MY_DRIVE=/dev/vda
gdisk $MY_DRIVE <<EOF
w
Y
Y
EOF
或搭配parted
:
parted $MY_DRIVE print Fix
由于某种原因,parted
当不显示tty时(例如,使用Vagrant进行配置时),修复无法正常工作,因此我使用gdisk
。
增加分区大小以填充所有可用空间:
MY_PARTITION_GUID=$(
gdisk $MY_DRIVE <<EOF | sed -n -e 's/^Partition unique GUID: //p'
i
EOF
)
MY_PARTITION_FIRST_SECTOR=$(
gdisk $MY_DRIVE <<EOF | sed -n -e 's/^First sector: \([0-9]\+\).*/\1/p'
i
EOF
)
gdisk $MY_DRIVE <<EOF
d
n
$MY_PARTITION_FIRST_SECTOR
x
a
2
c
$MY_PARTITION_GUID
w
Y
EOF
该x a 2 <Enter>
部分是可选的,如果您使用旧版BIOS,则该部分是必需的。
MY_PARTITION_GUID=...
并且c $MY_PARTITION_GUID
部件也是可选的,并且仅当您在/etc/fstab
其他地方或其他地方使用分区UUID时才需要。
重新启动或重新读取分区partx -u $MY_DRIVE
或partprobe
。
延伸分区,例如用于ext2
,ext3
或ext4
:
MY_PARTITION="${MY_DRIVE}1"
resize2fs $MY_PARTITION
您可以在已安装gparted的情况下使用solus vm。与gparted一起使用后,您可以轻松启动系统并调整空间。确保设置了正确的启动优先级。作为参考,请参考以下可能方便的网址。 https://greencloudvps.com/knowledgebase/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgrading-VPS.html