Answers:
我在这里找到了一个很好的解释。但是,让我尝试将答案中的理解写成较短的格式。
短版
pivot_root
使用,对于initramfs switch_root
使用。较长的版本
现在,对上面我所做的详细解释。
尽管initramf和initrd具有相同的目的,但有2个区别。最明显的区别是initrd已加载到ramdisk中。它由安装在虚拟磁盘中的实际文件系统(通常为ext2)组成。另一方面,initramfs不是文件系统。它只是一个(压缩的)cpio归档文件(类型为newc),已解压缩到tmpfs中。这样做的副作用是使initramfs更加优化,并且在内核引导过程中的加载比initrd稍早。同样,内存中的initramfs的大小也较小,因为内核可以使tmpfs的大小适应实际加载的大小,而不是依赖于预定义的ramdisk大小,
还有另一个副作用差异:如何处理根设备(以及切换到根设备)。由于initrd是解压缩到ram中的实际文件系统,因此根设备必须实际上是ramdisk。对于initramfs,有一个内核“ rootfs”,它成为将initramfs解包到的tmpfs(如果内核加载了initramfs;否则,则rootfs就是通过root = kernel boot参数指定的文件系统),但是不应将此临时rootfs指定为root =引导参数(并且将无法执行此操作,因为未连接任何设备)。这意味着在使用initramfs时,您仍然可以将真正的根设备传递给内核。使用initrd,您必须处理真正的根设备是您自己。另外,由于“真实” 具有initrd的根设备是ramdisk,内核必须将根设备从一台实际设备(ramdisk)切换到另一台(您的真实根目录)。对于initramfs,initramfs空间(tmpfs)不是真实设备,因此内核不会切换真实设备。因此,尽管命令ivot_root与initrd一起使用,但对于initramfs必须使用其他命令。Busybox提供switch_root来完成此任务,而klibc提供new_root。一个不同的命令必须用于initramfs。Busybox提供switch_root来完成此任务,而klibc提供new_root。一个不同的命令必须用于initramfs。Busybox提供switch_root来完成此任务,而klibc提供new_root。
/
。因此,根据我的理解,它可能是任何路径,与实际的“磁盘”无关。
pivot_root
过去用于initramfs,switch_root
当时不存在。switch_root
似乎是一种方便的方法pivot_root
该方法可以进行更多清理,移动/proc
/sys
以及其他操作/dev
,而不仅仅是根本身