萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> linux文件系統怎樣初始化步驟

linux文件系統怎樣初始化步驟

  linux文件系統初始化步驟

  System V init啟動過程

  概括地講,Linux/Unix系統一般有兩種不同的初始化啟動方式.

  1) BSD system init

  2) System V init

  大多數發行套件的Linux使用了與System V init相仿的init也就是Sys V init,它比傳統的BSD system init更容易且更加靈活。

  System V init的主要思想是定義了不同的"運行級別(runlevel)"。通過配置文件/etc/inittab定義了系統引導時的運行級別, 進入或者切換到一個運行級別時做什麼。每個運行級別對應於一個子目錄/etc/rc.d/rcX.d。

  每個rcX.d目錄中都是一些以S或K開頭的文件鏈接。這些鏈接指向的腳本都 可以接收start和stop參數,S開頭的鏈接會傳入start參數,一般是開啟一項服務,K會傳入stop參數,一般是停止某服務。

  以下是一個大致的System V init過程:

  (1)init 過程執行的第一個腳本是 /etc/rc.d/rc.sysinit,它主要做在各個運行級別中進行初始化工作,包括: 啟動交換分區;檢查磁盤;設置主機名;檢查並掛載文件系統;加載並初始化硬件模塊.

  (2)執行缺省的運行級別模式。 這一步的內容主要在/etc/inittab中體現, inittab文件會告訴init進程要進入什麼運行級別,以及在哪裡可以找到該運行級別的配置文件.

  (3)執行/etc/rc.d/rc.local腳本文件。 這也是init過程中執行的最後一個腳本文件,所以用戶可以在這個文件中添加一些需要在登錄之前執行的命令.

  (4)執行/bin/login程序

  注意:

  System V init只是一種模式,每個系統初始化都有差異,但大體上不會相差太多。如busybox執行的第一個啟動腳本就是/etc/init.d/rcS,而且不可以改變,與上面講的不同。

  LFS文件系統初始化示例

  inittab文件

  由下內容可以看出,最先執行的是/etc/rc.d/init.d/rc文件,給這個文件傳入的參數是一個數字,rc會由傳入的數字合成rcX.d目錄的路徑,然後執行其中的所有腳本鏈接。當然這只是一部分功能。

  # Begin /etc/inittab

  id:3:initdefault:

  si::sysinit:/etc/rc.d/init.d/rc sysinit #可以設定初始化腳本

  l0:0:wait:/etc/rc.d/init.d/rc 0

  l1:S1:wait:/etc/rc.d/init.d/rc 1

  l2:2:wait:/etc/rc.d/init.d/rc 2

  ...

  ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

  su:S016:once:/sbin/sulogin

  1:2345:respawn:/sbin/agetty tty1 9600

  2:2345:respawn:/sbin/agetty tty2 9600

  ...

  # End /etc/inittab

  etc目錄結構

  只是一部分,有刪減。

  .

  ├── fstab

  ├── inittab

  ├── inputrc

  ├── profile

  ├── rc.d

  │ ├── init.d

  │ │ ├── checkfs

  │ │ ├── cleanfs

  ...

  │ │ ├── modules

  │ │ ├── mountfs

  │ │ ├── mountkernfs

  │ │ ├── network

  │ │ ├── rc #when boot, run.

  │ │ ├── reboot

  ...

  │ ├── rc0.d

  │ │ ├── K80network -> ../init.d/network

  │ │ ├── K90sysklogd -> ../init.d/sysklogd

  │ │ ├── S60sendsignals -> ../init.d/sendsignals

  │ │ ├── S70mountfs -> ../init.d/mountfs

  │ │ ├── S80swap -> ../init.d/swap

  │ │ ├── S90localnet -> ../init.d/localnet

  │ │ └── S99halt -> ../init.d/halt

  │ ├── rc1.d

  │ │ ├── K80network -> ../init.d/network

  │ │ └── K90sysklogd -> ../init.d/sysklogd

  │ ├── rc2.d

  │ │ ├── K80network -> ../init.d/network

  │ │ └── K90sysklogd -> ../init.d/sysklogd

  │ ├── rc3.d

  │ │ ├── S10sysklogd -> ../init.d/sysklogd

  │ │ └── S20network -> ../init.d/network

  │ ├── rc4.d

  │ │ ├── S10sysklogd -> ../init.d/sysklogd

  │ │ └── S20network -> ../init.d/network

  │ ├── rc5.d

  │ │ ├── S10sysklogd -> ../init.d/sysklogd

  │ │ └── S20network -> ../init.d/network

  │ ├── rc6.d

  │ │ ├── K80network -> ../init.d/network

  │ │ ├── K90sysklogd -> ../init.d/sysklogd

  │ │ ├── S60sendsignals -> ../init.d/sendsignals

  │ │ ├── S70mountfs -> ../init.d/mountfs

  │ │ ├── S80swap -> ../init.d/swap

  │ │ ├── S90localnet -> ../init.d/localnet

  │ │ └── S99reboot -> ../init.d/reboot

  │ └── rcsysinit.d

  │ ├── S00mountkernfs -> ../init.d/mountkernfs

  │ ├── S02consolelog -> ../init.d/consolelog

  │ ├── S05modules -> ../init.d/modules

  ...

  ├── udev

  │ ├── rules.d

  │ │ └── 55-lfs.rules

  │ └── udev.conf

  └── vimrc

  network腳本

  #!/bin/sh

  . /etc/sysconfig/rc

  . ${rc_functions}

  . /etc/sysconfig/network

  case "${1}" in

  start)

  # Start all network interfaces

  for file in ${network_devices}/ifconfig.*

  do

  interface=${file##*/ifconfig.}

  # skip if $file is * (because nothing was found)

  if [ "${interface}" = "*" ]

  then

  continue

  fi

  IN_BOOT=1 ${network_devices}/ifup ${interface}

  done

  ;;

  stop)

  # Reverse list

  FILES=""

  for file in ${network_devices}/ifconfig.*

  do

  FILES="${file} ${FILES}"

  done

  # Stop all network interfaces

  for file in ${FILES}

  do

  interface=${file##*/ifconfig.}

  # skip if $file is * (because nothing was found)

  if [ "${interface}" = "*" ]

  then

  continue

  fi

  IN_BOOT=1 ${network_devices}/ifdown ${interface}

  done

  ;;

  restart)

  ${0} stop

  sleep 1

  ${0} start

  ;;

  *)

  echo "Usage: ${0} {start|stop|restart}"

  exit 1

  ;;

  esac

  # End /etc/rc.d/init.d/network

copyright © 萬盛學電腦網 all rights reserved