有没有办法调整虚拟机的磁盘大小?比如将磁盘从32GB增加到64GB。我在运行Ubuntu server 11.10 64位上的KVM/Qemu。谢谢。
virt-resize
。现在它几乎可以处理所有事情了。假设你的镜像叫做Win7(为什么不呢?)。首先确保你的虚拟机已经关闭:# apt-get install libguestfs-tools
# virsh dumpxml Win7 | xpath -e /domain/devices/disk/source
Found 2 nodes in stdin:
-- NODE --
<source file="/var/lib/libvirt/images/Win7.img" />
-- NODE --
<source file="/var/lib/libvirt/images/Win7.iso" />
# virt-filesystems --long --parts --blkdevs -h -a /var/lib/libvirt/images/Win7.img
Name Type MBR Size Parent
/dev/sda1 partition 07 100M /dev/sda
/dev/sda2 partition 07 32G /dev/sda
/dev/sda device - 32G -
# truncate -s 64G /var/lib/libvirt/images/outdisk
# virt-resize --expand /dev/sda2 /var/lib/libvirt/images/Win7.img /var/lib/libvirt/images/outdisk
Examining /var/lib/libvirt/images/Win7.img ...
100% [progress bar] --:--
**********
Summary of changes:
/dev/sda1: This partition will be left alone.
/dev/sda2: This partition will be resized from 32G to 64G. The
filesystem ntfs on /dev/sda2 will be expanded using the
'ntfsresize' method.
**********
Setting up initial partition table on outdisk ...
Copying /dev/sda1 ...
Copying /dev/sda2 ...
100% [progress bar] 00:00
100% [progress bar] 00:00
Expanding /dev/sda2 using the 'ntfsresize' method ...
Resize operation completed with no errors. Before deleting the old
disk, carefully check that the resized disk boots and works correctly.
mv
命令):# cp /var/lib/libvirt/images/Win7.img /var/lib/libvirt/images/Win7.img.old
# mv /var/lib/libvirt/images/outdisk /var/lib/libvirt/images/Win7.img
qemu-img resize foo.qcow2 +32G
现在您的客人可以看到一个更大的磁盘,但仍然有旧的分区和文件系统。
2)使磁盘映像内的分区变大。您需要在客人中使用LiveCD引导此操作,因为您无法干扰已挂载的分区。这是相当复杂和可能是最危险的部分。这里要复制的内容很多,所以我现在只会提供链接。您需要执行类似于以下操作:
http://www.howtoforge.com/linux_resizing_ext3_partitions_p2
或者2b)如果你只是想要更多的存储空间,创建一个新分区会更简单(和更安全)。 使用fdisk或cfdisk,或者你觉得舒服的任何工具 - 现在你应该可以看到你的虚拟磁盘上一大堆未分配的空间。
3)最后,如果你调整了现有的分区大小,请将新的更大分区内的文件系统也调整为更大(实际上,在上面提到的指南中已经有解释了)。 在你的虚拟机中:
resize2fs /dev/sda1
dd if=/dev/zero of=disk.img bs=1c seek=4G count=0
fdisk disk.img
p
以打印分区表并查找分区的起始扇区,例如分区2从扇区106496开始。d
并给出要删除的分区号码。(咽口水!)n
并给出所需的分区号码,然后输入起始扇区。您必须使用与之前相同的起始扇区。最后,给出结束扇区或让fdisk选择您可以使用的最高扇区。w
以将更改写回磁盘映像文件,并退出fdisk。parted
工具。parted disk.img u b p
parted
可以接受命令作为命令行参数,这意味着它会打印分区表并使用字节作为大小单位。)losetup
创建一个回环块设备。losetup -f --show -o 54525952 disk.img
losetup
告诉你它选择了哪个设备,例如 /dev/loop0
。现在你可以使用 resize2fs
:
resize2fs /dev/loop0
最后移除循环设备
losetup -d /dev/loop0
http://www.linux-kvm.com/content/how-resize-your-kvm-virtual-disk
我认为@Caesium所说的是从上面的官方链接中得出的。1.qemu-img resize windows.qcow2 +5GB
2.GParted live cd to resize
3.reboot and use os tools to resize
#include <stdio.h>
static unsigned long auxfilesize(FILE* fp) {
unsigned long len=0;
int c=0;
while ( (c = fgetc(fp)) != -1 ) {
len++;
}
return len;
}
static unsigned long aux_copyNBytesFromTo(FILE* from, FILE* to,
unsigned long fromSize,
unsigned long bytes) {
unsigned long iter = 0;
while ( iter++ < fromSize ) {
int c = fgetc(from);
fputc(c, to);
}
iter-=1;
if ( fromSize < bytes ) {
while ( iter++ < bytes ) {
fputc(0, to);
}
}
return iter;
}
int main(int argc, char **argv) {
FILE *from = fopen(argv[1], "rb");
FILE *to = fopen(argv[2], "wb" );
unsigned long l = auxfilesize(from);
rewind(from);
aux_copyNBytesFromTo(from, to, l, (l + l/2)) ;
fclose(from);
fclose(to);
}
dd
或者truncate
... - rudimeier
virsh edit virt_name
并将磁盘源的路径更改为新路径。然后,如果它不起作用,请将其更改回来并重试。使用2个镜像就可以了,使用3个镜像没有太大意义。 - Mikeqemu-img convert -O qcow2 /var/lib/libvirt/images/outdisk /var/lib/libvirt/images/outdisk.qcow2
。 - logoffsudo
来运行libguestfs-tools命令:https://askubuntu.com/questions/1046828/how-to-run-libguestfs-tools-tools-such-as-virt-make-fs-without-sudo - Ciro Santilli OurBigBook.com#
来表示(而不是普通用户通常使用的$
)。 - malat