¿Se puede usar virtfs / 9p como sistema de archivos raíz?


11

¿Es posible usar una carpeta compartida desde el host al invitado a través de virtfs / 9p como el sistema de archivos raíz dentro del invitado?

Relacionado con mi pregunta anterior: ¿Se puede usar virtfs / 9p para compartir la misma carpeta de host con varios invitados?


Nunca intenté usar 9p como FS raíz, pero creo que con initrd adecuado no hay nada que pueda impedir que lo hagas.
Alexander Kudrevatykh

1
jor1k hace esto
Janus Troelsen

Lo que sería hermoso es si pudiéramos usar overlayfs con / y la montura 9p como baja, y luego hacer chroot en ella. Pero no es muy útil porque las escrituras en los bajos no están definidas ... Sin embargo, hay otros sistemas de archivos FUSER que lo permiten, pero aún no lo he alcanzado.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Respuestas:


9

Sí, vea, por ejemplo, cómo iniciar una VM con el FS del host:

Agregue los módulos 9p al host initramfs(esa es la forma más fácil, aunque no la más limpia, de tener un initrd con los módulos necesarios):

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'

Si lo ejecuta como un usuario normal, hay archivos a los que no podrá acceder, pero debería poder obtener el indicador de shell y no hará ningún daño:

[    0.000000] Linux version 3.10-3-amd64 (debian-kernel@lists.debian.org) (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.

2
Además, puede usar 'security_model = mapped' para poder acceder por completo al sistema de archivos subyacente, ya que almacena la propiedad y otra información de archivo privilegiado en atributos extendidos del archivo. Esto también le permite montar la lectura-escritura fs en lugar de solo lectura. Ver también enlace
Rutger Nijlunsing

Linux moderno parece ignorar la opción de línea de comando "root = r" y busca incondicionalmente la etiqueta mount_tag "/ dev / root". ¿Alguna objeción a actualizar la respuesta para reflejar eso?
R .. GitHub DEJA DE AYUDAR A ICE

4

Una idea tan sensata como parece al principio, no hagas esto. 9P en su estado actual no puede manejar algunas operaciones bastante básicas, que incluyen:

El 9P en la actualidad no está en un estado apto para ser utilizado en la producción.

Si bien puede hacer un sistema de arranque con 9P como el sistema de archivos raíz, operar esa VM causará una pena considerable: si usa Debian, el defecto mencionado anteriormente evitará que funcione la actualización de apt-get. Los parches para solucionar este problema no han ido a ninguna parte durante años.

Si insiste en hacer esto, los rootflags deberían ser "rootflags = trans = virtio, cache = mmap", de lo contrario, la asignación de memoria de lectura / escritura no funcionará (utilizada, por ejemplo, MariaDB).


Aunque no me gusta, gracias por el aporte. Actualmente estoy pensando en colocar el arranque y la raíz en un contenedor de archivos adecuado y algunos de los datos que se supone que deben compartirse en 9p ...
0xC0000022L

1

Si seguro. Agregar a la línea de comando del kernel:

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

Y puede arrancar sin initrd (si se compila 9P en el núcleo, en lugar de como módulos).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.