Réponses:
Sur une distribution basée sur Debian, vous devriez utiliser à la virt-resize
place. Cette poignée à peu près tout sous le capot maintenant. Supposons que votre image s'appelle Win7 (pourquoi pas?). Assurez-vous d'abord que votre machine virtuelle est arrêtée:
Installez l'outil:
# apt-get install libguestfs-tools
Obtenez l'emplacement de votre disque 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" />
Vous devrez peut-être vous adapter /var/lib/libvirt/images/Win7.img
aux éléments suivants:
# 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 -
Créez votre disque 64G:
# truncate -s 64G /var/lib/libvirt/images/outdisk
Vous devrez développer / dev / sda2 (pas la partition de démarrage):
# 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.
Faites une sauvegarde au cas où (ou utilisez mv
si vous ne voulez pas la sauvegarde):
# 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
Maintenant, démarrez!
Pour plus d'informations: man virt-resize
raw
type. Si vous souhaitez conserver le qcow2
type d' instance , vous devez appliquer une conversion comme:qemu-img convert -O qcow2 /var/lib/libvirt/images/outdisk /var/lib/libvirt/images/outdisk.qcow2
Je recommande avant de faire quoi que ce soit de prendre une copie complète de l'image disque telle qu'elle est, puis quand tout se casse, vous pouvez la recopier pour recommencer.
Il y a 3 choses que vous devez faire:
1) Agrandir l'image du disque. Chez votre hôte:
qemu-img resize foo.qcow2 +32G
Maintenant, votre invité peut voir un disque plus gros, mais a toujours d'anciennes partitions et systèmes de fichiers.
2) Agrandir la partition à l'intérieur de l'image disque. Pour cela, vous devez démarrer un LiveCD sur votre invité, car vous ne pourrez pas jouer avec une partition montée. C'est assez compliqué et probablement la partie la plus dangereuse. C'est beaucoup à copier ici, donc je vais juste lier à la place pour l'instant. Vous voulez faire quelque chose comme ça:
http://www.howtoforge.com/linux_resizing_ext3_partitions_p2
OU 2b) la création d'une nouvelle partition serait plus simple (et plus sûre) si vous voulez simplement plus d'espace de stockage. Utilisez fdisk ou cfdisk, ou tout ce qui vous convient - vous devriez maintenant voir tout un tas d'espace non alloué sur votre disque invité.
3) Enfin, si vous redimensionnez votre partition existante, agrandissez le système de fichiers à l'intérieur de la nouvelle partition plus grande (c'est en fait dans le guide lié ci-dessus de toute façon). À l'intérieur de votre invité:
resize2fs /dev/sda1
Je pense que la réponse de Caesium est très bien, je voudrais juste écrire quelques autres commandes pour réaliser la même chose.
Supposons que vous ayez un fichier disk.img
avec une image disque, c'est-à-dire qu'il ait une table de partition et une ou plusieurs partitions, et dites que vous voulez agrandir la dernière partition. Ce que vous devez faire, c'est
1) agrandissez l'ensemble du fichier, par exemple 4GiB. Un moyen rapide de le faire consiste à utiliserdd
dd if=/dev/zero of=disk.img bs=1c seek=4G count=0
2) rendre la partition plus grande en utilisant fdisk (je souhaite pouvoir le faire en partie ou un outil plus agréable ... N'importe qui?)
fdisk disk.img
Tapez p
pour imprimer la table des partitions et recherchez le secteur de départ de votre partition, par exemple la partition 2 commence au secteur 106496.
Ce que vous allez faire est de supprimer cette partition de la table des partitions et de créer une nouvelle partition qui commence exactement au même secteur mais se termine à un autre plus tard. Ensuite, la partition contiendra un système de fichiers valide.
Tapez d
et donnez le numéro de partition à supprimer. (Gorgée!)
Tapez n
et donnez le numéro de partition souhaité, puis le secteur de démarrage. Vous DEVEZ utiliser le même secteur de démarrage que celui utilisé auparavant. Enfin, donnez le secteur final ou laissez simplement fdisk choisir le secteur le plus élevé que vous pouvez utiliser.
Tapez w
pour réécrire les modifications dans le fichier d'image disque et quittez fdisk.
3) Vous devez maintenant redimensionner le système de fichiers. Pour cela, vous avez besoin du décalage vers (= la position du) système de fichiers à l'intérieur de l'image disque. Vous pouvez calculer cela à partir du numéro de secteur si vous connaissez la taille du secteur (qui est généralement 512), ou vous pouvez utiliserparted
parted disk.img u b p
( parted
peut prendre des commandes comme arguments de ligne de commande, donc cela signifie 'octets unitaires' et 'imprimer', donc il imprime la table de partition et utilise les octets comme taille uint.)
Cela imprime la partition commence et se termine. Supposons que votre partition commence à 54525952, puis vous créez un périphérique de bouclage avec losetup
.
losetup -f --show -o 54525952 disk.img
losetup
vous indique quel dev il a choisi, par exemple /dev/loop0
. Vous pouvez maintenant utiliser resize2fs
:
resize2fs /dev/loop0
et enfin retirer le périphérique de boucle
losetup -d /dev/loop0
La meilleure solution trouvée est ici:
http://www.linux-kvm.com/content/how-resize-your-kvm-virtual-disk
Je pense que ce que @Caesium a dit est donné par le lien officiel ci-dessus
J'espère que cela vous aidera.
3 étapes:
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);
}
Ce programme simple ajoute N octets à la fin de l'image virtuelle. J'ai utilisé l'image de partition Paragon pour Windows XP pour fusionner les images nouvellement créées. Fonctionne bien ici.
dd
ou truncate
...
virsh edit virt_name
et changer le chemin d'accès à la source du disque pour le nouveau. Si cela ne fonctionne pas, modifiez-le et réessayez. Il n'y a pas vraiment d'intérêt à avoir 3 images quand on pourrait le faire avec 2.