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.
pivot_root
trong quá khứ cho initramfs,switch_root
không tồn tại vào thời điểm đó.switch_root
dường như là một phương pháp tiện lợi trongpivot_root
đó thực hiện thêm một số dọn dẹp và di chuyển/proc
/sys
,/dev
v.v. và không chỉ là gốc