Tengo un invitado Windows 2k3r3 de 32 bits (servidor de terminal) con 4 GB de RAM invitado e intercambio.
Creé una imagen de disco separada para el intercambio de invitados y los directorios temporales del usuario.
Tengo suficiente RAM en el sistema host y quiero guardar la E/S del disco moviendo esta imagen a tmpfs, pero el invitado no comienza con este mensaje de error:
qemu-kvm: -drive file=/mnt/tmpfs/vh1-tmp.qcow2,if=none,id=drive-ide0-1-1,format=qcow2,cache=none: no se pudo abrir la imagen del disco│ 4098 qemu 20 0 4949M 4146M 5496 S 28.5 17.2 1h00:31 /usr/bin/qemu-kvm -name vh1 -S -M pc-1.3 -cpu kvm64 -enable- e /mnt/tmpfs/vh1-tmp.qcow2: argumento no válido
Sistema anfitrión:
#nombre-a Linux srv-vh1.su.local 3.7.10-1.16-default #1 SMP Viernes 31 de mayo 20:21:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux srv-vh1:/mnt/tmpfs # versión virsh Compilado contra la biblioteca: libvirt 1.0.2 Usando la biblioteca: libvirt 1.0.2 Usando API: QEMU 1.0.2 Hipervisor en ejecución: QEMU 1.3.0 srv-vh1:/mnt/tmpfs # gratis total de buffers compartidos gratuitos utilizados en caché Memoria: 24627548 5084724 19542824 0 60640 138792 -/+ buffers/caché: 4885292 19742256 Permuta: 8384444 0 8384444 srv-vh1:/mnt/tmpfs # gato /etc/mtab | greptmpfs devtmpfs /dev devtmpfs rw,relatime,size=12296608k,nr_inodes=3074152,mode=755 0 0 tmpfs /dev/shm tmpfs rw,relatime 0 0 tmpfs /ejecutar tmpfs rw,nosuid,nodev,relatime,mode=755 0 0 tmpfs /sys/fs/cgroup tmpfs rw,nosuid,nodev,noexec,mode=755 0 0 tmpfs /mnt/tmpfs tmpfs rw,relatime 0 0 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tmpfs /tmp tmpfs rw,relatime 0 0 tmpfs /var/lock tmpfs rw,nosuid,nodev,relatime,mode=755 0 0 tmpfs /var/run tmpfs rw,nosuid,nodev,relatime,mode=755 0 0 srv-vh1:/mnt/tmpfs # df Sistema de archivos 1K bloques usados Disponible% usado Punto de montaje devtmpfs 12296608 68 12296540 1% /desarrollo tmpfs 12313772 0 12313772 0% /dev/shm tmpfs 12313772 6772 12307000 1% /ejecución /dev/md1 454131992 218835836 212227596 51% / tmpfs 12313772 0 12313772 0% /sys/fs/cgrupo tmpfs 12313772 192 12313580 1% /mnt/tmpfs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tmpfs 12313772 20 12313752 1% /tmp tmpfs 12313772 6772 12307000 1% /var/bloqueo tmpfs 12313772 6772 12307000 1% /var/ejecutar srv-vh1:/mnt/tmpfs # virsh pool-info tmpfs Nombre: tmpfs UUID: 6287028a-9faf-f762-20de-d36d63657be3 Estado: trabajando Persistente: si Inicio automático: sí Capacidad: 11,74 GiB Valor: 0,00 Disponible: 11,74 GiB srv-vh1:/mnt/tmpfs # ls -la total 196 drwxrwxrwt 2 raíz raíz 60 septiembre 9 11:42. drwxrwxr-x 4 qemu qemu 4096 сен 8 19:39 .. -rw-rw-rw- 1 raíz raíz 197120 9 de septiembre 11:42 tserver-tmp.qcow2
Qué estoy haciendo mal ?
Respuesta1
Aparentemente, si configura cache=NONE para un archivo de imagen de disco en cualquier sistema de archivos host que no admita Direct IO, Virt-Manager actualmente mostrará un mensaje de error no muy útil que dice "Algo... Argumento no válido" y se negará a iniciar la máquina virtual invitada.
Un ejemplo de un sistema de archivos de este tipo, que no admite Direct IO, es tmpfs. Otro sistema de archivos de este tipo en el que tal vez puedas deshabilitar opcionalmente Direct IO es GlusterFS (del que no había oído hablar antes, también tuve el mismo problema que Sergei y estaba investigando el error). Para tmpfs, no admitir Direct IO parece ser una limitación técnica. o conflicto de diseño en la actualidad y no sé si podrá o podrá rectificarse en el futuro.
En mi caso, puse un disco RAM de 3,6 GB para una máquina virtual invitada Win7Pro que se ejecuta en CentOS7 y configuré cache=NONE para el disco RAM en Virt-Manager. Las otras opciones que utilizó tmpfs img fueron virtio y raw. La máquina virtual se negaría a comenzar con el mismo error o similar diciendo "... Argumento no válido".
Para obtener detalles técnicos y notas directamente del ingeniero y desarrollador de Redhat que codificó el parche para la función cache=NONE y mantiene (?) Virt-Manager (Daniel Berrange), consulte la discusión en el siguiente enlace:
https://bugs.launchpad.net/nova/+bug/959637
Para citar a Daniel de la URL anterior: " > no se pudo abrir la imagen del disco /mnt/vmstore/instances/instance-0000001a/disk: argumento no válido
Probablemente signifique que el sistema de archivos no admite Direct IO. AFAIK, todos los sistemas de archivos excepto tmpfs deberían admitir esto..."
Además, Daniel continúa: "- Entonces, lo que queremos hacer es [....] verificar si el volumen de almacenamiento admite Direct IO. Si es así, use cache=none; de lo contrario, recurra a cache= escritura a través de la cual no utiliza E/S directa, pero aún así es a prueba de fallos."
En mi caso, pude verificar que la configuración cache=NONE para el archivo tmpfs img NO estaba iniciando la VM y mostró el error como se explicó. Pudo iniciar con éxito la máquina virtual si el caché estaba configurado en "Predeterminado" o explícitamente en "Escritura simultánea". No tiene sentido optar por "Reescritura", ya que este sistema de archivos es prescindible y de todos modos estaba completamente en la RAM, por lo que obviamente no usé la Reescritura.
¡Espero que ayude!
Respuesta2
¿Por qué no darle más RAM al invitado para que no sea necesario cambiarlo?
srv-vh1:/mnt/tmpfs # ls -la
total 196
drwxrwxrwt 2 root root 60 сен 9 11:42 .
drwxrwxr-x 4 qemu qemu 4096 сен 8 19:39 ..
-rw-rw-rw- 1 root root 197120 сен 9 11:42 tserver-tmp.qcow2
Noté que tienes el propietario de la carpeta configurado en qemu:qemu. Si estás ejecutando qemu como un usuario diferente, es posible que desees cambiar el propietario del archivo de imagen de raíz a qemu.
Respuesta3
Es un error. tmpfs no es compatible cache=none
.