Yanıtlar:
Debian tabanlı dağıtımda virt-resize
bunun yerine kullanmalısınız . Bu artık hemen kaputun altındaki her şeyi idare ediyor. Resminizin Win7 olduğunu varsayalım (neden olmasın?). İlk olarak, VM'nizin kapalı olduğundan emin olun:
Aracı yükleyin:
# apt-get install libguestfs-tools
VM diskinizin yerini alın:
# 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
Aşağıdakilere uyum sağlamanız gerekebilir :
# 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 diskinizi oluşturun:
# truncate -s 64G /var/lib/libvirt/images/outdisk
/ Dev / sda2 kodunu genişletmeniz gerekecek (önyükleme bölümünü değil):
# 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.
Sadece durumda yedekleme yapın (veya mv
yedeği istemiyorsanız kullanın ):
# 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
Şimdi aç!
Daha fazla bilgi için: man virt-resize
raw
. Örnek qcow2
türünü korumak istiyorsanız , aşağıdaki gibi bir dönüşüm uygulamanız gerekir:qemu-img convert -O qcow2 /var/lib/libvirt/images/outdisk /var/lib/libvirt/images/outdisk.qcow2
Bunlardan herhangi birini yapmadan önce, olduğu gibi disk görüntüsünün tam bir kopyasını almanızı öneririm, daha sonra her koptuğunda baştan başlamak için tekrar kopyalayabilirsiniz.
Yapmanız gereken 3 şey var:
1) Disk görüntüsünü büyütün. Ev sahibinizde:
qemu-img resize foo.qcow2 +32G
Artık misafiriniz daha büyük bir disk görebiliyor, ancak hala eski bölümleri ve dosya sistemleri var.
2) Disk görüntüsünün içindeki bölümü büyütün. Bunun için konuğunuzda bir LiveCD başlatmanız gerekir, çünkü monte edilmiş bir bölümle uğraşmazsınız. Bu oldukça karışmış ve muhtemelen en tehlikeli kısım. Buraya kopyalanacak çok şey var, bu yüzden şimdilik bağlantı kuracağım. Böyle bir şey yapmak istersiniz:
http://www.howtoforge.com/linux_resizing_ext3_partitions_p2
VEYA 2b), daha fazla depolama alanı istiyorsanız, yeni bir bölüm oluşturmak daha basit (ve daha güvenli) olur. Fdisk veya cfdisk veya ne rahat hissederseniz kullanın - şimdi konuk diskinizde ayrılmamış bir sürü alan görmelisiniz.
3) Son olarak, mevcut bölümünüzü yeniden boyutlandırdıysanız, yeni büyük bölüm içindeki dosya sistemini daha büyük hale getirin (bu aslında yine de yukarıda belirtilen kılavuzdadır). Konuğun içinde:
resize2fs /dev/sda1
Caesium'un cevabının iyi olduğunu düşünüyorum, aynı şeyi yapmak için başka komutları da yazmak istiyorum.
disk.img
Disk görüntüsüne sahip bir dosyanız olduğunu varsayalım , yani bir bölüm tablosu ve bir veya daha fazla bölümü var ve son bölümü daha büyük hale getirmek istediğinizi söyleyin. Yapman gereken şey
1) tüm dosyayı büyütün, 4GiB diyelim. Bunu yapmanın hızlı bir yolu kullanmaktır.dd
dd if=/dev/zero of=disk.img bs=1c seek=4G count=0
2) fdisk kullanarak bölümü daha büyük hale getirin (keşke bunu parçalı veya daha güzel bir araçla yapabilseydim ... Herkes?)
fdisk disk.img
Tip p
sektöründe 106.496 de örnek bölümü için, senin bölümünün başlangıç sektörü için 2 başlar ayırma bölmesini masa ve göz yazdırmak için.
Yapacağınız şey, bu bölümü bölüm tablosundan silmek ve aynı sektörde başlayıp daha sonra bitecek yeni bir bölüm oluşturmaktır. Sonra bölüm geçerli bir dosya sistemi içerecektir.
Tip d
ve silmek için bölüm numarası vermek. (Yudum!)
Yazın n
ve istenen bölüm numarasını ve ardından başlangıç sektörünü ver. Daha önce kullanılanlarla aynı başlangıç sektörünü kullanmalısınız. Sonunda son sektörü verin veya fdisk'in kullanabileceğiniz en yüksek sektörü seçmesine izin verin.
Tip w
değişiklikler disk görüntü dosyasına geri yazmak ve çıkış fdisk için.
3) Şimdi dosya sistemini yeniden boyutlandırmanız gerekiyor. Bunun için, disk görüntüsünde dosya sisteminin (=) konumunu dengelemeye ihtiyacınız var. Sektör boyutunu (genellikle 512 olan) biliyorsanız, bunu sektör numarasından hesaplayabilirsiniz veyaparted
parted disk.img u b p
( parted
komutları komut satırı argümanları olarak alabilir, bu nedenle 'unit bytes' ve 'print' anlamına gelir, bu yüzden bölüm tablosunu yazdırır ve byte'ları size uint olarak kullanır.)
Bu bölüm yazdırır başlar ve biter. Bölümünüzün 54525952'de başladığını ve ardından bir geridöngü blok aygıtı yaptığınızı söyleyin losetup
.
losetup -f --show -o 54525952 disk.img
losetup
Örneğin, hangi devi seçtiğini söyler /dev/loop0
. Şimdi kullanabilirsiniz resize2fs
:
resize2fs /dev/loop0
ve nihayet döngü cihazı kaldırmak
losetup -d /dev/loop0
Bulunan en iyi çözüm burada:
http://www.linux-kvm.com/content/how-resize-your-kvm-virtual-disk
Sanırım Caesium'un söylediği yukarıdaki resmi linkten veriliyor.
Umarım bu yardımcı olacak.
3 adım:
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);
}
Bu basit program sanal görüntünün sonuna N bayt ekler. Yeni oluşturulan görüntüleri birleştirmek için Windows XP için Paragon bölüm görüntüsünü kullandım. Tamam burada çalışıyor.
dd
veya truncate
...
virsh edit virt_name
, diskin kaynağının yolunu yenisiyle değiştirebilirsiniz. Sonra işe yaramazsa, sadece geri değiştirin ve tekrar deneyin. 2 ile yapabileceğiniz zaman 3 görüntü elde