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


J'ai configuré un invité Ubuntu sur un hôte KVM CentOS 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 image disque (qemu).


84
2017-10-24 14:23


origine


Utilisez-vous LVM ou une image disque dans un fichier? - Selivanov Pavel


Réponses:


  1. arrêter la VM
  2. courir qemu-img resize vmdisk.img +10G augmenter la taille de l'image de 10 Go
  3. démarrer la machine virtuelle, redimensionner les partitions et la structure LVM qu'il contient normalement

105
2017-10-24 15:32



Ah, vous m'y êtes battu, j'ai juste remarqué les options de redimensionnement de qemu-img dans la page de manuel. Donc, cela économise quelques étapes. Agréable! - slm
A travaillé pour redimensionner mon * .qcow2 img sur RHEL6.6. Merci! - Jacob Goulden
start the VM, resize the partitions and LVM structure within it normally Comment faire? S'il vous plaît expliquer - Waki
Vous ne pouvez pas tout avoir remis à vous sur un plateau. Si vous avez essayé sans succès de redimensionner des partitions ou des volumes logiques, ouvrez une nouvelle question et décrivez ce que vous avez essayé et ce qui n'a pas fonctionné. - dyasny
Pour redimensionner les partitions et LVM, suivez toutes les étapes décrites dans cet excellent article: sandilands.info/sgordon/… - skonsoft


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

Pour le meilleur ou pour le pire, les commandes ci-dessous seront exécutées 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é (telle qu'une partition racine), la VM doit rester allumée et le propriétaire du système est prêt à assumer le risque de corruption des données. Pour supprimer ce risque, vous devez d'abord vous connecter à la machine virtuelle et démonter le disque cible, ce qui n'est pas toujours possible.

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

  1. Augmentez la taille du fichier image du disque lui-même (spécifiez la quantité à augmenter):

    qemu-img resize <my_vm>.img +10G
    
  2. Obtenez le nom du périphérique virtio, via le shell libvirt (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. Indiquez 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. Fonctionnement dmesg devrait signaler que le disque virtio a détecté un changement de capacité. A ce stade, redimensionnez vos partitions et la structure LVM selon vos besoins.


23
2017-09-22 23:08



La page de manuel de qemu-img (la mienne date du 2016-05-08) dit: "Attention: N'utilisez jamais qemu-img pour modifier les images utilisées par une machine virtuelle en cours d'exécution ou tout autre processus. cela peut détruire l'image. Sachez également que l’interrogation d’une image modifiée par un autre processus peut rencontrer un état incohérent. "Par conséquent, je ne suis pas sûr que (la première étape) soit sans danger lorsque la machine virtuelle est toujours en cours d’exécution. - user44400
Ne fonctionne pas sur centos7 + kvm - e-info128
Cela a parfaitement fonctionné pour moi. Utilisation de ceph et de virtio block devices. nous stockons les données d'application / la base de données MySQL sur une partition séparée. Arrêtez les applications accédant à cette partition. Démontez-le. Redimensionnez-le. fsck. puis montez-le à nouveau avec la nouvelle taille. Aucun arrêt nécessaire. - nelaaro


Ces questions serverfault sont similaires mais plus spécifiques, KVM en ligne disque redimensionner? Et Centos Xen redimensionnant la partition et le groupe de volumes DomU. The 1st pose la question de savoir comment augmenter un invité KVM lorsqu'il est en ligne, tandis que le second est spécifique à XEN et utilise LVM. Je demande comment accomplir cela lorsque le KVM est hors ligne.

REMARQUE: Ce lien était utile pour la MÉTHODE N ° 1 et montre comment augmenter de manière considérable l’espace disque d’un KVM (basé sur ext3), HOWTO: Redimensionner une image de machine virtuelle KVM.

Les invités KVM doivent également savoir que les partitions qu’ils utilisent 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 fichier mykvm.img plus volumineux à la main, démarrez gparted et étendre la partition existante dans l'espace disque nouvellement ajouté. Cette dernière étape étend essentiellement la partition du système d’exploitation afin qu’elle puisse utiliser l’espace supplémentaire.

METHODE 2: Les partitions sont basées sur LVM

Voici la marche à suivre pour redimensionner un invité KVM utilisant LVM en interne.

  1. Arrêtez 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 machine virtuelle (à l'aide du nouveau fichier new.img)
  4. exécuter fdisk dans la machine virtuelle et supprimer & recréer une 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. Cultiver 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.
    

Ce qui précède est mon exemple, mais j’ai suivi les étapes ci-dessous. site Internet


17
2017-10-24 14:36



La méthode n ° 1 de cet article ne semble pas fonctionner aussi bien - le gestionnaire de machine virtuelle en chapeau rouge ne rapporte pas la nouvelle taille par la suite. La méthode suggérée par @dyasny semble fonctionner au moins mieux à cet égard. - Iwan Aucamp
@ IwanAucamp - intéressant, j'utilise virt-manager et ont largement utilisé les méthodes n ° 1 et n ° 2 avant la migration de nos serveurs KVM vers une version plus récente de KVM (CentOS 5 -> CentOS 6). J'utilise maintenant le qemu-img resize méthode aussi bien. - slm
Pour la méthode n ° 2, vous trouverez peut-être que lvextend est plus pratique à l’étape 7: lvextend /dev/Volgroup/lvname /dev/vda2 (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. - Mike S
La méthode n ° 2, étape 4 ne fonctionnera pas s'il y a des volumes logiques dans une table de partitions. Après la reconstitution du type étendu d'une partition, le premier secteur disponible ne correspond plus à ce qu'il était avant les modifications. Par exemple. si le premier secteur de votre partition logique était 1001472, après les modifications, il sera 1003518 (en supposant que le disque 10G soit avant et 50G après le redimensionnement). Tout le monde sait comment recréer, dans la mesure du possible, des volumes logiques dans le même premier secteur? - ILIV
Cela est dû à l'application par défaut de fdisk de contraintes d'alignement (pas de 1 Mo) aux partitions. Pour contourner le problème, acceptez la valeur par défaut de 1003518, entrez en mode expert (x), puis choisissez b et définissez le premier secteur sur 1001472. Voir unix.stackexchange.com/a/320447 pour plus de détails. - ILIV


Redimensionner et développer 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 développer les partitions appropriées en une seule étape. Il vous oblige à configurer les utilitaires du système de fichiers invité libvirt, mais il est utile de les avoir de toute façon.

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

La commande clé est la suivante: virt-resize

  • c'est un utilitaire libvirt
  • il peut étendre un disque invité ET développer les partitions à l'intérieur en une seule étape
  • il copie le disque, il ne l'étend pas sur place
    • c’est bien parce que vous avez l’original intact en tant que 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

Maintenant, faites ce qui suit:

1) arrêter l'invité:

2) Vérifiez le dimensionnement actuel et affichez le nom de la partition que vous souhaitez développer à l'aide de l'utilitaire libvirt:

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

3) Créez 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 dans 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) Renommez le fichier indisk en tant que sauvegarde, renommez le disque externe en indisk (ou modifiez le XML invité)

6) Redémarrez l'invité et testez soigneusement le nouveau fichier sur disque avant de supprimer le fichier d'origine.

7) Profit!


11
2018-06-13 14:02



Cela fait presque le travail dans mon cas. Malheureusement, presque. Lorsque l'invité (un serveur CentOS 7) est redémarré, le disque développé ne peut plus être démarré. - Urhixidur
Cela a très bien fonctionné pour moi. Omettant -o preallocation=metadata crée un fichier fragmenté. Avec cette option, il pré-alloue la taille entière. - Dennis Williamson
Excellent, cette réponse me l'a bien compris. Merci beaucoup! La documentation "officielle" de libguestfs (libguestfs.org/virt-resize.1.html), malheureusement, n’est pas bien écrit et finit par être assez déroutant. - mbello
A bien fonctionné pour moi, n’oubliez pas que vous n’avez pas besoin d’utiliser -o preallocation=metadata et si vous ne vous devriez également sauter le truncate étape. virt-resize augmentera le fichier comme il convient de toute façon. - amoe


Si vous utilisez LVM au sein de la machine virtuelle, la manière la plus simple de le faire consiste à ajouter un nouveau disque virtuel à la machine virtuelle et à étendre le groupe de volumes et les volumes logiques sur celui-ci.

Pour vérifier si vous utilisez LVM, exécutez sudo pvs; sudo vgs; sudo lvs, vous obtiendrez quelque chose comme ceci:

PV         VG     Fmt  Attr PSize  PFree
/dev/vda1  vgWWW  lvm2 a-   30.00g    0

VG     #PV #LV #SN Attr   VSize  VFree
vgWWW    1   2   0 wz--n- 30.00g    0

LV   VG    Attr   LSize 
root vgWWW -wi-ao 28.80g
swap vgWWW -wi-ao  1.19g

si le système d'exploitation de la machine virtuelle utilise LVM. Dans l'exemple ci-dessus, la machine virtuelle a un disque virtuel de 30 Go, configuré à l'aide de LVM avec un groupe de volumes appelé vgWWW contenant deux volumes logiques, un pour le swap et un pour tout le reste.

Si LV est en cours d'utilisation sur la VM:

  1. Arrêtez la VM
  2. Sur l'hôte, créez un nouveau fichier de disque virtuel et ajoutez-le à la machine virtuelle.
  3. Redémarrez la VM et connectez-vous
  4. Marquez le nouveau disque comme étant un volume physique pour LVM avec sudo pvcreate /dev/vdb
  5. Étendre le groupe de volumes pour inclure ce nouveau bloc de disque avec sudo vgextend vgWWW /dev/vdb
  6. Étendez le volume logique pour occuper le nouvel espace avec sudo lvextend --extents +100%FREE /dev/vgWWW/root (ou quelque chose comme sudo lvextend --size +8G /dev/vgWWW/root si vous ne voulez pas le développer complètement, cet exemple ajouterait 8 Go au volume)
  7. Redimensionner le système de fichiers avec resize2fs /dev/vgWWW/root

Remarque: ce qui précède suppose que les noms vg / lv sont identiques à ceux de mon exemple, ce qui est peu probable, changez-le si nécessaire, même si la machine virtuelle disposait déjà d'un lecteur virtuel appelé vdb le nouveau sera autre chose (vdc, etc)

Remarque:  resize2fs ne fonctionnera que sur les systèmes de fichiers ext2, ext3 et ext4. Si vous utilisez autre chose, l'erreur sera commise et ne fera rien.

Remarque: en redimensionnant un système de fichiers live resize2fs ne vous demandera pas de courir fsck comme il le ferait pour un système de fichiers non monté, il ira de l'avant. Vous souhaiterez peut-être exécuter une vérification du système de fichiers en lecture seule: aucun problème avant de continuer.


5
2017-10-24 15:10



Cela peut aussi être fait avec une interface graphique assez agréable centos.org/docs/5/html/Deployment_Guide-en-US/… - Nux


Il est possible d'augmenter la taille du disque de votre machine virtuelle sans avoir à redémarrer la machine virtuelle si vous utilisez virtio drive et LVM.

  1. Utilisez virt-manager ou virsh pour définir un nouveau disque vide
  2. Le noyau devrait voir un nouveau / dev / vdb
  3. (Facultatif) Créez une partition principale avec fdisk pour obtenir / dev / vdb1, puis utilisez kpartx -a / dev / vdb pour relire la table de partitions.

  4. Utilisez vgextend nom_vg / dev / vdb1 (ou / dev / vdb si vous n'avez pas créé de partition)

  5. Utilisez lvextend -l + 100% FREE / dev / vg_name / lv_name
  6. Utilisez resize2fs / dev / vg_name / lv_name pour étendre votre système de fichiers

Vous avez terminé.


3
2017-07-12 10:25



J'ajouterai ça libguestfs.org/virt-resize.1.html devrait aussi aider. - FearlessFuture


Une autre façon de le faire

truncate -s +2G vm1.img 

allez dans le faire un nouveau balayage de disque et après que vous puissiez faire votre redimensionnement de LVM.


2
2018-04-18 17:50





De cette façon, vous pouvez développer la partition que vous voulez:

    # see what partitions you have? 
    virt-filesystems --long -h --all -a olddisk

    truncate -r olddisk newdisk
    truncate -s +5G newdisk

    # Note "/dev/sda2" is a partition inside the "olddisk" file.
    virt-resize --expand /dev/sda2 olddisk newdisk

Voir plus d'exemples ici.


2
2017-10-01 15:50





Si vous avez LVM dans votre machine virtuelle, c'est très simple et rapide.

  1. Éteignez la machine virtuelle (ordinateur invité).
  2. Dans votre ordinateur hôte, ajoutez un nouveau périphérique de stockage.
  3. Activer l'invité.
  4. Système ouvert -> Administration -> Gestion de volume logique (ou type sudo system-config-lvm dans le terminal) *.

J'ai trouvé l'interface graphique plutôt intuitive, mais suivez les étapes suivantes si vous rencontrez des problèmes.

  1. Ouvrez "Entités non initialisées" et trouvez votre nouveau lecteur.
  2. Après avoir sélectionné un nouveau lecteur, vous devriez trouver un bouton d’initialisation sous l’image. Appuie.
  3. Il vous posera des questions sur le partitionnement - vous n'en avez pas besoin.
  4. Une fois terminé, ajoutez votre lecteur au groupe de volumes existant.
  5. Enfin, vous devez augmenter votre ou vos volumes logiques. Pour ce faire, sélectionnez Vue logique du groupe en modifiant les propriétés de votre volume.
  6. Enregistrer et votre fait. Pas besoin de redémarrer la VM.

Remarque! Au moins sur l’interface utilisateur graphique CentOS 6 LVM n’est pas installé par défaut, mais vous pouvez l’installer avec yum install system-config-lvm.


1
2018-06-07 16:12





  1. Arrêtez la VM
  2. Redimensionner l'image:

    qemu-img resize vmdisk.img +16G
    

    augmente la taille de l'image de 16 Go.

  3. Si votre image a GPT (table de partition GUID), la taille du lecteur utilisé dans GPT sera différente de la nouvelle taille, vous devez y remédier avec gdisk:

    MY_DRIVE=/dev/vda
    gdisk $MY_DRIVE <<EOF
    w
    Y
    Y
    EOF
    

    ou avec parted:

    parted $MY_DRIVE print Fix
    

    Pour certaines raisons parted le correctif ne fonctionne pas quand aucun tty n’est présenté (par exemple lors de l’approvisionnement avec Vagrant) alors j’utilise gdisk.

  4. Augmentez la taille de la partition pour occuper tout l'espace disponible:

    MY_PARTITION_GUID=$(
    gdisk $MY_DRIVE <<EOF | sed -n -e 's/^Partition unique GUID: //p'
    i
    EOF
    )
    
    MY_PARTITION_FIRST_SECTOR=$(
    gdisk $MY_DRIVE <<EOF | sed -n -e 's/^First sector: \([0-9]\+\).*/\1/p'
    i
    EOF
    )
    
    gdisk $MY_DRIVE <<EOF
    d
    n
    
    $MY_PARTITION_FIRST_SECTOR
    
    
    x
    a
    2
    
    c
    $MY_PARTITION_GUID
    w
    Y
    EOF
    

    le x a 2 <Enter> une partie est facultative et nécessaire si vous utilisez le BIOS hérité. MY_PARTITION_GUID=... et c $MY_PARTITION_GUID les parties sont également facultatives et nécessaires uniquement si vous utilisez la partition UUID dans /etc/fstab ou ailleurs.

  5. Redémarrez ou relisez des partitions avec partx -u $MY_DRIVE ou partprobe.

  6. Extension de partition, exemple pour ext2, ext3 ou ext4:

    MY_PARTITION="${MY_DRIVE}1"
    resize2fs $MY_PARTITION
    

1
2018-04-05 22:32





Vous pouvez utiliser solus vm avec gparted monté. Une fois utilisé avec gparted, vous pouvez facilement démarrer le système et ajuster l’espace. Assurez-vous que vous avez défini la priorité de démarrage correcte. À titre de référence, veuillez vous reporter à l'URL ci-dessous qui pourrait vous être utile. https://greencloudvps.com/knowledgebase/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgrading-VPS.html


0
2017-07-31 12:52