Czy virtfs / 9p może być używany jako główny system plików?


11

Czy można użyć folderu udostępnionego gościowi przez hosta za pośrednictwem virtfs / 9p jako głównego systemu plików w gościu?

Luźno związany z moim poprzednim pytaniem: Czy virtfs / 9p może być używany do udostępniania tego samego folderu hosta wielu osobom?


Nigdy nie próbowałem 9p jako root FS, ale myślę, że przy właściwym initrd nie ma nic, co mogłoby cię zablokować.
Alexander Kudrevatykh


Byłoby pięknie, gdybyśmy mogli użyć nakładek z / i mocowaniem 9p jako obniżeń, a następnie chrootować w nim. Ale to nie jest bardzo przydatne, ponieważ zapisy do niższych są niezdefiniowane ... Istnieją jednak inne systemy plików FUSER, które pozwalają, że tak myślę, ale jeszcze tego nie osiągnąłem.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Odpowiedzi:


9

Tak, zobacz na przykład, jak uruchomić maszynę wirtualną z FS hosta:

Dodaj moduły 9p do hosta initramfs(to najłatwiejszy, choć nie najczystszy sposób, aby mieć initrd z potrzebnymi modułami):

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'

Jeśli uruchomisz go jako zwykły użytkownik, istnieją pliki, do których nie będzie miał dostępu, ale powinieneś być w stanie uzyskać monit powłoki i nie spowoduje to żadnych szkód:

[    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
Ponadto można użyć parametru „security_model = mapowany”, aby uzyskać pełny dostęp do bazowego systemu plików, ponieważ przechowuje on informacje o własności i inne uprzywilejowane pliki w rozszerzonych atrybutach pliku. Pozwala to również na zamontowanie fs do odczytu i zapisu zamiast tylko do odczytu. Zobacz także link
Rutger Nijlunsing

Współczesny Linux wydaje się ignorować opcję wiersza polecenia „root = r” i bezwarunkowo szuka tagu_instalacyjnego „/ dev / root”. Czy masz jakiś sprzeciw wobec aktualizacji odpowiedzi, aby to odzwierciedlić?
R .. GitHub ZATRZYMAJ LÓD

4

Choć pomysł wydaje się na pierwszy rzut oka rozsądny, nie rób tego. 9P w obecnym stanie nie jest w stanie obsłużyć niektórych dość podstawowych operacji, w tym:

9P nie jest obecnie w stanie zdatnym do użytku w produkcji.

Chociaż możesz stworzyć system startowy z 9P jako głównym systemem plików, działanie tej maszyny wirtualnej spowoduje znaczny smutek - jeśli używasz Debiana, powyższa wada uniemożliwi działanie aktualizacji apt-get. Poprawki rozwiązujące ten problem zniknęły nigdzie od lat.

Jeśli nalegasz na zrobienie tego, rootflags powinno brzmieć „rootflags = trans = virtio, cache = mmap”, w przeciwnym razie mapowanie pamięci do odczytu / zapisu nie będzie działać (używane na przykład przez MariaDB).


Mimo, że mi się nie podoba, dziękuję za wkład. Obecnie zastanawiam się nad umieszczeniem bootowania i rootowania we właściwym kontenerze plików i niektórych danych, które powinny być udostępnione w 9p ...
0xC0000022L

1

Tak, oczywiście. Dodaj do wiersza poleceń jądra:

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

Możesz uruchamiać się bez initrd (jeśli 9P jest wkompilowane w jądro, a nie jako moduły).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.