virtfs / 9p สามารถใช้เป็นระบบไฟล์รูทได้หรือไม่?


11

เป็นไปได้ไหมที่จะใช้โฟลเดอร์ที่แชร์จากโฮสต์ไปยังผู้เยี่ยมชมผ่าน virtfs / 9pเป็นระบบไฟล์รูทภายในแขก?

เกี่ยวข้องกับคำถามก่อนหน้านี้ของฉันอย่างหลวม ๆ : สามารถใช้ virtfs / 9p เพื่อแชร์โฟลเดอร์โฮสต์เดียวกันกับแขกหลายคนได้หรือไม่


ฉันไม่เคยพยายามที่จะ 9p ในฐานะ root FS แต่ฉันคิดว่าด้วยการเริ่มต้นที่เหมาะสมไม่มีสิ่งใดที่สามารถบล็อกคุณจากการทำเช่นนั้น
Alexander Kudrevatykh

1
jor1kทำเช่นนี้
Janus Troelsen

สิ่งที่จะสวยงามคือถ้าเราสามารถใช้ overlayfs กับ / และ 9p mount เป็น lowers แล้ว chroot ลง แต่มันล้มเหลวที่จะมีประโยชน์มากเพราะการเขียนไปยังผู้ที่ไม่ได้กำหนด ... มีระบบไฟล์ 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 อ่าน - เขียนแทนอ่านได้อย่างเดียว ดูลิงค์ได้ด้วย
Rutger Nijlunsing

Modern Linux ดูเหมือนจะเพิกเฉยต่อตัวเลือกบรรทัดคำสั่ง "root = r" และมองหา mount_tag "/ dev / root" โดยไม่มีเงื่อนไข มีข้อขัดข้องใด ๆ ในการอัพเดทคำตอบเพื่อสะท้อนถึงสิ่งนั้นหรือไม่?
. 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

และคุณอาจบู๊ตโดยไม่ต้องเริ่มต้น (ถ้า 9P ถูกคอมไพล์ลงในเคอร์เนลแทนที่จะเป็นโมดูล)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.