23 votos

¿KVM/qemu - uso volúmenes LVM directamente sin necesidad de archivo de imagen?

No estoy muy seguro de cómo frase esta pregunta (de ahí el título pobre), así que permítanme dar un ejemplo de lo que estoy tratando de hacer.

En mi (edad) Xen host, soy capaz de presentar LVM sistemas de ficheros directamente a cada invitado. Estos sistemas de ficheros son en realidad creado y el formato en el host, y se pasa directamente a través de. Ej., para uno de mis anfitriones con otro tmp y particiones swap, yo defino el almacenamiento como este:

disco = [
'phy:/dev/vg1/guest1-swap,sda1,w',
'phy:/dev/vg1/guest1 disco,sda2,w',
'phy:/dev/vg1/guest1-tmp,sda3,w',
]

Así, guest1 de intercambio con formato de una partición de intercambio, guest1 de disco y guest1-tmp está formateado con el sistema de archivos ext4, y el invitado de la perspectiva simplemente se ve como tres particiones formateadas en /dev/sda.

(Esto puede sonar como un montón de trabajo, pero hay secuencias de comandos aprovisionamiento, tales como la impresionante xen-tools, que automatiza casi todo).

Esto proporciona realmente útil capacidades, dos de los cuales estoy especialmente interesada en averiguar para KVM:

  • Monte el huésped de los sistemas de ficheros del sistema operativo del host. Puedo hacer una lectura-sólo para montar cualquier tipo de cliente del sistema de ficheros en cualquier momento, incluso cuando el huésped está ejecutando. Esto tiene el beneficio de permitir a mi para crear instantáneas de LVM de cualquier volumen existente, mientras que el huésped se está ejecutando. De esta manera, yo soy capaz de copia de seguridad de forma centralizada todos mis invitados, mientras se ejecuta, desde el host.

  • En línea el volumen de cambio de tamaño. Debido a que los volúmenes que contienen estándar de sistemas de ficheros Linux, puede utilizar una combinación de lvextend y resize2fs a crecer mi invitado sistemas de ficheros, de nuevo mientras están en línea.

Actualmente estoy a la configuración de un host de KVM que reemplazará el host Xen. Similar a la de configuración de Xen estoy aprovechando LVM para proporcionar directa del sistema de ficheros de acceso, pero KVM/qemu se comporta de forma diferente en que siempre se crea un archivo de imagen para los huéspedes, incluso en el volumen LVM. El invitado de la perspectiva, se considera a este como un particiones de disco, y es el invitado para aplicar una etiqueta de la partición, a continuación, crear las particiones y sistemas de ficheros.

A partir de un huésped perspectiva que está bien, pero desde un servidor/la perspectiva de la gestión parece ser mucho menos flexible que el de Xen a la configuración descrita. Todavía estoy nuevo en KVM, así que puede ser (con suerte) de que falta algo.

Me encontré con este problema al intentar volver a implementar mi ex solución de copia de seguridad en el host de KVM y el comando mount se ahogaron cuando traté de montar uno de los invitados de sistemas de ficheros. Así, abordar esa es mi preocupación actual, pero también me preocupa el tamaño de cosa, porque estoy seguro de que el problema vendrá en algún momento así.

Así que, aquí están mis preguntas:

  1. Es allí cualquier manera de tener kvm/qemu uso de volúmenes LVM sistemas de ficheros directamente como he descrito para mi de configuración de Xen? Yo uso libvirt para la gestión de si lo que hace la diferencia.

  2. Si no, ¿qué puedo hacer para obtener similar de montaje/funcionalidad de copia de seguridad en virtud de KVM? He visto discusiones sobre el uso de libguestfs w/ FUSIBLE para hacer esto, pero es que realmente la mejor opción? Prefiero seguir con un nativo de montar el sistema de ficheros, si es posible.

  3. También, si no, es posible hacer un sistema de ficheros en línea redimensionar bajo KVM? He encontrado varios debates/howtos acerca de esto, pero las respuestas parecen estar todo el lugar sin una clara y definitivamente no es sencillo, en las soluciones.

Lo siento por el largo post, sólo quería asegurarse de que estaba claro. Por favor, hágamelo saber si me puede proporcionar cualquier otra información que pueda ser útil. Mirando hacia adelante a la discusión. :-)

10voto

dyasny Puntos 11858
  1. qemu-kvm puede utilizar LVs como discos virtuales en lugar de archivos. este es un caso de uso habitual en realidad.
  2. libguestfs (y buscar un conjunto de virt-* herramientas) puede proporcionar el acceso a los invitados de los sistemas de ficheros en un limpiador de manera que cualquier cosa que usted vuelva a montar el host directamente, a pesar de que ambas son posibles.
  3. En línea FS cambio de tamaño no es una característica de kvm, pero algo en el SO huésped debe ser capaz de hacer. resize2fs va a trabajar en una máquina virtual, así como lo hace en hardware físico, el único problema es que el huésped redetecting los cambios de tamaño. Intente virt-resize como la herramienta estándar, pero lvresize y qemu-img también puede ser utilizado fácilmente (aunque en modo sin conexión, que requieren de un huésped reiniciar normalmente).

Creo lvresize con resize2fs realmente va a funcionar sin un huésped de reiniciar, pero yo no lo he probado todavía

5voto

Puedo usar qemu-kvm+libvirt con exactamente la configuración que usted está preguntando acerca de, por las razones que figuran, pero, además, porque me dan mucho mejor rendimiento sin el KVM de host del sistema de ficheros de la capa en el ámbito. Si se agrega la VG como una "agrupación de almacenamiento" en virt-manager, usted puede crear este tipo de VMs con su fácil de usar asistente. (Pero me acaba de escribir el código XML de la mano de estos días, utilizando una mv existente como una plantilla).

Aquí está depurada de salida de 'virsh dumpxml' para uno de mis clientes:

<domain type='kvm'>
  <name>somevm</name>
  <uuid>f173d3b5-704c-909e-b597-c5a823ad48c9</uuid>
  <description>Windows Server 2008 R2</description>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-1.1'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>Nehalem</model>
    <vendor>Intel</vendor>
    <feature policy='require' name='tm2'/>
    <feature policy='require' name='est'/>
    <feature policy='require' name='monitor'/>
    <feature policy='require' name='smx'/>
    <feature policy='require' name='ss'/>
    <feature policy='require' name='vme'/>
    <feature policy='require' name='dtes64'/>
    <feature policy='require' name='rdtscp'/>
    <feature policy='require' name='ht'/>
    <feature policy='require' name='ds'/>
    <feature policy='require' name='pbe'/>
    <feature policy='require' name='tm'/>
    <feature policy='require' name='pdcm'/>
    <feature policy='require' name='vmx'/>
    <feature policy='require' name='ds_cpl'/>
    <feature policy='require' name='xtpr'/>
    <feature policy='require' name='acpi'/>
  </cpu>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/vg1/somevm'/>
      <target dev='hda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <interface type='bridge'>
      <mac address='00:00:00:00:00:00'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes'/>
    <video>
      <model type='vga' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='none' model='none'/>
</domain>

Otro pensamiento (no es relevante para tu pregunta, pero podría ser de ayuda): si puedes, asegúrate de que estás usando la 'paravirtualised' de la red, bloquear, al azar, reloj etc conductores son considerablemente más rápido que los sistemas totalmente virtualizados. Este es el "modelo=virtio" cosas de arriba. Tienes que cargar los módulos de los controladores en el host del kernel como virtio_net.

2voto

hpmarsum Puntos 11

No sé de una manera de reproducir exactamente el comportamiento de Xen que describes. Sin embargo, puede utilizar kpartx para exponer las particiones en un LV que contiene una imagen de disco entero como dispositivos de bloque en el host, que puede entonces montar, etc..

2voto

Bittrance Puntos 1926

Ver mi respuesta a mi pregunta sobre este tema en el núcleo de imagen de arranque KVM y partición existente. En definitiva, virt-instalación para crear una configuración para esto es bastante directa, dada una ligera modificación de comentarios/etc/fstab.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: