快速业务通道

精通init ramfs构建step by step (六)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-11

二十、switch_root 命令

  除了基于init ramfs的系统(如第四节的mini linux),通常init ramfs都是为安装最终的根文件系统做准备工作,它的一步需要安装最终的根文件系统,然后切换到新根文件系统上去.以往的基于ramdisk 的initrd 使用pivot_root命令切换到新的根文件系统,然后卸载ramdisk.但是init ramfs是rootfs,而rootfs既不能pivot_root,也不能umount.为了从init ramfs中切换到新根文件系统,需要作如下处理:

  (1)删除rootfs的全部内容,释放空间

  find -xdev / -exec rm ''{}'' '';''

  (2)安装新的根文件系统,并切换

  cd /newmount; mount --move . /; chroot .

  (3)把stdin/stdout/stderr 附加到新的/dev/console,然后执行新文件系统的init程序

  上述步骤比较麻烦,要解决一个重要的问题:第一步删除rootfs的所有内容也删除了所有的命令,那么后续如何再使用这些命令完成其他步骤?busybox的解决方案是,提供了switch_root命令,完成全部的处理过程,使用起来非常方便.

  switch_root命令的格式是:

  switch_root [-c /dev/console] NEW_ROOT NEW_INIT [ARGUMENTS_TO_INIT]

  其中NEW_ROOT是实际的根文件系统的挂载目录,执行switch_root命令前需要挂载到系统中;NEW_INIT是实际根文件系统的init程序的路径,一般是/sbin/init;-c /dev/console是可选参数,用于重定向实际的根文件系统的设备文件,一般情况我们不会使用;而ARGUMENTS_TO_INIT则是传递给实际的根文件系统的init程序的参数,也是可选的.

  需要特别注意的是:switch_root命令由PID=1的进程调用,也就是由init ramfs的init程序直接调用,不能由init派生的其他进程调用,否则会出错,提示:

  switch_root: not rootfs

  也是同样的原因,init脚本调用switch_root命令用exec命令调用,否则也会出错,提示:

  switch_root: not rootfs

  二十一、实践:用init ramfs安装CLFS根文件系统

  现在实践一下switch_root命令,用它切换一个CLFS的根文件系统硬盘分区.我的CLFS安装在/dev/sda8硬盘分区,我们就以此为例说明.

  我们还是在以前的image目录中构建 拥有帝国一切,皆有可能。欢迎访问phome.net

  (1)改写init脚本

  #!/bin/sh

  mount -t proc proc /proc

  mount -t sysfs sysfs /sys

  mdev -s

  mount /dev/sda8 /mnt (注意:为了简单,我们直接把CLFS分区写死在init脚本中了)

  exec switch_root /mnt /sbin/init


(2)生成新的initrd

  按上一节“精通init ramfs构建step by step (五):initrd”描述的cpio命令生成新的initrd.

  (3)把新的initrd拷贝到CLFS分区的/boot目录下,改名为clfs-initrd

  (4)在GRUB的menu.lst配置文件中增加一个启动项

  #test for init ramfs of CLFS

  title test for init ramfs of CLFS (on /dev/sda8)

  root (hd0,7)

  kernel /boot/clfskernel-2.6.17.13 (注意:并没有向内核传递root参数信息)

  initrd /boot/clfs-initrd

  全部做完后,重启机器,选择 test for init ramfs of CLFS 启动项,机器顺利进入了CLFS系统,我们构建的init ramfs用switch_root命令完成了CLFS实际根文件系统的安装和切换.


拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号