//疑问:到底采用swith_root 还是chroot ?
/若采用了chroot之后,web端能见到chroot之后的文件系统吗?!!!
/switch_root好像需要多建一个分区
/结合chroot可以退出的特性ctrl+d
//busybox默认调用initramfs中根目录的linuxrc程序。该程序调用rcS脚本,但该脚本并不是以PID=1运行的。所以,在根目录中自己写一个init脚本,然后在该脚本中挂载硬盘文件系统,然后再调用switch_root即可切换到硬盘启动。
/其次chroot仅仅是在系统目录上进行了隔离,并没有对进程、网络等层面进行隔离。
switch_root的用法基本如下,需要newrootdir和切换之后的要执行的init(1)的路径,以及需要的传递的参数:
switch_root /sysroot "/sbin/init"
switch_root newroot init跳转到另外一个文件系统,并且把newroot作为新的mount tree,并且执行init程序
设备/dev/sda1里面是新的文件系统,现在将它挂在到newroot目录下,那么在switch_root的时候,就必须要switch到这个newroot目录下,而不能switch到newroot目录的任何子目录。
chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init,本文的最后一个 demo 会详细的介绍这种用法。
//因此我们这里将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 //转换
参考:
https://blog.csdn.net/u012385733/article/details/102565591
https://www.cnblogs.com/yinsua/p/3540624.html
标签:chroot,newroot,init,文件系统,switch,切换,root From: https://www.cnblogs.com/tiange-137/p/17272823.html