![virtfs/9p를 루트 파일 시스템으로 사용할 수 있습니까?](https://linux55.com/image/46439/virtfs%2F9p%EB%A5%BC%20%EB%A3%A8%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9C%BC%EB%A1%9C%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
호스트에서 게스트로 공유되는 폴더를 사용할 수 있나요?virtfs/9p를 통해게스트 내의 루트 파일 시스템으로?
이전 질문과 느슨하게 관련되어 있습니다.virtfs/9p를 사용하여 여러 게스트와 동일한 호스트 폴더를 공유할 수 있습니까?
답변1
예, 호스트의 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 ([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.
답변2
처음에는 이 아이디어가 합리적으로 보일 수도 있지만 그렇게 하지 마십시오. 현재 상태의 9P는 다음을 포함하여 상당히 기본적인 작업을 처리할 수 없습니다.
9P는 현재 프로덕션 용도로 적합한 상태가 아닙니다.
9P를 루트 파일 시스템으로 사용하여 부팅 가능한 시스템을 만들 수 있지만 가상 머신을 작동하면 심각한 결과를 초래할 수 있습니다. 데비안을 사용하는 경우 위에 나열된 결함으로 인해 apt-get 업그레이드가 작동하지 않습니다. 이 문제를 해결하기 위한 패치는 수년 동안 아무데도 나오지 않았습니다.
이 작업을 고집한다면 루트 플래그는 "rootflags=trans=virtio,cache=mmap"이어야 합니다. 그렇지 않으면 읽기/쓰기 메모리 매핑이 작동하지 않습니다(예를 들어 MariaDB에서 사용되는 것처럼).
답변3
물론이죠. 커널 명령줄에 추가:
root=host rootfstype=9p rootflags=trans=virtio
그리고 initrd 없이도 부팅할 수 있습니다(9P가 모듈이 아닌 커널에 컴파일된 경우).