上節已系統initramfs已啟動完成,將系統控制權交給了真正的rootfs的/sbin/init,下面就是/sbin/init干活的時間了。
4 /sbin/initinitramfs的init腳本,通過switch_root命令,切換到真正的root fs后,執行的第一個程序就是root fs下的/sbin/init,
4.1 switch_rootswith_root newroot init [arg]
eg:
initramfs中切換到真正的rootfs命令是switch_root /sysroot /sbin/init
其中root fs掛載到了/sysroot目錄下
4.2 /sbin/init/sbin/init:它是系統第一個執行的程序,即使用pa auxf查看,PID為1的程序即是它,它可以理解為系統所有進程的父進程。
通過rpm -qf /sbin/init,查看系統中的/sbin/init程序來自于upstart,upstart的詳細說明可參見upstart官網[6]。
傳統的操作系統的/sbin/init是由System V init來管理,而upstart原來是為Ubuntu系統開發的,現在被越來越多linux系統所使用。關于System Vinit和upstart的區別,可參見文檔[7]。
/sbin/init主的要流程:
1、 執行/etc/rc.sysinit。
2、 執行/etc/rc,rc腳本會根據傳入的runlevel,選擇運行對應目錄下的腳務腳本。
3、 執行/etc/rc.local
4.3 rc.sysinit大體完成以下幾類任務:
1、 文件系統掛載(通過grub傳入參數,及配置文件,掛載/修復文件系統)。
2、 模塊加載(通過udev規則,加載模塊,如網卡、用戶自定義規則等)。
3、 SELINUX相關(未了解)。
下面兩個鏈接也有一些說明:
http://linux.chinaunix.net/techdoc/beginner/2009/01/21/1059280.shtm
http://www.CUOXin.com/image-eye/archive/2011/10/21/2220344.html
4.4 rc*.d所有服務腳本目錄,不同級別對應不同目錄的腳本會被執行,這里就不再詳細說明。
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
新聞熱點
疑難解答