virtfs / 9p를 루트 파일 시스템으로 사용할 수 있습니까? 시스템으로 사용할 수 있습니까? 내 이전 질문과

virtfs / 9p통해 호스트에서 게스트로 공유 된 폴더를 게스트 내부의 루트 파일 시스템으로 사용할 수 있습니까?

내 이전 질문과 관련이 깊음 : virtfs / 9p를 사용하여 동일한 호스트 폴더를 여러 게스트와 공유 할 수 있습니까?



답변

예, 예를 들어 호스트의 FS로 VM을 부팅하는 방법을 참조하십시오.

호스트에 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.

답변

이것이 처음 보이는 것처럼 현명한 아이디어이므로 이것을하지 마십시오. 현재 상태의 9P는 다음을 포함하여 상당히 기본적인 작업을 처리 할 수 ​​없습니다.

현재 9P는 생산에 사용하기에 적합하지 않습니다.

루트 파일 시스템으로 9P를 사용하여 부팅 가능한 시스템을 만들 수 있지만 VM을 운영하면 심각한 문제가 발생할 수 있습니다. 데비안을 사용하는 경우 위에 나열된 결함으로 인해 apt-get 업그레이드가 작동하지 않습니다. 이 문제를 해결하기위한 패치는 몇 년 동안 아무데도 사라졌습니다.

이 작업을 수행해야하는 경우 rootflags는 “rootflags = trans = virtio, cache = mmap”이어야합니다. 그렇지 않으면 읽기 / 쓰기 메모리 매핑이 작동하지 않습니다 (예 : MariaDB에서 사용).


답변

물론이지. 커널 명령 행에 추가하십시오.

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

initrd없이 부팅 할 수 있습니다 (9P가 모듈이 아닌 커널로 컴파일 된 경우).