Có thể sử dụng virtfs / 9p làm hệ thống tập tin gốc?


10

Có thể sử dụng một thư mục được chia sẻ từ máy chủ đến khách thông qua virtfs / 9p làm hệ thống tập tin gốc bên trong khách?

Liên quan một cách lỏng lẻo đến câu hỏi trước đây của tôi: Có thể sử dụng virtfs / 9p để chia sẻ cùng một thư mục máy chủ với nhiều khách không?


Tôi chưa bao giờ cố gắng 9p với tư cách là root FS, nhưng tôi nghĩ rằng với initrd thích hợp, không có gì có thể ngăn bạn làm điều đó.
Alexander Kudrevatykh

1
jor1k làm điều này
Janus Troelsen

Điều tuyệt vời là nếu chúng ta có thể sử dụng các lớp phủ với / và gắn kết 9p làm mức thấp, sau đó chroot vào nó. Nhưng nó không hữu ích lắm vì việc ghi vào các mức thấp chưa được xác định ... Tuy nhiên, có những hệ thống tập tin FUSER khác cho phép tôi nghĩ, nhưng tôi chưa đạt được.
Ciro Santilli 冠状 病毒 审查 事件

Câu trả lời:


8

Có, xem ví dụ cách khởi động VM với FS của máy chủ:

Thêm các mô-đun 9p vào máy chủ initramfs(đó là cách dễ nhất mặc dù không phải là sạch nhất, để có một mô-đun với các mô-đun cần thiết):

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'

Nếu bạn chạy nó như một người dùng bình thường, có những tệp mà nó sẽ không thể truy cập, nhưng bạn sẽ có thể nhận được dấu nhắc shell và nó sẽ không gây ra bất kỳ thiệt hại nào:

[    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.

1
Ngoài ra, bạn có thể sử dụng 'security_model = mapped' để có thể truy cập đầy đủ vào hệ thống tệp cơ bản vì nó lưu trữ quyền sở hữu và thông tin tệp đặc quyền khác trong các thuộc tính mở rộng của tệp. Điều này cũng cho phép bạn gắn kết đọc-ghi fs thay vì chỉ đọc. Xem thêm liên kết
Rutger Nijluning

Linux hiện đại dường như bỏ qua tùy chọn dòng lệnh "root = r" và tìm kiếm vô điều kiện cho mount_tag "/ dev / root". Bất kỳ phản đối để cập nhật câu trả lời để phản ánh điều đó?
R .. GitHub DỪNG GIÚP ICE

2

Một ý tưởng hợp lý như lúc đầu dường như, đừng làm điều này. 9P ở trạng thái hiện tại không thể xử lý một số thao tác khá cơ bản, bao gồm:

9P hiện tại không ở trạng thái phù hợp để sử dụng trong sản xuất.

Mặc dù bạn có thể tạo một hệ thống có khả năng khởi động với 9P làm hệ thống tệp gốc, nhưng việc vận hành VM đó sẽ gây ra sự đau buồn đáng kể - nếu sử dụng Debian, lỗi được liệt kê ở trên sẽ ngăn không cho nâng cấp apt-get hoạt động. Các bản vá để khắc phục vấn đề này đã biến mất trong nhiều năm.

Nếu bạn khăng khăng làm điều này, các rootflags sẽ là "rootflags = trans = virtio, cache = mmap", nếu không thì ánh xạ bộ nhớ đọc / ghi sẽ không hoạt động (ví dụ, được sử dụng bởi MariaDB).


0

Vâng, chắc chắn rồi. Thêm vào dòng lệnh kernel:

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

Và bạn có thể khởi động mà không có initrd (nếu 9P được biên dịch vào kernel, thay vì dưới dạng các mô-đun).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.