Issuu on Google+

10/25

Linux

Section 7

 SLES 10 之開機流程 這裡就要開始說明 Linux 的整個開機過程,順便把前面學過的部分再做個複習。而在以下的 解說中,是假設從硬碟開機,且 Linux Loader 是安裝在 MBR。 1. 按下主機電源後,BIOS 做硬體偵測,並根據 CMOS 中的紀錄來決定開機裝置。 2. 接著 BIOS 會載入 MBR 磁區,並將 Linux Loader 載入記憶體,接著主控權就交由 Linux Loader 來接管。 3. 再來會看到一個開機選單畫面,來讓您選擇要開啟哪套作業系統。 4. 選擇 Linux OS 並按下 Enter 鍵以後,Linux Loader 就把 Linux kernel 及 initramfs (註一) 載入記憶體,準備來進行一些初始化的工作。 5. 在成功掛載根目錄檔案系統 (rootfs) 後,於 rootfs 中所執行的第一支程式為 init, 6. 7.

其 PID 為 1。 init 會載入 /etc/inittab (initial table) 的內容,並執行檔案內相關的 scripts。 最後就是執行 login 程式,此時會等待您輸入帳號密碼,如果認證無誤的話,就會開 啟一個 shell 來讓您使用囉 !

註一: 在 kernel 啟動時,會把 initramfs ( initial ram-based file system ) 載入 ram disk,以 提供一個最小的 Linux 操作環境。就在成功載入後,initramfs 上的 init 程式會負責以下的 工作: 1. 載入必要的核心模組: 為了要存取電腦上的硬體設備,比如 SCSI 硬碟,就需要載入相對的 driver。另外將 來要存取 rootfs 時,那就需載入該檔案系統的 driver。 2. 提供特殊的裝置檔案: 被核心所載入的裝置 drivers,udev 都會處理,並於 initramfs 的 /dev 裡,產生那 些裝置檔案。 3. 設定 RAID 及 LVM: 當 rootfs 是處在 RAID 或 LVM 的環境中,則 init 會幫您設定 RAID 或 LVM,這樣 將來方能順利存取 rootfs。 4. 管理網路組態: 當透過網路來掛載 rootfs 時,則 init 會確認有否載入網路驅動程式,並檢查是否允 許存取 rootfs。 由以上說明不難發現 initramfs 裡的 init 程式,就是為了真正根目錄檔案系統的掛載以及後 續對 rootfs 的存取來做準備,一旦 rootfs 掛載成功,initramfs 就會被清除,緊接著 kernel 會啟動真正根目錄檔案系統上頭的 init 程式,作業系統的啟動或關閉程序就是由它來負責的。 出處: http://www.suse.url.tw/sles10/l esson6.htm


 GRUB 設定檔 GRUB 本身可支援很多的 檔案系統,如 ext2、ext3、 reiserfs、minix、fat 等 等,因此以 GRUB 擔任 Boot Manager 時,於開 機過程 grub 程式才能直 接至檔案系統裡去載入與開機相關的檔案;比如開機時所看到的選單畫面以及後續 kernel、 initrd 的載入,就是以/boot/grub/menu.lst 這個檔案的設定為基礎的,爾後也才能順利掛載 根目錄檔案系統及接下來 init 的整個處理流程。 

#mkdir /tmp/ramdisk #cd

/tmp/ramdisk

#gunzip

-c

/boot/initrd

| cpio –i

解壓縮 initrd 檔到 /tmp/ramdisk (-c

stdout;cpio:備份檔案至 archives 或從 archives 執行備份還原,-i:extract ) initrd 提供開機過程中所需要的最重要核心模組,以讓系統開機過程可以順利完成 

#vi

/boot/grub/menu.lst

#mkdir /tmp/mymenu #cp

/boot/message /tmp/mymenu

#cd

/tmp/mymenu

#cpio -iv <

message

從 archives 執行備份還原 ( -v:列出過程 )


1 ○

boot

manager miss:

#mkdir /root/backup #dd

if=/dev/sda of=/root/backup/446.img

#dd

if=/dev/zero of=/dev/sda bs=446

#mount

2 ○

count=1

/dev/sda1 /mnt

#cd

/mnt/root/backup

#dd

if=446.img

of=/dev/sda bs=446 count=1

initrd 核心模組指錯: #vi

/boot/grub/menu.lst ……/boot/initrdhaha

e

e

reboot

enter

選 initrd

/boot/initrdhaha

enter initrd

3 ○

bs=446 count=1

/boot/initrd

b

enter

#vi

/boot/grub/menu.lst

改回原來設定

menu.lst 檔名錯誤: #mv menu.lst c

menu.lst.bk

enter

grub> root

(h0,0)

reboot

reboot


grub> kernel grub> initrd

/boot/vmlinuz root=/dev/sda1 /boot/initrd

grub> boot

#vi

/boot/grub/menu.lst password

--md5

對 grub 加密,避免其他使用者用繞過 模式修改 root 密碼

:r! echo

#vi

-e

“123456\n123456” | grub-md5-crypt

/etc/inittab # runlevel # 關機。 # runlevel # # # # # # # # # # #

0

is

System halt (Do not use this for initdefault!)

1

is

Single user mode

單人模式 。 runlevel 2 is Local multiuser without remote network (e.g. NFS) 多人使用的模式,但無網路相關服務。 runlevel 3 is Full multiuser with network 多人使用的文字介面模式,有網路相關服務。 runlevel 4 is Not used 目前為系統所保留,不使用。 runlevel 5 is Full multiuser with network and xdm 多人使用的圖形介面模式,有網路相關服務。 runlevel 6 is System reboot (Do not use this for initdefault!) 重新開機。


inittab 語法: id : runlevels : action : process id

代表該行紀錄的識別名稱,最多可以有四個字元。

runlevels 指定執行等級,可為 0 ~ 6 的數字及 S 等。 action

告知 init 所要採取的動作為何。

process 所要執行的程式及參數。

第三個欄位 action: 告訴 init 在系統在開機時,預設要進入的執行等級為何 ; initdefault

sysinit

當 runlevel 設定成 3,表示開機後要以文字介面來登入系 統,設定成 5,則是以圖形介面來登入。請注意使用這個 action 時,runlevel 千萬不要指定為 0 或 6。 代表系統初始化的動作項目。

wait

表示第二個欄位的 runlevel 被指定後,第四個欄位的 process 將會被執行,且 init 會等待至 process 執行完畢 後再繼續進行下一個動作。

bootwait

表示在系統開機期間,第四個欄位所指定的 process 將會被 執行,且 init 會等待至 process 執行完畢後再進行下一個 動作。

當使用者按下 Ctrl - Alt - Del 組合鍵時,init 就會讓第 四個欄位所指定的 process 去執行,此時該 process 所執行 ctrlaltdel 的動作就是重新該機。如果您不想開放此功能的話,將該行註 解起來或整行刪除即可。

respawn

respawn 這個 action 一般常搭配與登入有關係的 process 來使用,比如 mingetty。 當您登入 tty1 ~ tty6 時,之所 以能在 login 提示號下輸入帳號密碼,這就是 mingetty 的 功勞,而在您輸入帳號並按下 Enter 鍵後,mingetty 程式隨 即結束執行。又當您登出系統後,init 會再次起動 mingetty,以提供給下一個使用者登入,這就是 respawn 的 關係。 出處:http://paching.myweb.hinet.net/lesson6.htm

#init

q

當 inittab 內容有做更改,可下達此指令重新啟動 init


10/25 Linux