web-dev-qa-db-fra.com

Comment augmentez-vous l'espace disque d'un invité KVM?

J'ai configuré 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).

103
slm
  1. arrêter la VM
  2. courir qemu-img resize vmdisk.img +10G pour augmenter la taille de l'image de 10 Go
  3. démarrez la VM, redimensionnez normalement les partitions et la structure LVM
126
dyasny

Méthode en ligne (en utilisant 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 des environnements où le disque ne peut pas être démonté (comme une partition racine), le VM doit rester allumé, et le propriétaire du système est prêt à assumer le risque de corruption de données. Pour supprimer ce risque, vous devez vous connecter au VM et démonter le disque cible en premier, ce qui n'est pas toujours possible.

Procédez comme suit à partir de l'hyperviseur KVM.

  1. Augmentez la taille du fichier image 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. 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
    

Connectez-vous ensuite à la machine virtuelle. L'exécution de dmesg devrait signaler que le disque virtio a détecté un changement de capacité. À ce stade, continuez et redimensionnez vos partitions et la structure LVM selon vos besoins.

32
billyw

Ces questions de défaillance du serveur sont similaires mais plus spécifiques, redimensionnement du disque KVM en ligne? & Centos Xen redimensionnement de la partition DomU et du groupe de volumes . Le 1er pose la question de savoir comment augmenter un invité KVM alors qu'il est en ligne, tandis que le second est spécifique à XEN en utilisant LVM. Je demande comment y parvenir alors que le KVM est hors ligne.

REMARQUE: Ce lien était utile pour la MÉTHODE # 1, et montre comment augmenter l'espace disque d'un KVM (basé sur ext3), HOWTO: Redimensionner une KVM Image de machine virtuelle .

Une chose à savoir avec les KVM invités, c'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 # 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 gros fichier mykvm.img en main, démarrez gparted et étendez 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.

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

Voici les étapes que j'ai grossièrement suivies pour redimensionner un invité KVM qui a utilisé LVM en interne).

  1. Arrêtez la machine virtuelle
  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 le VM (en utilisant le new.img nouvellement créé)
  4. exécutez fdisk inside VM and delete & re-create LVM partition

    % 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émarrez la machine virtuelle

  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. Agrandir 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 à ce sujet site Web

22
slm

Redimensionner et développer les 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. Cela vous oblige à configurer les utilitaires du système de fichiers invité libvirt, mais ceux-ci sont utiles quand même.

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

Le raccourci clavier 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'étend pas sur place
    • c'est bien parce que vous avez l'original intact comme 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, procédez comme 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 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) Renommez le fichier disque en tant que sauvegarde, renommez le disque disque en disque (ou modifiez le XML invité)

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

7) Profit!

12
hdave

Il est possible de redimensionner en ligne. libvirtd le supporte nativement:

Recherchez le nom du périphérique de blocage. Devrait être quelque chose comme "vda"

$ virsh domblklist <libvirtd_vm_name>

Redimensionnez le périphérique virtuel:

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

Voici un exemple où j'ai développé le disque vda à partir de 50GB à 51GB pour undercloud VM.

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

Jetez maintenant un œil aux détails du fichier image .qcow2:

[root@gss-rhos-4 ~]# 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

Redimensionnons maintenant le périphérique de bloc vda:

[root@gss-rhos-4 ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized

Et confirmez:

[root@gss-rhos-4 ~]# 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@gss-rhos-4 ~]#

Ensuite, vous pouvez utiliser ce script dans le VM pour afficher les commandes pour redimensionner les périphériques de bloc et fs: https://github.com/mircea-vutcovici/scripts/blob/ master/vol_resize.sh .

6
Mircea Vutcovici

Si vous utilisez LVM dans le VM la façon la plus simple de le faire serait d'ajouter un nouveau disque virtuel au VM et d'étendre le groupe de volumes et la logique volumes sur cela.

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, le VM possède un disque virtuel de 30 Go, configuré à l'aide de LVM avec un groupe de volumes appelé vgWWW contenant deux volumes logiques, un pour l'échange et un pour tout le reste.

Si LV est utilisé dans la machine virtuelle:

  1. Arrêtez la machine virtuelle
  2. Sur l'hôte, créez un nouveau fichier de disque virtuel et ajoutez-le à la machine virtuelle
  3. Redémarrez le VM et connectez-vous
  4. Marquez le nouveau lecteur comme étant un volume physique pour LVM avec Sudo pvcreate /dev/vdb
  5. Étendez 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. Redimensionnez le système de fichiers avec resize2fs /dev/vgWWW/root

Remarque: ce qui précède suppose que les noms vg/lv sont les mêmes que mon exemple, ce qui est peu probable, changez le cas échéant, également si le VM avait déjà 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, cela provoquera une erreur et ne fera rien.

Remarque: lorsque vous redimensionnez un système de fichiers en direct resize2fs ne vous invitera pas à exécuter fsck d'abord comme il le ferait pour un système de fichiers non monté, il ira de l'avant. Vous voudrez peut-être exécuter une vérification du système de fichiers en lecture seule, il n'y a aucun problème avant de continuer.

6
David Spillett

Il est possible d'augmenter la taille du disque de votre machine virtuelle sans redémarrer le VM si vous utilisez le lecteur virtio 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 partition

  4. Utilisez vgextend vg_name/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
Bruno Mairlot

De cette façon, vous pouvez étendre la partition que vous souhaitez:

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

3
Hojat Modaresi

Une autre façon de le faire

truncate -s +2G vm1.img 

allez dans le faire une nouvelle analyse du disque et après vous pouvez faire votre redimensionnement lvm.

2
mandela900

Si vous avez LVM dans votre VM alors c'est fou facile et rapide.

  1. Désactivez VM (machine invitée).
  2. Sur votre machine hôte, ajoutez un nouveau périphérique de stockage.
  3. Allumez l'invité.
  4. Système ouvert -> Administration -> Gestion du volume logique (ou tapez Sudo system-config-lvm dans le terminal) *.

J'ai trouvé l'interface graphique assez intuitive, mais suivez les étapes suivantes si vous avez des problèmes.

  1. Ouvrez "Entités non initialisées" et recherchez votre nouveau lecteur.
  2. Après avoir sélectionné un nouveau lecteur, sous l'image, vous devriez trouver un bouton d'initialisation. 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 - cela se fait dans la vue logique du groupe en modifiant les propriétés de votre volume.
  6. Enregistrez et c'est fait. Pas besoin de redémarrer la VM.

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

1
Nux
  1. Arrêtez la machine virtuelle
  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 (GUID Partition Table), la taille du lecteur utilisée dans GPT sera différente de la nouvelle taille, vous devez la corriger avec gdisk:

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

    ou avec parted:

    parted $MY_DRIVE print Fix
    

    Pour une raison quelconque, parted fix ne fonctionne pas quand aucun tty n'est présenté (par exemple lors du provisioning avec Vagrant), donc j'utilise gdisk.

  4. Augmentez la taille de la partition pour remplir 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> partie est facultative et nécessaire si vous utilisez un 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 les partitions avec partx -u $MY_DRIVE ou partprobe.

  6. Étendre la partition, exemple pour ext2, ext3 ou ext4:

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

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

0
Muhasin