Kann virtfs / 9p als Root-Dateisystem verwendet werden?

10

Ist es möglich, einen vom Host für den Gast über virtfs / 9p freigegebenen Ordner als Root-Dateisystem im Gast zu verwenden?

Im Zusammenhang mit meiner vorherigen Frage: Kann virtfs / 9p verwendet werden, um denselben Hostordner für mehrere Gäste freizugeben?

0xC0000022L
quelle
Ich habe nie versucht, 9p als Root-FS zu verwenden, aber ich denke, dass es mit der richtigen initrd nichts gibt, was Sie daran hindern könnte.
Alexander Kudrevatykh
1
jor1k macht das
Janus Troelsen
Was schön wäre, wäre, wenn wir Overlays mit / und dem 9p-Mount als Tieferlegung verwenden und dann hineinwühlen könnten. Aber es ist nicht sehr nützlich, weil Schreibvorgänge in die unteren Bereiche undefiniert sind ... Es gibt jedoch andere FUSER-Dateisysteme, die dies meiner Meinung nach zulassen, aber ich habe es noch nicht erreicht.
Ciro Santilli 事件 改造 中心 法轮功 六四

Antworten:

8

Ja, siehe zum Beispiel, wie eine VM mit dem FS des Hosts gestartet wird:

Fügen Sie die 9p-Module zum Host hinzu initramfs(dies ist der einfachste, wenn auch nicht der sauberste Weg, um eine initrd mit den benötigten Modulen zu haben):

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'

Wenn Sie es als normaler Benutzer ausführen, gibt es Dateien, auf die es nicht zugreifen kann, aber Sie sollten in der Lage sein, die Shell-Eingabeaufforderung zu erhalten, und es wird keinen Schaden anrichten:

[    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.
Stéphane Chazelas
quelle
1
Darüber hinaus können Sie 'security_model = mapped' verwenden, um vollständig auf das zugrunde liegende Dateisystem zugreifen zu können, da es Besitz- und andere privilegierte Dateiinformationen in erweiterten Attributen der Datei speichert. Auf diese Weise können Sie auch fs read-write anstelle von readonly bereitstellen. Siehe auch Link
Rutger Nijlunsing
Modernes Linux scheint die Befehlszeilenoption "root = r" zu ignorieren und sucht bedingungslos nach dem mount_tag "/ dev / root". Gibt es Einwände gegen die Aktualisierung der Antwort, um dies widerzuspiegeln?
R .. GitHub STOP HELPING ICE
2

So vernünftig eine Idee auch erscheint, tun Sie dies nicht. 9P kann in seinem aktuellen Zustand einige ziemlich grundlegende Operationen nicht ausführen, einschließlich:

9P ist derzeit nicht in einem geeigneten Zustand für die Produktion.

Während Sie ein bootfähiges System mit 9P als Root-Dateisystem erstellen können, verursacht der Betrieb dieser VM erhebliche Probleme. Wenn Sie Debian verwenden, verhindert der oben aufgeführte Fehler, dass das apt-get-Upgrade funktioniert. Patches zur Behebung dieses Problems sind seit Jahren nirgendwo hin.

Wenn Sie darauf bestehen, sollten die Rootflags "rootflags = trans = virtio, cache = mmap" sein, andernfalls funktioniert die Lese- / Schreibspeicherzuordnung nicht (wird beispielsweise von MariaDB verwendet).

TMR
quelle
0

Ja sicher. Zur Kernel-Befehlszeile hinzufügen:

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

Und Sie können ohne initrd booten (wenn 9P in den Kernel kompiliert wird und nicht als Module).

Steckdosenpaar
quelle