Khi nào bạn sẽ sử dụng p Pivot_root trên switch_root?


19

Tôi muốn hiểu rõ hơn về quy trình khởi tạo Linux để netboot một hệ thống hơn ceph thay vì nfs.

Trong quá trình tôi bắt gặp hai hình thức chuyển đổi root. Một cái gọi là switch_root và cái còn lại gọi là p Pivot_root. Các tập lệnh này đang được chạy từ một hệ thống tập tin trong bộ nhớ (initramfs) có được thông qua tftp bằng cách sử dụng quá trình khởi động pxe.

Khi nào bạn sẽ sử dụng cái này hơn cái kia? Tôi đã thấy cả hai được sử dụng trong một số tập lệnh init được đặt trong root.

Câu trả lời:


16

Tôi tìm thấy một lời giải thích tuyệt vời ở đây . Tuy nhiên, hãy để tôi thử đặt một định dạng ngắn hơn về những gì tôi hiểu trong câu trả lời.

Phiên bản ngắn hơn

  1. Trong khi hệ thống khởi động, nó cần một không gian người dùng sớm. Nó có thể đạt được bằng cách sử dụng initramfs hoặc initrd.
  2. initrd được tải vào ramdisk là một HỆ THỐNG TẬP TIN thực tế .
  3. initramfskhông một hệ thống tập tin .
  4. Đối với initrd pivot_root được sử dụng và cho initramfs switch_root được sử dụng.

Phiên bản dài hơn

Bây giờ, để giải thích chi tiết về những gì tôi đã đặt ở trên.

Trong khi cả initramfs và initrd đều phục vụ cùng một mục đích, có 2 điểm khác biệt. Sự khác biệt rõ ràng nhất là một initrd được tải vào ramdisk. Nó bao gồm một hệ thống tập tin thực tế (thường là ext2) được gắn trong một đĩa RAM. Mặt khác, initramfs không phải là một hệ thống tập tin. Nó chỉ đơn giản là một kho lưu trữ cpio (đã nén) (thuộc loại newc) được giải nén thành một tmpfs. Điều này có tác dụng phụ là làm cho initramfs được tối ưu hóa hơn một chút và có khả năng tải sớm hơn một chút trong quy trình khởi động kernel so với initrd. Ngoài ra, kích thước của initramfs trong bộ nhớ nhỏ hơn, vì kernel có thể điều chỉnh kích thước của tmpfs với những gì thực sự được tải, thay vì dựa vào kích thước ramdisk được xác định trước,

Ngoài ra còn có một sự khác biệt về tác dụng phụ: cách xử lý thiết bị gốc (và chuyển sang thiết bị gốc). Vì initrd là một hệ thống tập tin thực sự được giải nén vào ram, nên thiết bị gốc thực sự phải là ramdisk. Đối với initramfs, có kernel "rootfs" trở thành tmpfs mà initramfs được giải nén (nếu kernel tải initramfs; nếu không, thì rootfs chỉ đơn giản là hệ thống tập tin được chỉ định thông qua root = kernel boot tham số), nhưng rootfs tạm thời này không nên được chỉ định làm tham số root = boot (và sẽ không có cách nào để làm như vậy, vì không có thiết bị nào được gắn vào nó). Điều này có nghĩa là bạn vẫn có thể chuyển thiết bị gốc thực sự của mình cho kernel khi sử dụng initramfs. Với một initrd, bạn phải tự xử lý thiết bị gốc thực sự là gì. Ngoài ra, vì "thực" thiết bị root với initrd là ramdisk, kernel phải thực sự chuyển các thiết bị root từ một thiết bị thực (ramdisk) sang thiết bị khác (root thực sự của bạn). Trong trường hợp của initramfs, không gian initramfs (tmpfs) không phải là một thiết bị thực, vì vậy kernel không chuyển đổi các thiết bị thực. Do đó, trong khi lệnh p Pivot_root được sử dụng với initrd, một lệnh khác phải được sử dụng cho initramfs. Busybox cung cấp switch_root để thực hiện điều này, trong khi klibc cung cấp new_root. một lệnh khác phải được sử dụng cho initramfs. Busybox cung cấp switch_root để thực hiện điều này, trong khi klibc cung cấp new_root. một lệnh khác phải được sử dụng cho initramfs. Busybox cung cấp switch_root để thực hiện điều này, trong khi klibc cung cấp new_root.


2
Tôi đã sử dụng pivot_roottrong quá khứ cho initramfs, switch_rootkhông tồn tại vào thời điểm đó. switch_rootdường như là một phương pháp tiện lợi trong pivot_rootđó thực hiện thêm một số dọn dẹp và di chuyển /proc /sys, /devv.v. và không chỉ là gốc
Daniel Alder

2
Bạn không thể sử dụng p Pivot_root trên rootfs initramfs, bạn sẽ nhận được Đối số không hợp lệ. Bạn chỉ có thể xoay các hệ thống tập tin thực.
TiCPU

@TiCPU Sau đó, Linux sẽ thoát khỏi không gian người dùng sớm như thế nào?
Melab

Các giải pháp được cung cấp dường như là sai. Bản thân Linus nói rằng p Pivot_root () hoặc chroot () sẽ chỉ thay đổi tham chiếu quy trình hiện tại cho /. Vì vậy, theo hiểu biết của tôi, nó có thể là bất kỳ con đường nào và không liên quan gì đến các "đĩa" thực tế.
erikbwork

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.