1. 程式人生 > >CentOS6啟動流程呢個以及刪除boot分區相關實驗

CentOS6啟動流程呢個以及刪除boot分區相關實驗

同步數據 app 超級 config c# status sim 重啟 b-

centos6啟動流程

  1. 主動讀取BIOS,通過CMOS加載硬件信息 ,並進行POST,指定第一個可啟動的設備

    ROM:BIOS,Basic Input and Output System,保存著計算機系統最重要的基本輸入輸出程序,系統信息設置,開機加電自檢程序
    RAM:保存各項參數的設定

  2. 讀取第一個可啟動設備MBR的引導加載程序(grub)的啟動信息

    • MBR: 446 boot loader 64:分區表 2 :55aa
      • BIOS通過硬件的INT13中斷功能來讀取MBR的
    • Windows:ntloader 僅是啟動OS
      Linux: 提供菜單; 轉交系統控制權; 直接指向內核文件

      1. LILO:LInuxLOader
      2. GRUB: GRandUnified Bootloader

        • primary boot loader:1st stage,1.5stage
        • secondary boot loader:2 stage,分區文件

          bootloader的1stage是在MBR內進行的,1.5stage是再0面0磁道0扇區的後續扇區,2stage是在/boot分區上邊
          1stage是 尋找/boot分區的文件系統驅動
          1.5stage內就是/boot分區文件系統驅動,識別/boot分區
          2stage是/boot分區相關操作
          /boot/grub下的stage類文件(除了stage2)都是備份

    • ramdisk:使用緩存或緩沖來加速對磁盤上文件的訪問

      • centos5:initrd 工具程序:mkinitrd
        centos6:initramfs 工具程序:mkinitrd,dracut

        自己創建initramfs文件
        mkinitrd [-v] [-with=模塊名稱] initrd文件名 內核版本

          -v 顯示mkinitrd的過程
          --with=[模塊名稱]:模塊名稱指的是模塊的名字,不需填寫文件名
                  如果在救援模式下,需要切根,因為救援模式下好多庫文件不存在
        
    • 解壓縮內核到內存中,

      加載可識別的所有硬件設備(以自己的功能重新檢查一次硬件,不一定適用BIOS的檢測結果)
      加載硬件驅動
      以只讀方式掛載根系統
      運行用戶空間的第一個程序:/sbin/init

    • 內核內容

  3. 內核執行init程序,獲取默認運行信息

    • init程序類型:
      • SysV: init, CentOS 5之前
        配置文件:/etc/inittab
      • Upstart: init,CentOS6
        配置文件:/etc/inittab, /etc/init/*.conf
      • Systemd:systemd, CentOS 7
        配置文件:/usr/lib/systemd/system;/etc/systemd/system
    • 運行級別,為系統運行或者維護等目的而設定;0-6,7個級別

      0 系統直接關機
      1 單用戶模式下,用在系統出問題時的維護
      2 類似下面的runlevel 3,但無NFS服務
      3 純文本模式;多用戶模式
      4 系統保留功能;與上面的runlevel 3基本沒有差異
      5 圖形界面
      6 重新啟動
      切換等級:init #
      查看等級: runlevel who -r

    • /etc/inittab文件相關知識

      • 每一行定義一種action以及與之對應的process
      • id : runlevel : action : process

        id:代表init的主要工作選項,只是簡單代表說明
        runlevel:在那些等級下運行
        action: initdefault:代表默認的runlevel設置值
        sysinit:代表系統初始化的操作選項
        ctrlaltdel:代表ctrl+alt+del三個按鍵是否可以重新啟動
        wait:代表後面設置的命令項目必須要執行完畢才能繼續下面的其他操作
        respawn:代表後邊字段的命令可以無限制的重新啟動
        process:可以進行的命令

          ca::ctrlaltdel:/sbin/shutdown -t3 -r now
          id:3:initdefault:
          si::sysinit:/etc/rc.d/rc.sysinit
          l0:0:wait:/etc/rc.d/rc0
          l1:1:wait:/etc/rc.d/rc1
          1:2345:respawn:/sbin/mingetty tty
          x:5:resawn:/etc/prefdm -nodaemon  x window 則是這行決定的
        
      • /etc/init/*.conf

  4. init程序執行/etc/rc.d/rc.sysinit文件

    取得網絡環境與主機類型:/etc/sysconfig/network
    設置顯示與啟動過程中的歡迎界面(textbanner)
    檢查根文件系統,並以讀寫方式重新掛載根文件系統
    掛載/etc/fstab文件中定義的文件系統
    設置系統時間:讀入/etc/sysconfig/clock設置值 修改時區的話,把/user/share/zoneinfo/Asia Shanghai復制到/etc/local下
    激活udev和selinux
    激活swap設備
    初始化軟件磁盤陣列、初始化lvm文件系統、、磁盤配額
    加載內核相關設置:/etc/sysctl.conf
    用戶自定義模塊加載:/etc/sysconfig/modules.conf設置
    清除啟動過程中產生的臨時文件
    將啟動相關信息加載到/var/log/dmesg中

  5. 啟動核心的外掛模塊/etc/modeprobe.conf文件

  6. init執行各個批處理文件

    • 各個運行級別腳本所在目錄:

      /etc/rc.d/rc 0.d
      /etc/rc.d/rc 1.d
      /etc/rc.d/rc 2.d
      /etc/rc.d/rc 3.d
      /etc/rc.d/rc 4.d
      /etc/rc.d/rc 5.d
      /etc/rc.d/rc 6.d

    • 腳本文件運行規則:
      進入到某個運行級別的腳本目錄/etc/rc.d/rcN.d

      k: k##: ##運行次序;數字越小,越先運行;數字越小的服務,通常為依賴到別的服務
      s: S##:##運行次序;數字越小,越先運行;數字越小的服務,通常為被依賴到的服務
      s開頭的文件,運行
      k開頭的文件,關閉

    • chkconfig命令詳解
      1. 查看服務所在級別的啟動或關閉情形
        chkconfig [--list] name
        添加服務給chkconfig管理

      2. SysV的的服務腳本放置於/etc/init.d
        chkconfig --add name

      3. 服務腳本格式信息

         \# chkconfig:   345 95 5    #345表示在3,4,5模式下為開啟,95為S95,5為K5
         \# description:                #描述,在CentOS5必須加上,在CentOS6以及之後的版本可不加
        
      4. 刪除
        chkconfig --del name

      5. 修改制定的鏈接類型
        chkconfig [--level levels] name <off|on|reset>
        --level LLLL:省略是表示2345

    • 圖形化界面ntsysv命令
  7. init執行/etc/rc.d/rc.local

    正常情況下,最後啟動一個服務S99local沒有鏈接至/etc/init.d下的腳本,而是指向了/etc/rc.d/rc.local腳本
    不便或不需寫為服務腳本放置於/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置於/etc/rc.d/rc.local文件中

  8. 執行/bin/login程序,等待用戶登錄

         1:2345:respawn:/usr/sbin/mingettytty1
         2:2345:respawn:/usr/sbin/mingettytty2
         ...
         6:2345:respawn:/usr/sbin/mingettytty6
         mingetty會自動調用login程序
         x:5:respawn:/etc/X11/prefdm -nodaemon
    
  9. 登錄後以shell控制主機

    BIOS加載硬件信息--》post加電自檢--》加載MBR裏grub信息--》stage1.5--》stage2--》initramfs--》 rootfs-->init-->/etc/inittab-->設置默認運行級別-->初始化/etc/rc.d/rc.sysinit-->/etc/rc.d/rc#.d-->/etc/rc.local

  10. 補充:

    xinetd管理的服務

    • Linux中,可以將一些不常用的服務先關閉,當有人訪問服務的時候激活這些服務,而沒有人訪問的時候就關閉,這個服務就是 xinetd 服務,也叫做超級守護進程,它是一個獨立服務,必須啟動。而依賴 xinetd 服務的服務,叫做非獨立服務。註意:非獨立服務和運行模式沒有關系。而非獨立服務下,也就是xinetd服務所管理的服務,如果顯示為off狀態,那麽xinetd服務無法將其喚醒。而當其顯示為on狀態,這個服務將能被xinetd服務喚醒:
       chkconfig --list #查看xinetd服務
       chkconfig 服務名稱 on #啟動這個服務(這一步相當於修改了它的配置文件,還需要激活才能生效 )
       service xinetd start #激活xinetd服務
      
    • /etc/xinetd.d/是xinetd的配置文件,它下面存放了依賴於xinetd服務的配置文件,而chkconfig --list所查看到的xinetd中的所有服務都是從這個目錄中的配置文件讀出的:
        拿telnet服務來所:
        vim /etc/xinetd.d/telnet
            disable = no        #表示不禁用,等於yes表示禁用
      
    • 註意,在CentOS5,6中是區分獨立服務和非獨立服務的,而在CentOS7中全部都是非獨立服務
    • service命令:手動管理服務
        service 服務 start|stop|restart
        service --status-all
      
    • 瞬態(Transient)服務被xinetd進程所管理
      進入的請求首先被xinetd代理
      配置文件:/etc/xinetd.conf、/etc/xinetd.d/
      與libwrap.so文件鏈接
      用chkconfig控制服務
        chkconfig tftp on
      

實驗

  • 刪除掛載在邏輯卷的根下的/etc/fstab配置文件以及/boot/目錄下的文件
  • 新手上路,使用mv替代rm,cp備份
              mv /etc/fstab /root/fstab    #fstab文件移動到root家目錄下的fstab中
              mkdir /root/boot && mv /boot/* /root/boot        #將boot下的所有文件移動到家目錄下的boot中(boot需要創建)
              sync*3                                #同步數據到磁盤
              reboot                                #重啟
              進入救援模式
              df                                    #查看掛載,發現並沒有被掛載!
              [](http://i.imgur.com/RMtLBfO.png)
              ls /dev/mapper    &&                    #mapper是所有LVM存放的地方,我們可以查看有沒有邏輯卷存在
              lvdisplay                        #使用lvdisplay命令查看LVM狀態,發現都是不可用狀態,並且很用容易看出根目錄在哪個邏輯卷中
              vgchage -ay                            #激活vg,也就是激活邏輯卷
              lvdisplay                            #再次確認LVM狀態
              ls /dev/mapper                        #查看LVM設備
              mount /dev/mapper/VolGroup-lv_root /mnt/sysimage        #根據查看到的信息將根掛載到/mnt/sysimage(sysimage可以是其他掛載點)下
              cd /mnt/sysimage                    #切換到操作系統根目錄下
              ls                                    #查看是否是操作系統根目錄
              vi etc/fstab                    #在當前目錄下的etc下創建fstab文件,註意是當前目錄而不是/
                  :r! ls /dev/mapper        #在末行模式下使用r!讀取出LVM的名字
                  /dev/sda1  /boot  ext4  defaults 0 0
                  /dev/mapper/VolGroup-lv_root  / ext4 defaults 0 0
                  /dev/mapper/VolGroup-lv_swap swap  swap  defaults 0 0    #註意,所有的LVM信息都需要寫入
                  wq            #保存退出
              sync*3        #同步磁盤,sync輸入三次
              exit        #退出bash,進入菜單reboot重啟,必須退出重啟
              進入救援模式
              chroot    /mnt/sysimage/    #切根
              mount /dev/cdrom /mnt    #掛載光盤到/mnt
              rpm -ivh /mnt/Packages/kernel-2.6.32-642.e16.x886_64.rpm --force    #安裝kernel包
              ls /boot        #查看boot下文件是否恢復
              grub-install /dev/sda    #修復grub
              退出並重啟
              在grub後輸入
              kernel /vmlinuz-2(tab補全) root=/dev/mapper/VoGroup-lv_root selinux=0
              initrd /init(tab補全)
              boot    #啟動
              #註意,修復grub.conf文件時臨時有效,如果想永久修復需要重新編輯/boot/grub/grub.conf
                  default=0
                  timeout=5
                  title CentOS68
                      kernel (hd0,0)/vmlinuz-.... ro root=/dev/vg0/root 
                      initrd /initramfs-...img

CentOS6啟動流程呢個以及刪除boot分區相關實驗