Virtfs / 9p può essere usato come file system radice?


11

È possibile utilizzare una cartella condivisa dall'host al guest tramite virtfs / 9p come file system radice all'interno del guest?

Liberamente correlato alla mia domanda precedente: virtfs / 9p può essere utilizzato per condividere la stessa cartella host con più guest?


Non ho mai provato a 9p come root FS, ma penso che con un initrd corretto non ci sia nulla che possa impedirti di farlo.
— Alexander Kudrevatykh,


La cosa bella sarebbe se potessimo usare overlayfs con / e il mount 9p come abbassa, quindi chroot in esso. Ma non riesce a essere molto utile perché le scritture sui bassi sono indefinite ... Ci sono comunque altri filesystem FUSER che lo consentono, ma non l'ho ancora raggiunto.
— Ciro Santilli 17 病毒 审查 六四 事件 法轮功

Risposte:


9

Sì, vedi ad esempio come avviare una macchina virtuale con l'FS dell'host:

Aggiungi i moduli 9p all'host initramfs(questo è il modo più semplice sebbene non il più pulito, per avere un initrd con i moduli necessari):

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 lo esegui come un normale utente, ci sono file a cui non sarà possibile accedere, ma dovresti essere in grado di ottenere il prompt della shell e non farà alcun danno:

[    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
Inoltre, è possibile utilizzare "security_model = mapped" per poter accedere completamente al file system sottostante poiché memorizza la proprietà e altre informazioni sui file privilegiati negli attributi estesi del file. Questo ti permette anche di montare la fs read-write invece che di sola lettura. Vedi anche link
— Rutger Nijlunsing

Linux moderno sembra ignorare l'opzione della riga di comando "root = r" e cerca incondizionatamente il mount_tag "/ dev / root". Qualche obiezione all'aggiornamento della risposta per riflettere ciò?
— R .. GitHub smette di aiutare ICE il

4

Per quanto un'idea sensata come questa sembra inizialmente, non farlo. 9P nel suo stato attuale non può gestire alcune operazioni abbastanza basilari, tra cui:

9P al momento non è idoneo per essere utilizzato in produzione.

Sebbene sia possibile creare un sistema avviabile con 9P come file system radice, il funzionamento di quella VM causerà un dolore significativo - se si utilizza Debian, il difetto sopra elencato impedirà il funzionamento di apt-get upgrade. Le patch per risolvere questo problema non vanno da nessuna parte da anni.

Se insisti nel fare ciò, i rootflags dovrebbero essere "rootflags = trans = virtio, cache = mmap", altrimenti la mappatura della memoria di lettura / scrittura non funzionerà (utilizzata ad esempio da MariaDB).


Anche se non mi piace, grazie per l'input. Attualmente sto meditando di collocare boot e root in un contenitore di file adeguato e alcuni dei dati che dovrebbero essere condivisi in 9p ...
— 0xC0000022L

1

Si certo. Aggiungi alla riga di comando del kernel:

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

E puoi avviare senza initrd (se 9P è compilato nel kernel, piuttosto che come moduli).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.