Чи можна virtfs / 9p використовувати як кореневу файлову систему?


11

Чи можна використовувати папку, що надсилається від хоста до гостя через virtfs / 9p як кореневу файлову систему всередині гостя?

Мало пов'язане з моїм попереднім питанням: Чи можна virtfs / 9p використовувати для обміну однією і тією ж папкою хоста з кількома гостями?


Я ніколи не намагався виконати 9p як root FS, але думаю, що при належному initrd нічого не може перешкодити вам цього робити.
Олександр Кудреватих

1
jor1k робить це
Janus Troelsen

Що було б красиво, якби ми могли використати накладки з / і 9p кріпленням як нижчі, а потім ввімкнути в нього. Але це не може бути дуже корисним, тому що записи в нижчі місця не визначені ... Однак є інші файлові системи FUSER, які дозволяють мені вважати, але я ще не дійшов до цього.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Відповіді:


9

Так, дивіться, наприклад, як завантажувати VM з FS хоста:

Додайте 9p модулів до хоста initramfs(це найпростіший спосіб, хоча не найчистіший, мати initrd з необхідними модулями):

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'

Якщо ви запускаєте його як звичайний користувач, є файли, до яких не вдасться отримати доступ, але ви повинні мати змогу отримати підказку оболонки, і це не заподіє шкоди:

[    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
Крім того, ви можете використовувати "security_model = mapped", щоб мати повний доступ до базової файлової системи, оскільки вона зберігає право власності та іншу привілейовану інформацію про файл у розширених атрибутах файлу. Це також дозволяє монтувати fs читання-запис, а не тільки readon. Дивіться також посилання
Rutger Nijlunsing

Сучасний Linux, схоже, ігнорує параметр командного рядка "root = r" і безумовно шукає mount_tag "/ dev / root". Будь-які заперечення щодо оновлення відповіді, щоб це відобразити?
R .. GitHub СТОП ДОПОМОГАТИ ВІД

4

Наскільки розумна ідея, як це здається спочатку, не робіть цього. 9P в поточному стані не може впоратися з деякими досить основними операціями, включаючи:

9P в даний час не в придатному стані для використання у виробництві.

Хоча ви можете створити завантажувальну систему з 9P в якості кореневої файлової системи, оперуючи цим VM, викличете значне горе - якщо використовувати Debian, дефект, перерахований вище, не дозволить оновити apt-get. Патчі для виправлення цієї проблеми роками нікуди не поділися.

Якщо ви наполягаєте на цьому, кореневі позначки повинні бути "rootflags = trans = virtio, cache = mmap", інакше відображення / записування пам'яті не працюватиме (використовується, наприклад, MariaDB).


Хоча мені це і не подобається, дякую за внесок. В даний час я розмірковую над тим, щоб розмістити завантажувальний і корінний файл у відповідному контейнері файлів, а деякі дані, які повинні бути надані в 9p ...
0xC0000022L

1

Так, звичайно. Додати до командного рядка ядра:

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

І ви можете завантажуватися без initrd (якщо 9P компілюється в ядро, а не як модулі).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.