O virtfs / 9p pode ser usado como sistema de arquivos raiz?

10

É possível usar uma pasta compartilhada do host para o convidado via virtfs / 9p como o sistema de arquivos raiz dentro do convidado?

Vagamente relacionado à minha pergunta anterior: O virtfs / 9p pode ser usado para compartilhar a mesma pasta de host com vários convidados?

    
por 0xC0000022L 12.09.2013 / 20:37

3 respostas

7

Sim, veja por exemplo como inicializar uma VM com o FS do host:

Adicione os módulos 9p ao host initramfs (essa é a maneira mais fácil, embora não a mais limpa, de ter um initrd com os módulos necessários):

printf '%s\n' 9p 9pnet 9pnet_virtio | sudo tee -a /etc/initramfs-tools/modules
sudo update-initramfs -u

qemu -kernel "/boot/vmlinuz-$(uname -r)" \
  -initrd "/boot/initrd.img-$(uname -r)" \
  -fsdev local,id=r,path=/,security_model=none \
  -device virtio-9p-pci,fsdev=r,mount_tag=r \
  -nographic \
  -append 'root=r ro rootfstype=9p rootflags=trans=virtio console=ttyS0 init=/bin/sh'

Se você executá-lo como um usuário normal, existem arquivos que ele não poderá acessar, mas você deve ser capaz de obter o prompt do shell e não causará nenhum dano:

[    0.000000] Linux version 3.10-3-amd64 ([email protected]) (gcc version 4.7.3 (Debian 4.7.3-7) ) #1 SMP Debian 3.10.11-1 (2013-09-10)
[    0.000000] Command line: root=r rootfstype=9p rootflags=trans=virtio console=ttyS0 init=/bin/sh
[...]
Loading, please wait...
[    0.564122] systemd-udevd[52]: starting version 204
[...]
Begin: Loading essential drivers ... [    1.007951] FS-Cache: Loaded
[    1.009958] 9p: Installing v9fs 9p2000 file system support
[    1.012880] FS-Cache: Netfs '9p' registered for caching
done.
Begin: Running /scripts/init-premount ... done.
[...]
sh-4.2# ls /
bin   home            lib32       media    opt   safe  tmp      vmlinuz.old
boot  initrd.img      lib64       mnt      proc  sbin  usr
dev   initrd.img.old  libx32      old      root  srv   var
etc   lib             lost+found  old-tmp  run   sys   vmlinuz
sh-4.2# poweroff -f
[   56.958724] ACPI: Preparing to enter system sleep state S5
[   56.960332] Power down.
    
por 09.10.2013 / 12:32
1

Por mais sensata que uma ideia pareça a princípio, não faça isso. 9P em seu estado atual não pode lidar com algumas operações básicas, incluindo:

  • open () ... unlink () ... fstat () em um arquivo.

9P atualmente não está em um estado adequado para ser usado na produção.

Embora você possa criar um sistema inicializável com 9P como o sistema de arquivos raiz, operar essa VM causará sofrimento significativo - se estiver usando Debian, o defeito listado acima impedirá que o upgrade do apt-get funcione. Patches para corrigir este problema não deram em nada por anos.

Se você insistir em fazer isso, os rootflags deverão ser "rootflags = trans = virtio, cache = mmap", caso contrário, o mapeamento de memória de leitura / gravação não funcionará (usado, por exemplo, pelo MariaDB).

    
por 07.07.2017 / 20:59
0

Sim, claro. Adicionar à linha de comando do kernel:

root=host rootfstype=9p rootflags=trans=virtio

E você pode inicializar sem o initrd (se o 9P for compilado no kernel, e não como módulos).

    
por 25.05.2016 / 22:19