Pregunta ¿Cómo aumentar el espacio en disco de un invitado KVM?


Configuré un invitado de Ubuntu en un host KVM de CentOS con inicialmente 6 GB de espacio en disco. ¿Cómo hago para aumentar el espacio en disco del invitado de Ubuntu desde la línea de comandos?

EDITAR # 1: Estoy usando un archivo de imagen de disco (qemu).


84
2017-10-24 14:23


origen


¿Está utilizando LVM o imagen de disco en un archivo? - Selivanov Pavel


Respuestas:


  1. detener la máquina virtual
  2. correr qemu-img resize vmdisk.img +10G para aumentar el tamaño de la imagen en 10 Gb
  3. iniciar la máquina virtual, cambiar el tamaño de las particiones y la estructura LVM dentro de ella normalmente

105
2017-10-24 15:32



Ah, me venciste, acabo de notar las opciones de cambio de tamaño en qemu-img en la página de manual. Así que esto ahorra un par de pasos. ¡Bonito! - slm
Trabajé para redimensionar mi * .qcow2 img en RHEL6.6. ¡Gracias! - Jacob Goulden
start the VM, resize the partitions and LVM structure within it normally ¿Cómo hacerlo? Por favor expliquelo - Waki
No puedes tener todo en una bandeja. Si ha intentado y no ha podido cambiar el tamaño de las particiones o LV, abra una nueva pregunta, describa qué probó y qué no funcionó - dyasny
Para cambiar el tamaño de las particiones y LVM, siga todos los pasos como se explica en este excelente artículo: sandilands.info/sgordon/… - skonsoft


Método en línea (usando qemu, libvirt y virtio-block)

Para bien o para mal, los siguientes comandos se ejecutarán incluso si el disco virtual de destino está montado. Esto puede ser útil en entornos donde el disco no se puede desmontar (como una partición raíz), la VM debe permanecer activada y El propietario del sistema está dispuesto a asumir el riesgo de corrupción de datos.. Para eliminar ese riesgo, tendría que iniciar sesión en la VM y desmontar el disco de destino, algo que no siempre es posible.

Realice lo siguiente desde el hipervisor KVM.

  1. Aumente el tamaño del archivo de imagen de disco (especifique la cantidad a aumentar):

    qemu-img resize <my_vm>.img +10G
    
  2. Obtenga el nombre del dispositivo virtio, a través del shell libvirt (drive-virtio-disk0 en este ejemplo):

    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. Señale al controlador virtio para detectar el nuevo tamaño (especifique la nueva capacidad total):

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

Luego inicie sesión en la máquina virtual. Corriendo dmesg Debe informar que el disco virtio detectó un cambio de capacidad. En este punto, siga adelante y cambie el tamaño de sus particiones y la estructura de LVM según sea necesario.


23
2017-09-22 23:08



La página del manual para qemu-img (la mía está fechada el 2016-05-08) dice: "Advertencia: Nunca use qemu-img para modificar las imágenes en uso por una máquina virtual en ejecución o cualquier otro proceso; Esto puede destruir la imagen. Además, tenga en cuenta que al consultar una imagen que está siendo modificada por otro proceso puede encontrarse con un estado incoherente ". Por lo tanto, no estoy seguro de si (el primer paso) es seguro cuando la máquina virtual aún se está ejecutando. - user44400
No funciona en centos7 + kvm. - e-info128
Esto funcionó perfectamente para mí. Utilizando dispositivos de bloqueo ceph y virtio. almacenamos datos de aplicaciones / MySQL db en una partición separada. Detenga las aplicaciones que acceden a esta partición. Desmontarlo Cambiar el tamaño fsck Luego vuelve a montarlo con el nuevo tamaño. No es necesario apagar. - nelaaro


Estas preguntas de serverfault son similares pero más específicas, ¿Tamaño de disco en línea KVM? Y Centos Xen redimensionando la partición de DomU y el grupo de volúmenes. El primero hace la pregunta de cómo aumentar un invitado KVM mientras está en línea, mientras que el segundo es específico de XEN utilizando LVM. Estoy preguntando cómo lograr esto mientras el KVM está fuera de línea.

NOTA: Este enlace fue útil para el MÉTODO # 1 y muestra cómo lograr aumentar el espacio en disco de un KVM (basado en ext3), COMO: Cambiar el tamaño de una imagen de máquina virtual KVM.

Una cosa a tener en cuenta con los invitados KVM es que las particiones que usan dentro pueden afectar el método que puede usar para aumentar su espacio en disco.

MÉTODO 1: Las particiones son basadas en ext2 / ext3 / ext4

Las tuercas de este método son las siguientes:

# 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

Ahora con el archivo mykvm.img más grande en la mano, arranque gparted y extienda la partición existente en el espacio en disco recién agregado. Este último paso básicamente amplía la partición del sistema operativo para que pueda hacer uso del espacio adicional.

MÉTODO # 2: Las particiones están basadas en LVM

Estos son los pasos que seguí aproximadamente para cambiar el tamaño de un invitado KVM que usaba LVM internamente.

  1. Apagar la máquina virtual
  2. agregue más espacio al "archivo de imagen" del invitado (algo como: cat old.img 10G_addon.raw >> new.img
  3. iniciar la máquina virtual (utilizando el new.img recién creado)
  4. ejecute fdisk dentro de la máquina virtual y elimine y vuelva a crear la partición 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. Reinicie la VM

  6. Redimensionar el volumen físico de 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. Cambiar el tamaño del volumen lógico LVM

      % lvresize /dev/VolGroup00/LogVol00 -l +640
      Extending logical volume LogVol00 to 43.88 GB
      Logical volume LogVol00 successfully resized
    
  8. Crecer el sistema de archivos

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

Lo anterior es mi ejemplo, pero seguí los pasos en este sitio web


17
2017-10-24 14:36



El método # 1 en esta publicación no parece funcionar tan bien: el administrador de la máquina virtual en Red Hat no informa el nuevo tamaño posteriormente. El método sugerido por @dyasny parece funcionar mejor al menos a este respecto. - Iwan Aucamp
@IwanAucamp - interesante, yo uso virt-manager y he usado ampliamente los métodos # 1 y # 2 antes de migrar nuestros servidores KVM a una versión más nueva de KVM (CentOS 5 -> CentOS 6). Ahora uso el qemu-img resize método también. - slm
Para el método # 2, es posible que encuentre lvextend handier como paso 7: lvextend /dev/Volgroup/lvname /dev/vda2 (todo en una línea, donde / dev / vda2 sería su volumen físico). Sin ninguna otra opción, utilizará el tamaño máximo en ese grupo de volúmenes. - Mike S
El método # 2, paso 4 no funcionará si hay volúmenes lógicos en una tabla de partición. Después de recrear el tipo extendido de una partición, el primer sector disponible ya no coincidirá con lo que se tenía antes de los cambios. P.ej. si el primer sector de su partición lógica fue 1001472, después de los cambios será 1003518 (suponiendo que el disco 10G antes y 50G después del cambio de tamaño). ¿Alguien sabe cómo recrear, si es posible, volúmenes lógicos en el mismo primer sector? - ILIV
Esto se debe a que fdisk aplica de forma predeterminada restricciones de alineación (paso de 1 MB) a las particiones. Para solucionar el problema, acepte el valor predeterminado de 1003518, ingrese el modo experto (x), luego elija b y establezca el primer sector en 1001472. Vea unix.stackexchange.com/a/320447 para detalles. - ILIV


Redimensionar y expandir particiones internas en un solo paso

Tenía un host de Ubuntu con una imagen de archivo de invitado qcow2 y quería cambiar el tamaño del disco y expandir las particiones apropiadas en un solo paso. Requiere que configures las utilidades del sistema de archivos libvirt guest, pero es útil tenerlas de todas formas.

Inspiración desde aquí: http://libguestfs.org/virt-resize.1.html

El comando clave aquí es: virt-resize

  • esta es una utilidad libvirt
  • puede expandir un disco invitado Y expandir las particiones dentro en un solo paso
  • copia el disco, no lo expande en el lugar
    • esto es bueno porque tienes el original intacto como apoyo

Preparación:

* 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

Ahora haz lo siguiente:

1) apagar el invitado:

2) Verifique el tamaño actual y vea el nombre de la partición que desea expandir usando la utilidad libvirt:

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

3) Crea el nuevo disco de salida (40G):

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

4) Copie lo antiguo a lo nuevo mientras expande la partición apropiada (asumiendo que la partición del disco del paso 2 fue / dev / sda1):

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

5) Renombrar el archivo indisk como una copia de seguridad, renombrar el outdisk como indisk (o modificar el invitado XML)

6) Reinicie el invitado y pruebe el nuevo archivo de disco antes de eliminar el archivo original

7) Beneficio!


11
2018-06-13 14:02



Esto casi hace el trabajo en mi caso. Lamentablemente, casi. Cuando el invitado (un servidor CentOS 7) se reinicia, encuentra que el disco expandido no se puede arrancar. - Urhixidur
Funciono muy bien para mi. Omitiendo -o preallocation=metadata crea un archivo disperso. Con esa opción preasigna todo el tamaño. - Dennis Williamson
Excelente, esta respuesta me la clavaron. ¡Muchas gracias! La documentación "oficial" para libguestfs (libguestfs.org/virt-resize.1.html), desafortunadamente no está bien escrito y termina siendo bastante confuso. - mbello
Funcionó bien para mí, recuerda que en realidad no necesitas usar -o preallocation=metadata y si no lo haces también deberías saltarte el truncate paso. virt-resize crecerá el archivo como sea apropiado de todos modos. - amoe


Si está utilizando LVM dentro de la VM, la forma más sencilla de hacerlo sería agregar un nuevo disco virtual a la VM y expandir el grupo de volúmenes y los volúmenes lógicos a esa.

Para comprobar si está utilizando LVM run sudo pvs; sudo vgs; sudo lvs, obtendrás algo como esto:

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 el sistema operativo de la máquina virtual está utilizando LVM. En el ejemplo anterior, la máquina virtual tiene un disco virtual de 30 Gbytes, configurado mediante LVM con un grupo de volúmenes llamado vgWWW que contiene dos volúmenes lógicos, uno para intercambio y otro para todo lo demás.

Si LV está en uso en la máquina virtual:

  1. Apagar la máquina virtual
  2. En el host, cree un nuevo archivo de disco virtual y agréguelo a la VM
  3. Reinicie la máquina virtual e inicie sesión
  4. Marque la nueva unidad como un volumen físico para LVM con sudo pvcreate /dev/vdb
  5. Extienda el grupo de volúmenes para incluir este nuevo bloque de disco con sudo vgextend vgWWW /dev/vdb
  6. Extienda el volumen lógico para ocupar el nuevo espacio con sudo lvextend --extents +100%FREE /dev/vgWWW/root (o algo como sudo lvextend --size +8G /dev/vgWWW/root Si no quieres hacerlo crecer completamente, este ejemplo agregaría 8Gb al volumen)
  7. Cambiar el tamaño del sistema de archivos con resize2fs /dev/vgWWW/root

Nota: lo anterior asume que los nombres de vg / lv son los mismos que en mi ejemplo, lo cual es poco probable, cambie según corresponda, también si la máquina virtual ya tenía un disco virtual llamado vdb el nuevo será otra cosa (vdc, y así)

Nota:  resize2fs Solo funcionará en sistemas de archivos ext2, ext3 y ext4. Si está utilizando algo más, se producirá un error y no hará nada.

Nota: como estás redimensionando un sistema de archivos en vivo resize2fs no te pedirá que corras fsck Primero como lo haría para un sistema de archivos sin montar, simplemente seguirá adelante. Es posible que desee ejecutar una comprobación del sistema de archivos de solo lectura, no hay problemas antes de continuar.


5
2017-10-24 15:10



Esto también se puede hacer con GUI que es bastante agradable centos.org/docs/5/html/Deployment_Guide-en-US/… - Nux


Existe la posibilidad de aumentar el tamaño del disco de su máquina virtual sin reiniciar la máquina virtual si está utilizando la unidad virtio y LVM.

  1. Utilice virt-manager o virsh para definir un nuevo disco vacío
  2. El kernel debería ver un nuevo / dev / vdb
  3. (Opcional) Cree una partición primaria con fdisk para obtener / dev / vdb1, luego use kpartx -a / dev / vdb para volver a leer la tabla de particiones

  4. Use vgextend vg_name / dev / vdb1 (o / dev / vdb si no creó una partición)

  5. Use lvextend -l + 100% FREE / dev / vg_name / lv_name
  6. Use resize2fs / dev / vg_name / lv_name para extender su sistema de archivos

Estas hecho


3
2017-07-12 10:25



Voy a añadir que libguestfs.org/virt-resize.1.html También debería ayudar. - FearlessFuture


Otra forma de hacerlo

truncate -s +2G vm1.img 

Ve a hacer una nueva exploración del disco y después de que puedas hacer el cambio de tamaño de lvm.


2
2018-04-18 17:50





De esta manera puedes expandir la partición que quieras:

    # 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

Ver mas ejemplos aquí.


2
2017-10-01 15:50





Si tienes LVM en tu VM, entonces esto es una locura fácil y rápida.

  1. Desactivar VM (máquina invitada).
  2. En su máquina host agregar nuevo dispositivo de almacenamiento.
  3. Enciende invitado.
  4. Sistema Abierto -> Administración -> Gestión de volumen lógico (o escriba sudo system-config-lvm en la terminal) *.

Encontré la GUI bastante intuitiva, pero sigue los siguientes pasos si tienes problemas.

  1. Abre "Entidades sin inicializar" y encuentra tu nuevo disco.
  2. Después de seleccionar la nueva unidad, debajo de la imagen debe encontrar un botón de inicialización. Presionalo.
  3. Le preguntará sobre la partición, no la necesita.
  4. Cuando haya terminado, agregue su unidad al grupo de volúmenes existente.
  5. Finalmente, necesita aumentar su (s) volumen (s) lógico (s) - esto se hace en la Vista lógica del grupo editando las propiedades de su volumen.
  6. Guarda y listo. No hay necesidad de reiniciar VM.

¡Nota! Al menos en CentOS 6 LVM GUI no está instalado por defecto, pero puede instalarlo con yum install system-config-lvm.


1
2018-06-07 16:12





  1. Apagar la máquina virtual
  2. Cambiar el tamaño de la imagen:

    qemu-img resize vmdisk.img +16G
    

    aumenta el tamaño de la imagen en 16 GB.

  3. Si su imagen tiene GPT (Tabla de partición GUID), el tamaño de la unidad utilizada en GPT diferirá del nuevo tamaño, debe corregirlo con gdisk:

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

    o con parted:

    parted $MY_DRIVE print Fix
    

    Por alguna razón parted La solución no funciona cuando no se presenta tty (por ejemplo, cuando se aprovisiona con Vagrant), así que uso gdisk.

  4. Aumente el tamaño de la partición para llenar todo el espacio 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
    

    los x a 2 <Enter> La parte es opcional y necesaria si está utilizando BIOS heredado. MY_PARTITION_GUID=... y c $MY_PARTITION_GUID las partes también son opcionales y necesarias solo si usa la partición UUID en /etc/fstab o en otro lugar.

  5. Reinicie o vuelva a leer particiones con partx -u $MY_DRIVE o partprobe.

  6. Extender partición, ejemplo para ext2, ext3 o ext4:

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

1
2018-04-05 22:32





Puedes usar solus vm con gparted mount. Una vez utilizado con gparted, puede arrancar fácilmente el sistema y ajustar el espacio. Asegúrese de tener la prioridad de arranque correcta establecida. Como referencia, consulte la siguiente url que podría ser útil. https://greencloudvps.com/knowledgebase/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgrading-VPS.html


0
2017-07-31 12:52