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.