qemu não inicia a missão com imagem de disco no tmpfs

qemu não inicia a missão com imagem de disco no tmpfs

Eu tenho um convidado do Windows 2k3r3 de 32 bits (servidor de terminal) com 4 GB de RAM convidado e troca.

Criei uma imagem de disco separada para troca de convidados e diretórios temporários do usuário.

Tenho RAM suficiente no sistema host e quero salvar a E/S do disco movendo esta imagem para tmpfs, mas o convidado não inicia com esta mensagem de erro:

qemu-kvm: -drive file=/mnt/tmpfs/vh1-tmp.qcow2,if=none,id=drive-ide0-1-1,format=qcow2,cache=none: não foi possível abrir o disco imag│ 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 inválido

Sistema hospedeiro:

#unome -a
Linux srv-vh1.su.local 3.7.10-1.16-default #1 SMP Sex, 31 de maio 20:21:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

srv-vh1:/mnt/tmpfs # versão virsh
Compilado na biblioteca: libvirt 1.0.2
Usando biblioteca: libvirt 1.0.2
Usando API: QEMU 1.0.2
Executando hipervisor: QEMU 1.3.0

srv-vh1:/mnt/tmpfs # grátis
             total de buffers compartilhados livres usados ​​armazenados em cache
Memória: 24627548 5084724 19542824 0 60640 138792
-/+ buffers/cache: 4885292 19742256
Troca: 8384444 0 8384444

srv-vh1:/mnt/tmpfs # cat /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 /run 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 arquivos 1K blocos usados ​​Disponível Usado% Ponto de montagem
devtmpfs 12296608 68 12296540 1% /dev
tmpfs 12313772 0 12313772 0% /dev/shm
tmpfs 12313772 6772 12307000 1% /execução
/dev/md1 454131992 218835836 212227596 51% /
tmpfs 12313772 0 12313772 0% /sys/fs/cgroup
tmpfs 12313772 192 12313580 1% /mnt/tmpfs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tmpfs 12313772 20 12313752 1% /tmp
tmpfs 12313772 6772 12307000 1% /var/lock
tmpfs 12313772 6772 12307000 1% /var/executar

srv-vh1:/mnt/tmpfs # virsh pool-info tmpfs
Nome: tmpfs
UUID: 6287028a-9faf-f762-20de-d36d63657be3
Situação: trabalhando
Persistente: sim
Inicialização automática: sim
Capacidade: 11,74 GiB
Valor: 0,00
Disponível: 11,74 GiB

srv-vh1:/mnt/tmpfs # ls -la
total 196
drwxrwxrwt 2 root root 60 de setembro 9 11:42 .
drwxrwxr-x 4 qemu qemu 4096 8 de setembro 19:39 ..
-rw-rw-rw- 1 root root 197120 9 de setembro 11:42 tserver-tmp.qcow2

O que estou fazendo de errado ?

Responder1

Aparentemente, se você definir cache=NONE para um arquivo de imagem de disco em qualquer sistema de arquivos host que não suporte Direct IO, o Virt-Manager atualmente exibirá uma mensagem de erro não muito útil dizendo "Alguma coisa... Argumento inválido" e se recusará a iniciar a VM convidada.

Um exemplo de tal sistema de arquivos – que não suporta Direct IO – é o tmpfs. Outro sistema de arquivos onde talvez você possa desativar opcionalmente o Direct IO é o GlusterFS (do qual eu não tinha ouvido falar antes, também tive o mesmo problema que Sergei e estava pesquisando o erro). Para tmpfs, não suportar Direct IO parece ser uma limitação técnica. ou conflito de design no momento e não sei se será/pode ser corrigido no futuro.

No meu caso, coloquei um Ramdisk de 3,6 GB para uma VM convidada Win7Pro em execução no CentOS7 e configurei cache=NONE para o ramdisk no Virt-Manager. As outras opções que o tmpfs img usou foram virtio e raw. A VM se recusaria a iniciar com o mesmo erro/semelhante dizendo "... Argumento inválido".

Para obter detalhes técnicos e notas diretamente do engenheiro e desenvolvedor Redhat que codificou o patch para o feature cache=NONE e mantém (?) Virt-Manager (Daniel Berrange), consulte a discussão no seguinte link:

https://bugs.launchpad.net/nova/+bug/959637

Para citar Daniel do URL acima: "> não foi possível abrir a imagem de disco /mnt/vmstore/instances/instance-0000001a/disk: argumento inválido

provavelmente significa que o sistema de arquivos não suporta Direct IO. AFAIK, todos os sistemas de arquivos, exceto tmpfs, devem suportar isso.."

Além disso, Daniel continua: "- Então, o que queremos fazer é [....] verificar se o volume de armazenamento suporta Direct IO. Se isso acontecer, use cache=none, caso contrário, retorne para cache= writethrough que não usa Direct I/O, mas ainda é seguro contra falhas."

No meu caso, consegui verificar se a configuração cache=NONE para o arquivo tmpfs img NÃO estava iniciando a VM e mostrou o erro conforme discutido. Foi possível iniciar a VM com êxito se o cache foi definido como "Padrão" ou explicitamente como "Write-through". Não faz sentido usar o "Write-back", já que esse sistema de arquivos é dispensável e, de qualquer forma, está inteiramente na RAM, então obviamente eu não usei o Write-back.

Espero que ajude!

Responder2

Por que não dar ao convidado mais memória RAM para que ele não precise trocar?

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

Percebi que você tem o proprietário da pasta definido como qemu:qemu. Se você estiver executando o qemu como um usuário diferente, talvez queira alterar o proprietário do arquivo de imagem de root para qemu

Responder3

É um bug. tmpfs não suporta cache=none.

informação relacionada