内核文档:
https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt
讲的很清楚了,
What is rootfs?
rootfs是一种特殊的ramfs,2.6内核总是编译它(没有选项可以关闭)。
它不能被卸载。新的文件系统只能挂在它上面,覆盖它。
如果开启了CONFIG_TMPFS,那么rootfs尝试使用tmpfs。
# mount rootfs on / type rootfs (rw) proc on /proc type proc (rw,relatime) sysfs on /sys type sysfs (rw,relatime) devtmpfs on /dev type devtmpfs (rw,relatime) tmpfs on /ram type tmpfs (rw,relatime) tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime,mode=1777) tmpfs on /run type tmpfs (rw,nosuid,nodev,noatime,mode=1777) /dev/vda on /mnt/vda type ext4 (rw,relatime) host0 on /mnt/host0 type 9p (rw,relatime,access=client,trans=virtio)
What is initramfs?
initramfs是gzipped cpio格式的文件,它打包进linux内核镜像。内核启动后,将其解压到上面的rootfs。
启动文件是/init
和initrd的区别
initrd总是一个单独的文件,文件是一个gzipped filesystem image,例如ext2镜像。这是根本的区别。
initrd的启动文件是/initrd,并且执行完后会返回kernel。
initrd切换rootfs,使用pivot_root,然后可以卸载ramdisk。
initramfs切换rootfs,只能使用switch_root,而且不能卸载rootfs,但是可以删除rootfs下面的所有文件,节省内存。