136 votes

Comment augmenter l'espace disque d'un invité KVM ?

J'ai installé un invité Ubuntu sur un hôte CentOS KVM avec initialement 6 Go d'espace disque. Comment puis-je augmenter l'espace disque de l'invité Ubuntu à partir de la ligne de commande ?

EDIT #1 : J'utilise un fichier d'image disque (qemu).

1 votes

Redimensionnement en ligne : serverfault.com/a/952868/30946

163voto

Andrew T Points 1088
  1. arrêter la VM
  2. exécuter qemu-img resize vmdisk.img +10G pour augmenter la taille des images de 10Gb
  3. démarrer la VM, redimensionner les partitions et la structure LVM à l'intérieur de celle-ci normalement

0 votes

Ah, vous m'avez devancé, je viens de remarquer les options de redimensionnement de qemu-img dans la page de manuel. Donc cela permet d'économiser quelques étapes. Joli !

0 votes

Il existe depuis toujours. en fait, votre méthode ne fonctionnera pas avec qcow, seulement avec des images brutes, et échouera définitivement si une chaîne d'instantanés est impliquée.

0 votes

La version de qemu-img sur CentOS5.6 n'inclut pas l'option de redimensionnement, donc votre seule option est d'utiliser l'astuce de créer un fichier .img brut de 10GB et de le mettre en chat avec le fichier .img existant, comme ceci : cat vmdisk.img addon.raw >> vmdisk_new.img. Le fichier .img de 10GB peut être créé comme suit : qemu-img create -f raw addon.raw 10G.

42voto

billyw Points 1552

Méthode en ligne (avec qemu, libvirt et virtio-block)

Pour le meilleur ou pour le pire, les commandes ci-dessous s'exécuteront même si le disque virtuel cible est monté. Cela peut être utile dans les environnements où le disque ne peut pas être démonté (comme une partition racine), où la VM doit rester allumée, et où les commandes suivantes peuvent être exécutées. le propriétaire du système est prêt à assumer le risque de corruption des données . Pour éliminer ce risque, il faut d'abord se connecter à la VM et démonter le disque cible, ce qui n'est pas toujours possible.

Effectuez les opérations suivantes à partir de l'hyperviseur KVM.

  1. Augmenter la taille du fichier d'image disque lui-même (spécifier la quantité à augmenter) :

    qemu-img resize <my_vm>.img +10G
  2. Obtenir le nom du périphérique virtio, via le libvirt Shell ( drive-virtio-disk0 dans cet exemple) :

    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]
  3. Signalez au pilote virtio de détecter la nouvelle taille (spécifiez la nouvelle capacité totale) :

    virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp

Puis connectez-vous à la VM. Exécution de dmesg devrait signaler que le disque virtio a détecté un changement de capacité. A ce stade, allez-y et redimensionnez vos partitions et la structure LVM si nécessaire.

6 votes

La page de manuel de qemu-img (la mienne est datée de 2016-05-08) dit : " [ ] Attention : N'utilisez jamais qemu-img pour modifier des images utilisées par une machine virtuelle en cours d'exécution ou tout autre processus ; cela pourrait détruire l'image. De plus, soyez conscient que l'interrogation d'une image qui est en train d'être modifiée par un autre processus peut rencontrer un état incohérent." Je ne suis donc pas sûr que (la première étape) soit sûre lorsque la machine virtuelle est toujours en cours d'exécution.

0 votes

Ne fonctionne pas sur centos7+kvm

1 votes

Cela a parfaitement fonctionné pour moi. En utilisant ceph et virtio block devices. nous stockons les données de l'application / db MySQL sur une partition séparée. Arrêtez les applications qui accèdent à cette partition. Démontez-la. Redimensionnez-la. fsck. puis montez-la à nouveau avec la nouvelle taille. Aucun arrêt nécessaire.

22voto

nex3 Points 4309

Ces questions sur les défauts du serveur sont similaires mais plus spécifiques, Redimensionnement de disque en ligne KVM ? & Centos Xen : redimensionnement de la partition DomU et du groupe de volumes . La première demande comment augmenter un invité KVM lorsqu'il est en ligne, tandis que la deuxième est spécifique à XEN et utilise LVM. Je demande comment accomplir ceci pendant que le KVM est hors ligne.

NOTE : Ce lien a été utile pour la MÉTHODE n° 1, et montre comment augmenter l'espace disque d'une KVM (basée sur ext3), Guide pratique : Redimensionner une image de machine virtuelle KVM .

Une chose dont il faut être conscient avec les invités KVM est que les partitions qu'ils utilisent à l'intérieur peuvent affecter la méthode que vous pouvez utiliser pour augmenter leur espace disque.

MÉTHODE N° 1 : Les partitions sont basées sur ext2/ext3/ext4.

Les noix de cette méthode sont les suivantes :

# 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

Maintenant avec le plus grand fichier mykvm.img en main, démarrez gparted et étendre la partition existante dans l'espace disque nouvellement ajouté. Cette dernière étape consiste à étendre la partition du système d'exploitation afin qu'elle puisse utiliser l'espace supplémentaire.

MÉTHODE N° 2 : Les partitions sont basées sur LVM

Voici les étapes que j'ai suivies en gros pour redimensionner un invité KVM qui utilisait LVM en interne.

  1. Arrêter la VM

  2. ajouter plus d'espace au "fichier image" de l'invité (quelque chose comme : cat old.img 10G_addon.raw >> new.img

  3. Démarrer la VM (en utilisant le nouveau .img créé).

  4. Exécutez fdisk dans la VM et supprimez et recréez la partition 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.
    %
  5. Redémarrer la VM

  6. Redimensionner le volume physique 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
      ...
  7. Redimensionner le volume logique LVM

      % lvresize /dev/VolGroup00/LogVol00 -l +640
      Extending logical volume LogVol00 to 43.88 GB
      Logical volume LogVol00 successfully resized
  8. Développer le système de fichiers

      % 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.

L'exemple ci-dessus est le mien, mais j'ai suivi les étapes de ce document. site web

0 votes

La méthode n°1 de cet article ne semble pas fonctionner très bien - le gestionnaire de machine virtuelle de Red Hat ne signale pas la nouvelle taille par la suite. La méthode proposée par @dyasny semble mieux fonctionner, du moins à cet égard.

0 votes

@IwanAucamp - intéressant, j'utilise virt-manager et j'ai utilisé les méthodes 1 et 2 de manière intensive avant de migrer nos serveurs KVM vers une version plus récente de KVM (CentOS 5 -> CentOS 6). J'utilise maintenant la méthode qemu-img resize également.

0 votes

Pour la méthode n°2, vous trouverez peut-être lvextend plus pratique comme étape 7 : lvextend /dev/Volgroup/lvname /dev/vda2 (tous sur une seule ligne, où /dev/vda2 serait votre volume physique). Sans aucune autre option, il utilisera la taille maximale de ce groupe de volumes.

20voto

Adrian Points 43

Redimensionnement et extension des partitions internes en une seule étape

J'avais un hôte Ubuntu avec une image de fichier invité qcow2 et je voulais redimensionner le disque et étendre les partitions appropriées en une seule étape. Il vous faut configurer les utilitaires du système de fichiers invité libvirt, mais il est utile de les avoir à portée de main.

Inspiration d'ici : http://libguestfs.org/virt-resize.1.html

La commande clé ici est : virt-resize

  • c'est un utilitaire libvirt
  • Il peut étendre un disque invité ET étendre les partitions à l'intérieur en une seule étape.
  • il copie le disque, il ne l'agrandit pas sur place.
    • c'est bien parce que vous avez l'original intact comme une sauvegarde

Préparation :

* 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

Faites maintenant ce qui suit :

1) arrêter l'invité :

2) Vérifiez le dimensionnement actuel et visualisez le nom de la partition que vous souhaitez étendre en utilisant l'utilitaire libvirt :

sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file

3) Créer le nouveau disque de sortie (40G) :

qcow: sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G
img:  sudo truncate -s 40G outdisk

4) Copiez l'ancien vers le nouveau tout en développant la partition appropriée (en supposant que votre partition de disque de l'étape 2 était /dev/sda1) :

sudo virt-resize --expand /dev/sda1 indisk outdisk

5) Renommer le fichier indisk comme sauvegarde, renommer l'outdisk comme indisk (ou modifier le XML invité)

6) Redémarrez l'invité et testez soigneusement le nouveau fichier du disque avant de supprimer le fichier original.

7) Profit !

0 votes

Cela fait presque l'affaire dans mon cas. Malheureusement, presque. Lorsque l'invité (un serveur CentOS 7) est redémarré, il trouve le disque étendu non amorçable.

2 votes

Ça a bien marché pour moi. Omettre -o preallocation=metadata crée un fichier épars. Avec cette option, il pré-alloue la totalité de la taille.

0 votes

Excellent, cette réponse a été déterminante pour moi. Merci beaucoup ! La documentation "officielle" de libguestfs ( libguestfs.org/virt-resize.1.html ), n'est malheureusement pas bien écrit et finit par être assez confus.

13voto

jcollum Points 10236

Il est possible d'effectuer un redimensionnement en ligne, sans arrêter la VM. libvirtd le prend en charge de manière native :

Trouvez le nom du périphérique de bloc. Cela doit être quelque chose comme "vda".

$ virsh domblklist <libvirtd_vm_name>

Redimensionner le dispositif virtuel :

$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>

Voici un exemple dans lequel j'ai étendu le vda disque de 50GB a 51GB para undercloud VM.

[root@localhost ~]# virsh domblklist undercloud
Target     Source
------------------------------------------------
vda        /home/images/undercloud.qcow2

Maintenant, regardez les détails du fichier image .qcow2 :

[root@localhost ~]# 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

Maintenant, redimensionnons le périphérique de bloc vda :

[root@localhost ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized

Et confirmez :

[root@localhost ~]# 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@localhost ~]#

Vous pouvez ensuite utiliser ce script à l'intérieur de la VM pour afficher les commandes permettant de redimensionner les périphériques de bloc et les fs : https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh . Voici un exemple de sortie :

mvutcovi@ubuntu1904:~$ wget -q https://raw.githubusercontent.com/mircea-vutcovici/scripts/master/vol_resize.sh

mvutcovi@ubuntu1904:~$ df /
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda1       15414216 7928904   6682600  55% /

mvutcovi@ubuntu1904:~$ sudo bash vol_resize.sh --block-device /dev/vda1
sfdisk -d /dev/vda > dev_vda-partition-table-$(date +%F_%H%M%S).txt   # Backup MS-DOS partition table for /dev/vda block device.
parted -s /dev/vda resizepart 1   # Resize MS-DOS partition /dev/vda1
# Update kernel with new partition table from disk
partx -u /dev/vda
partprobe /dev/vda
blockdev --rereadpt /dev/vda
kpartx -u /dev/vda
resize2fs /dev/vda1    # Resize ext3 or ext4 filesystem
mvutcovi@ubuntu1904:~$

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X