¿Es posible cambiar el tamaño del disco en línea con KVM?

15

Estamos evaluando KVM para la virtualización de Linux en algunos proyectos. Todo va bien hasta ahora. Pero uno de nuestros requisitos es la capacidad de agregar espacio en disco a un invitado en ejecución sin reiniciarlo o desconectarlo. ¿Es esto posible con KVM?

Lo único que he encontrado hasta ahora (pero aún no lo he probado) es la capacidad de conectar discos en caliente a la máquina. Si sigo esta ruta, siempre podría agregar el nuevo disco a un grupo de volúmenes LVM en el invitado y luego extender el volumen lógico elegido. El mayor inconveniente de este enfoque es que con el tiempo podríamos terminar con invitados que tengan un número variable de discos virtuales. El espacio en disco "real" se proporcionaría al host a través de una SAN, por lo que siempre podemos agregar más espacio al host cuando lo desee.

Eil
fuente
(Y "Sí", es posible.)
poige

Respuestas:

4

Creo que estás atrapado haciendo lo que has mencionado si quieres hacerlo sin desmontar la máquina.

¿Por qué no simplemente dar a las máquinas virtuales LUN directamente desde la SAN y administrar el espacio allí? Esto funciona mejor si desea utilizar características como la migración en vivo de todos modos.

KVM se basa en QEMU, por lo que todo su soporte de formato de imagen proviene de ese proyecto. Aquí hay un buen cómo cambiar el tamaño de los diversos formatos que admite Qemu / KVM. Pero el foro Qemu sería un buen lugar para hacer esta pregunta si no obtiene respuestas sólidas aquí.

Otra opción que puede no ser ideal es utilizar qcow2 realmente grande u otro formato de imagen disperso para las unidades. Por lo tanto, podría darle a cada máquina una unidad pequeña para el sistema operativo y una imagen dispersa grande para datos bajo LVM. Esto al menos mantendría la cantidad de unidades / imágenes virtuales que tiene que administrar. Sin embargo, este aprovisionamiento delgado podría ser un problema si lo hace a 1000 máquinas y todos lo ocupan en el espacio libre que ven.

XEN creo que tiene las mismas limitaciones actualmente.

3dinfluence
fuente
En consideración adicional, montar el almacenamiento SAN desde el propio huésped como usted menciona es probablemente el camino a seguir. Y gracias por la información adicional también.
Eil
el aprovisionamiento delgado también puede ser costoso debido a la fragmentación.
wazoox
15

Sé que es una vieja pregunta, pero la encontré mientras busqué en Google la solución y espero que pueda ayudar a alguien más.

En cuanto a hoy, es posible cambiar el tamaño del disco duro de la máquina. He encontrado una manera de trabajar aquí:

https://bugzilla.redhat.com/show_bug.cgi?id=648594

Se deben realizar los siguientes pasos:

  1. Encuentre el nombre del archivo y el nombre del dispositivo KVM del disco duro que desea cambiar de tamaño:

    root@vhstage02:/data# virsh dumpxml test | xpath -e /domain/devices/disk
    Found 2 nodes in stdin:
    -- NODE --
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2" />
      <source file="/data/test.img" />
      <backingStore />
      <target dev="vda" bus="virtio" />
      <alias name="virtio-disk0" />
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0" />
    </disk>
    -- NODE --
    <disk type="file" device="cdrom">
      <driver name="qemu" type="raw" />
      <source file="/data/images/debian-8.2.0-amd64-netinst.iso" />
      <backingStore />
      <target dev="hda" bus="ide" />
      <readonly />
      <alias name="ide0-1-1" />
      <address type="drive" controller="0" bus="1" target="0" unit="1" />
    </disk>
    

El que nos interesa es el disco. Debes buscar sourcey aliasbloques. Para mí, el nombre del archivo es test.imgy el nombre del alias es virtio-disk0. Para este nombre, debe anteponer drive-para obtener el nombre de la unidad qemu.

  1. Ahora cambiamos el tamaño del disco usando el monitor qemu:

    virsh qemu-monitor-command test block_resize  drive-virtio-disk0  100G --hmp
    

Tenga en cuenta que el nombre de archivo se usó sin la extensión .img y la unidad se agregó al alias del disco. El 100G es el tamaño resultante de la unidad que queremos tener

  1. Inicie sesión en la máquina y compruebe que se modificó el tamaño real:

    root@test:~# fdisk -l
    
    Disk /dev/vda: 100 GiB, 107374182400 bytes, 209715200 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x7e6e7f71
    
    Device     Boot  Start       End   Sectors  Size Id Type
    /dev/vda1  *      2048    499711    497664  243M 83 Linux
    /dev/vda2       501758 167770111 167268354 79.8G  5 Extended
    /dev/vda5       501760 167770111 167268352 79.8G 8e Linux LVM
    

¡Eso es! Ahora puede crear nuevas particiones o cambiar el tamaño de las existentes.

alexK
fuente
1
¡Gracias por regresar y agregar esta respuesta! Hace las cosas mucho más simples que la antigua forma de hacerlo.
Dave Sherohman
4

AFAIK, esto no es posible: puede agregar nuevas imágenes de disco y, como señala, también puede agregar nuevas imágenes a un volumen LVM, pero para cambiar el tamaño de una imagen de disco activa y de arranque, debe poder cerrarla abajo y editar las particiones.

Aquí hay una buena explicación para expandir una imagen. Aunque requiere el apagado, probablemente podría salirse con solo un par de minutos de tiempo de inactividad, especialmente si evita la opción de imagen no dispersa y hace que el disco dividido en un archivo iso y se monte en su invitado KVM por adelantado. Espero que esto ayude.

nedm
fuente
2
El problema no está realmente relacionado con KVM; desde Linux simplemente no puede cambiar el tamaño del disco desde el que ha arrancado. También se aplica a matrices RAID físicas.
wazoox
3

Es posible mover un sistema Linux entre discos mientras se está ejecutando. La limitación es que no puede alterar particiones en un disco que tiene particiones en uso.

Para hacer esto, su sistema de archivos raíz debe estar en un LVM, esto a menudo significa que tiene que tener un sistema de archivos de arranque separado (sin embargo, esto no es esencial, solo facilita las cosas)

Después de enchufar el nuevo disco, lo agrega al LVM con vgextend, usa pvmove para mover los rootfs al nuevo disco, usa lvextend y resize2fs para expandir el volumen lógico y el sistema de archivos respectivamente, luego usa vgreduce para eliminar el disco viejo del volumen grupo. Una vez eliminado, el volumen anterior se puede desenchufar.

Para el caso simple, tiene un pequeño disco para el sistema de archivos de arranque que nunca tiene que tocar. Pero si está solo, es fácil desmontarlo, desenchufarlo, enchufar uno nuevo y reconstruir el disco de arranque sin detener el sistema. (simplemente no te cuelgues mientras lo haces)

Nota: resize2fs también puede reducir los sistemas de archivos.

Robert
fuente
0

Cajero automático no posible, pero afaik es una característica en desarrollo. En cambio, lo que puede hacer es conectarse a un objetivo iSCSI desde la VM y administrar el espacio en ese objetivo en el lado SAN.

dyasny
fuente
No respondiste la pregunta con una respuesta que él pueda usar.
Mei
@David: ¿y qué te hace pensar eso e incluso rechazar mi respuesta? ¿Cómo mi respuesta no proporciona una solución al problema en cuestión?
dyasny
Usted dijo "No es posible cajero automático ..." y luego le habló de una característica que no es posible en este momento. (Ahora, casi dos años después, podría ser diferente, pero esta respuesta no dice eso.)
Mei
1
¿Entonces hace dos años debería haberle dicho "será posible en dos años"? ¿Te parezco un profeta? En aquel entonces, la conexión en caliente estaba en desarrollo, y eso es exactamente lo que dije. Luego ofrecí un enfoque diferente para conectar el almacenamiento a la VM, que sería independiente de todo el conjunto de características qemu. Nunca dije que era el único enfoque, pero es una forma.
dyasny
Ahora entiendo ... Edité tu respuesta para mostrar mejor tu intención.
Mei