답변:
데비안 기반 배포판에서는 virt-resize
대신 사용해야 합니다. 이것은 현재 후드 아래의 모든 것을 처리합니다. 이미지가 Win7 이라고 가정합니다 (왜 그렇지 않습니까). 먼저 VM이 종료되었는지 확인하십시오.
도구를 설치하십시오.
# apt-get install libguestfs-tools
VM 디스크의 위치를 확인하십시오.
# 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" />
/var/lib/libvirt/images/Win7.img
다음 에 적응해야 할 수도 있습니다 .
# 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 -
64G 디스크를 작성하십시오.
# truncate -s 64G /var/lib/libvirt/images/outdisk
부트 파티션이 아닌 / dev / sda2를 확장해야합니다 :
# 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
이제 부팅하십시오!
더 많은 정보를 원하시면 : man virt-resize
raw
유형 이된다는 것 입니다. 인스턴스 qcow2
유형 을 유지 하려면 다음과 같은 변환을 적용해야합니다.qemu-img convert -O qcow2 /var/lib/libvirt/images/outdisk /var/lib/libvirt/images/outdisk.qcow2
이 작업을 수행하기 전에 디스크 이미지의 전체 사본을 그대로 복사 한 다음 모두 중단되면 다시 복사하여 다시 시작할 수있는 것이 좋습니다.
당신이해야 할 세 가지가 있습니다 :
1) 디스크 이미지를 크게 만듭니다. 호스트 :
qemu-img resize foo.qcow2 +32G
이제 게스트는 더 큰 디스크를 볼 수 있지만 여전히 오래된 파티션과 파일 시스템이 있습니다.
2) 디스크 이미지 내부의 파티션을 더 크게 만듭니다. 마운트 된 파티션을 망칠 수 없으므로 게스트에서 LiveCD를 부팅해야합니다. 이것은 매우 관여하고 아마도 가장 위험한 부분입니다. 여기에 복사하는 것이 많이 있으므로 지금은 대신 링크하겠습니다. 다음과 같이하고 싶습니다 :
http://www.howtoforge.com/linux_resizing_ext3_partitions_p2
또는 2b) 더 많은 저장 공간을 원한다면 새 파티션을 만드는 것이 더 간단하고 안전합니다. fdisk 또는 cfdisk 또는 편안한 느낌이 드는 것을 사용하십시오. 이제 게스트 디스크에 할당되지 않은 공간이 많이 보입니다.
3) 마지막으로 기존 파티션의 크기를 조정 한 경우 새로운 더 큰 파티션 내부의 파일 시스템을 더 크게 만듭니다 (실제로 위에 링크 된 가이드에 있음). 손님 내부 :
resize2fs /dev/sda1
나는 Caesium의 대답이 훌륭하다고 생각합니다. 동일한 것을 달성하기 위해 다른 명령을 작성하고 싶습니다.
disk.img
디스크 이미지 가있는 파일 , 즉 파티션 테이블과 하나 이상의 파티션이 있고 마지막 파티션을 더 크게 만들고 싶다고 가정하십시오. 당신이해야 할 일은
1) 전체 파일을 더 크게 만듭니다 (예 : 4GiB). 사용하는 빠른 방법은dd
dd if=/dev/zero of=disk.img bs=1c seek=4G count=0
2) fdisk를 사용하여 파티션을 더 크게 만드십시오 (부분 또는 더 좋은 도구로 할 수 있기를 바랍니다 ... 누구입니까?)
fdisk disk.img
입력 p
부문 106,496에서 예를 파티션, 파티션의 시작 부문 2 시작을 partiton 테이블과 모양을 인쇄 할 수 있습니다.
당신이 할 일은 파티션 테이블에서 해당 파티션을 삭제하고 정확히 같은 섹터에서 시작하지만 나중에 끝나는 새 파티션을 만드는 것입니다. 그런 다음 파티션에 유효한 파일 시스템이 포함됩니다.
d
삭제할 파티션 번호를 입력 하고 제공하십시오. (걸프!)
n
원하는 파티션 번호를 입력 한 다음 시작 섹터를 입력하십시오. 이전과 동일한 시작 섹터를 사용해야합니다. 마지막으로 엔드 섹터를 제공하거나 fdisk가 사용할 수있는 가장 높은 섹터를 선택하도록합니다.
입력 w
변경이 디스크 이미지 파일을 다시 작성하고 fdisk를 종료 할 수 있습니다.
3) 이제 파일 시스템의 크기를 조정해야합니다. 이를 위해 디스크 이미지 내부의 파일 시스템에 대한 오프셋 (= 위치)이 필요합니다. 섹터 크기 (일반적으로 512)를 알고 있거나 다음을 사용할 수있는 경우 섹터 번호에서이를 계산할 수 있습니다.parted
parted disk.img u b p
( parted
명령 줄 인수로 명령을 사용할 수 있으므로 '단위 바이트'와 '인쇄'를 의미하므로 파티션 테이블을 인쇄하고 바이트를 크기 uint로 사용합니다.)
파티션 시작 및 종료를 인쇄합니다. 파티션이 54525952에서 시작한다고 가정하면을 사용하여 루프백 블록 장치를 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이 말한 것은 위의 공식 링크에서 얻은 것 같습니다.
이것이 도움이되기를 바랍니다.
3 단계 :
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);
}
이 간단한 프로그램은 가상 이미지의 끝에 N 바이트를 추가합니다. Windows XP 용 Paragon 파티션 이미지를 사용하여 새로 만든 이미지를 병합했습니다. 여기서 작동합니다.
dd
또는 truncate
... 같은 기존의 도구를 사용했을 수 있습니다
virsh edit virt_name
디스크 소스의 경로를 새 것으로 변경하면됩니다. 그런 다음 작동하지 않으면 다시 변경 한 후 다시 시도하십시오. 2로 할 수있을 때 3 개의 이미지를 갖는 데는 별다른 의미가 없습니다.