请先了解,这个写的很好,很全:linux开机启动脚本的顺序:http://linux.chinaunix.net/techdoc/beginner/2009/02/11/1061714.shtml
上一篇文章介绍了,linux内核直接挂载nfs上的文件系统。
本文介绍采用busybox挂载nfs的文件系统的方法。busybox的制作可见前面的文章。
一、准备根文件系统
把NFS server上的根文件系统:/nfsrootfamily/3/ 共享出来,这个根文件系统是针对第三个节点的。
它的/var /etc /dev 是从一个制作好的标准的根文件系统:/nfsroot考出来的。其余所有目录内容为空(为了简化管理)。
二、获取IP
系统启动到busybox后,执行如下命令:
udhcpc -i eth0(从dhcp服务器获取一个ip)
三、挂接根文件系统
mount -o nolock /nfsrootfamily/3/ /mnt (把根文件系统挂接到/mnt)
由于 /nfsrootfamily/3/ 中实际的目录只有/etc/ /var/ /dev,其他目录都是空的 ,而系统启动时需要执行/sbin等目录下的一些东西,故需要做如下操作。
执行脚本:/mnt/mount.sh
脚本内容如下:
mount -o nolock 192.168.21.201:/nfsroot/bin /mnt/bin
mount -o nolock 192.168.21.201:/nfsroot/sbin /mnt/sbin
mount -o nolock 192.168.21.201:/nfsroot/lib /mnt/lib
mount -o nolock 192.168.21.201:/nfsroot/lib64 /mnt/lib64
mount -o nolock 192.168.21.201:/nfsroot/usr /mnt/usr
四、使用pivot_root 系统调用把跟文件系统放到根目录下
pivot_root /mnt /mnt //切换根文件系统到/mnt目录,以后再cd /看到的结果就是mount过来的文件系统了。
五、加载各种设备驱动
执行 /etc/rc.sysinit
参考:Linux系统脚本分析之rc.sysinit:http://hi.baidu.com/mumuailove/blog/item/678057fa0aa85e1ca8d311b8.html
六、启动系统服务
执行自己编写的脚本/systeminit.sh
ifconfig lo up
service messagebus start
service crond start
service atd start
service haldaemon start
service cpuspeed start
service irqbalance start
service syslog start
service rpcbind start
service sshd start
service xfs start
./systeminit.sh
七、一些其他操作
1) yum更新系统
yum update
//中间遇到了失败
yum clean all
yum update
//有个包装不上,于是:
yum -remove kdelibs-devel
yum update
成功!!!
2)关机时需要用busybox reboot命令才能关,具体原因没想明白,看来ramdisk(initrdimg文件系统)并没有随着根文件系统的切换而被删除。
在倪继利先生写的linux内核分析及编程中找到答案(P480最后一行)“改变根目录并不意味卸载initrd,因此initrd在运行期间可能留有进程在它上面运行,initrd上的文件系统可继续访问它”。