免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11302 | 回复: 6
打印 上一主题 下一主题

switch_root命令不能切换根文件系统 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-22 22:55 |只看该作者 |倒序浏览
我正在读《精通initramfs构建step by step》,在二十节的实验里遇到一个地方跳不过去,请大家帮忙分析一下。

/etc/inittab文件的内容是:
  1. ::sysinit:/etc/init.d/rcS
  2. tty1::askfirst:/bin/sh
  3. tty2::askfirst:/bin/sh
  4. tty3::askfirst:/bin/sh
  5. tty4::askfirst:/bin/sh
  6. tty5::askfirst:/bin/sh
  7. tty6::askfirst:/bin/sh
  8. ::restart:/sbin/init
  9. ::ctrlaltdel:/sbin/reboot
  10. ::shutdown:/bin/umount -a -r
复制代码
/etc/init.d/rcS文件的内容是:
  1. #!/bin/sh
  2. mount -t proc proc /proc
  3. mount -t sysfs sysfs /sys
  4. mdev -s
  5. mount /dev/sda8 /mnt  
  6. exec switch_root /mnt /sbin/init
复制代码
init启动时读/etc/inittab文件,其中第一行告诉它去执行一个/etc/init.d/rcS脚本。rcS脚本的最后两行:先挂载硬盘上的根文件系统,然后调用switch_root命令切换到该文件系统。我的问题就出在switch_root的执行。在启动时屏幕上打印的信息:
  1. BusyBox v1.19.2 (2011-10-22 16:15:41 CST) multi-call binary.

  2. Usage: switch_root [-c /dev/console] NEW_ROOT NEW_INIT [ARGS]

  3. Free initramfs and switch to another root fs:
  4. chroot to NEW_ROOT, delete all in /, move NEW_ROOT to /,
  5. execute NEW_INIT. PID must be 1. NEW_ROOT must be a mountpoint.

  6. Options:
  7.         -c DEV  Reopen stdio to DEV after switch
复制代码
似乎根文件系统没有切换成功,但也没有给出任何错误信息。提示信息在说:switch_root命令正确执行的前提是NEW_ROOT必须是挂载点,而且执行switch_root命令的必须是PID=1的进程。

1. 我cd到/mnt,并ls列目录内容,可以确认/dev/hda1设备确实挂载到/mnt。所以NEW_ROOT是挂载点没有问题。
2. 在rcS中用exec来执行switch_root命令,所以switch_root是在PID=1的进程中执行。

看来这两个条件都能满足,但为什么不能正确执行?请大家帮忙解决。谢谢了!

论坛徽章:
0
2 [报告]
发表于 2011-10-23 15:22 |只看该作者
没人知道吗?顶一下。

论坛徽章:
0
3 [报告]
发表于 2011-10-23 23:07 |只看该作者
帮顶了哦,

论坛徽章:
0
4 [报告]
发表于 2011-10-24 11:33 |只看该作者
问题已经找到。busybox默认调用initramfs中根目录的linuxrc程序。该程序调用rcS脚本,但该脚本并不是以PID=1运行的。所以,在根目录中自己写一个init脚本,然后在该脚本中挂载硬盘文件系统,然后再调用switch_root即可切换到硬盘启动。

论坛徽章:
0
5 [报告]
发表于 2015-01-15 11:21 |只看该作者
楼主  看了你的帖子,自己写 init咋写的  我也遇到和你一样的情况,后面咋解决的。

论坛徽章:
0
6 [报告]
发表于 2015-07-30 18:45 |只看该作者
楼主,我在执行switch_root时会报如下错误:switch_root: can't execute '/sbin/init: No such file or directory。/sbin /sbin/init在目录中都是存在的,请问你有没有碰到类拟问题??

论坛徽章:
0
7 [报告]
发表于 2015-07-31 18:36 |只看该作者
我的问题搞定啦,把磁盘的重新格式化成ext2就可以啦,但不知道为什么ext3文件系统不行??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP