initramfs切换根文件系统

  1. 主要思路
    将一些可执行文件放入新的根文件系统。
    使用mdev填充/dev
    从rootfs切换到另一个根文件系统

  2. switch-root 是busybox提供的一个超级命令

  3. 需要特别注意的是:
    switch_root命令必须由PID=1的进程调用,也就是必须由initramfs的init程序直接调用,不能由init派生的其他进程调用,否则会出错,提示:
    switch_root: not rootfs
    也是同样的原因,init脚本调用switch_root命令必须用exec命令调用,否则也会出错,提示:
    switch_root: not rootfs
    因此我们这里将rcS文件改回init (不再需要内存中的linux的shell环境)保证我们加入语句以init的权限调用 pid=1的进程。
    然后修改文件。
    #cp etc/init.d/rcS ./init

vi init

#!/bin/sh
/bin/mount -t proc proc /proc
/bin/mount -t sysfs sysfs /sys
/bin/mount -t tmpfs tmpfs /dev
echo /sbin/mdev > /proc/sys/kernel/hotplug          //热插拔
echo ‘waiting to load all devices…..’
/sbin/mdev -s
sleep 10
mkdir /mnt/lower /mnt/upper /mnt/work /mnt/sysroot
/bin/mount -t squashfs /media/sr0/casper/filesystem.squashfs /mnt/lower -o loop
/bin/mount -t overlay -o lowerdir=/mnt/lower,upperdir=/mnt/upper,workdir=/mnt/work overlay /mnt/sysroot
echo "The pid now is $$"                   //打印当前pid 确保为1
exec switch_root  /mnt/sysroot /sbin/init             //转换

参考链接:
https://www.cnblogs.com/yinsua/p/3540624.html
http://blog.sina.com.cn/s/blog_44de54df0100uytb.html

你可能感兴趣的:(linux,linux,initramfs,rootfs,根文件)