virtfs / 9p를 루트 파일 시스템으로 사용할 수 있습니까?


11

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

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


나는 루트 FS로 9p를 시도하지 않았지만 적절한 initrd를 사용하면 그렇게 할 수있는 것이 아무것도 없다고 생각합니다.
Alexander Kudrevatykh


우리가 /와 9p 마운트를 더 낮은 값으로 사용하여 오버레이 루트를 사용할 수 있다면 chroot가 아름답습니다. 그러나 저음에 대한 쓰기가 정의되지 않았기 때문에 매우 유용하지 않습니다 ... 그러나 다른 FUSER 파일 시스템이 있지만 생각할 수는 있지만 아직 도달하지 못했습니다.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

답변:


9

예, 예를 들어 호스트의 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.

2
또한 'security_model = mapped'를 사용하여 소유권 및 기타 권한있는 파일 정보를 파일의 확장 된 속성에 저장하므로 기본 파일 시스템에 완전히 액세스 할 수 있습니다. 또한 읽기 전용 대신 fs 읽기 / 쓰기를 마운트 할 수 있습니다. 링크
Rutger Nijlunsing

최신 Linux는 "root = r"명령 행 옵션을 무시하고 무조건 mount_tag "/ dev / root"를 찾습니다. 그것을 반영하기 위해 답변을 업데이트하는 것에 대한 반대 의견이 있습니까?
R .. GitHub 중지 지원 얼음

4

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

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

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

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


마음에 들지 않더라도 의견을 보내 주셔서 감사합니다. 나는 현재 적절한 파일 컨테이너에 부트와 루트를 배치 하고 9p에 공유 될 것으로 예상되는 일부 데이터를 고려하고있다.
0xC0000022L

1

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.