• (转)SWITCH_ROOT


    原文:http://blog.sina.com.cn/s/blog_44de54df0100uytb.html

    tar -X dir1  -c dir2|gzip > ddd.lrp  
     我们的U盘内设置已经成型 如果要让系统的东西能够存出来则需要修改init文件,使我们的U盘挂载到U盘系统的某个文件夹下 用于存储文件:
      在上次修改之后 我们执行mdev 后等待10s 此时所有的硬件信息都被存储到了/dev 下
    我们从U盘启动 U盘默认被认成了 dev/sda
      因此 我们只需要加入挂载命令就可以
      当然 我们也可以用fstab设置自动加载云云 这就不在本文叙述范围内了。
    # vi  etc/init.d/rcS
      ———-rcS     final-1————-
    #!/bin/sh
    mount -t proc proc /proc
    mount -t sysfs sysfs /sys
    echo /sbin/mdev > /proc/sys/kernel/hotplug           //热插拔
    echo ‘waiting to load all devices…..’
    mdev -s
    sleep 10
    mount /dev/sda1        /mnt                     //这里我们把挂载写死了
    ——————————————————————
      这样 开机后就会发现提示 挂载成功
    在你的U盘linux下 就可以在 /mnt 下工作了 文件会存在U盘中 而不会丢失。
    但是 这种解决方案并不完全。我们希望能够将系统完全转换到U盘下工作,这就要用到switch_root 命令了。
    switch-root 是busybox提供的一个超级命令,
    正常如果我们要切换系统的根目录,那么我们要:
    (1)删除rootfs的全部内容,释放空间
    find -xdev / -exec rm ‘{}’ ‘;’
    (2)安装新的根文件系统,并切换
    cd /newmount; mount –move . /; chroot .
    (3)把stdin/stdout/stderr 附加到新的/dev/console,然后执行新文件系统的init程序
    这十分的麻烦 而且常常会出错,因此我们的busybox用一个命令解决了整个过程,比如 我们商秘昂挂载我们的U盘到了mnt目录而我们的U盘根目录下就是我们写好的一个/ 根文件系统
    我们需要执行:
    switch_root   /mnt    /sbin/init
                    新根目录   新文件系统的init
    只后switch_root 就会帮我们自动切换好根文件系统。
    需要特别注意的是:
    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
    —————–init final-1————–
    #!/bin/sh
    mount -t proc proc /proc
    mount -t sysfs sysfs /sys
    echo /sbin/mdev > /proc/sys/kernel/hotplug           //热插拔
    echo ‘waiting to load all devices…..’
    mdev -s
    sleep 10
    mount /dev/sda1        /mnt                     //这里我们把挂载写死了
    echo "The pid now is $$"                    //打印当前pid 确保为1
    exec switch_root  /mnt /sbin/init              //转换
    ——————————————————
    重新打包 拷贝 从U盘引导 OK
    如果一切正常 那么你的系统会切换到你U盘里的/ 下 正常的使用吧。
    关于U盘里的那个系统 可以到网上下载一个轻量版的linux 或者直接把宿主linux拷贝进去

  • 相关阅读:
    UIStoryBoard 中修改控件borderColor
    iOS自定义AlertView 与 ActionSheet 遮罩提示+弹出动画
    iOS开发 UIWebView+JavaScript 交互总结
    【注入攻击】SQL注入(不完整总结)
    [内存溢出]栈溢出基础版
    [Windows驱动开发]之内存管理
    [找工作]程序员面试宝典【笔记】(part 1)
    [Windows安装]安装程序无法创建新的系统分区,也无法定位现有系统分区
    M1卡分析
    [逆向/壳]脱壳方法
  • 原文地址:https://www.cnblogs.com/yinsua/p/3540624.html
Copyright © 2020-2023  润新知