Linux-CentOS6.9啓動流程排錯

  1. CentOS6.9啓動流程

    • POST 加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、串並行接口、鍵盤、CD-ROM光驅等硬件情況的檢測。
    • Boot Sequence(BIOS) 加載BIOS的硬件信息,獲取第一個啓動設備
    • Boot Loader MBR ,引導加載器,引導程序
    • Kernel(ramdisk) 加載核心操作系統的核心,加載硬件驅動
    • rootfs 只讀
    • switchroot 主根(init | systemd)
    • /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 設定默認運行級別
    • 系統初始化腳本 rc.sysinit,完成系統初始化 --> 關閉或啓動對應級別的服務
    • 啓動終端
  2. /boot/中ramdisk文件恢復

    • rm -rf initramfs-2.6.32-696.el6.x86_64.img
      #意外刪除ramdisk文件機器未重啓時,恢復ramdisk文件方法:

      • mkinitrd /boot/initramfs- $(uname -r).img $(uname -r)
        爲當前正在使用的內核重新制作ramdisk文件,基於內核的,所以參數要給定當前內核版本號。容納後語句會自動生成文件 [initramfs-2.6.32-696.el6.x86_64.img]
      • dracut /boot/initramfs-$(uname -r).img $(uname -r)
        效果同 mkinitrd 一樣
    • #意外丟失ramdisk文件後,重啓機器,恢復方法:
      • 使用光盤引導,進入救援模式。
        最後使用 shell start shell 進入光盤系統。
        • df 查看 系統根目錄爲:/dev/sda2 /mnt/sysimage
        • chroot /mnt/sysimage/ 將根從光盤系統的根切換到主機系統的根,從而去修復主機系統。
          使用沒重啓前的恢復方法。
          -->#--> mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
          -->#--> dracut /boot/initramfs-$(uname -r).img $(uname -r)
          完成後重新啓動即可【SElinux啓用狀態時,開機時,給主機全部文件打上標籤,最好重啓前關閉SElinux】
          Linux-CentOS6.9啓動流程排錯
  3. 核心文件/boot/vmlinuz- VERSION -release,意外丟失後恢復方法。
    重啓後的狀態:
    Linux-CentOS6.9啓動流程排錯

    • 修復方法:
      • 進入救援模式,如果不需要網絡功能可以先不配,一直跳過即可
      • 創建一個空文件 /mnt/cdrom,並且將光盤/dev/sr0掛載到空文件上
      • 使用rpm -ivh /mnt/cdrom/Packages/kernel-VERSION.rpm --force【強制重新安裝】--root=/mnt/sysimage【指明主機根目錄】
      • 安裝完成後,等待內存寫入磁盤,sync 同步數據,重啓即可。
  4. 在啓動第一階段錯誤,MBR引導的第一個扇區中446字節,丟失或損壞時。
    重啓後狀態直接進入光盤引導頁面,因爲主機硬盤沒有MBR啓動引導,機器BIOS會自動尋找有啓動引導的東西來啓動。

    • 修復方法1:

      • 進入bash shell後,切到主機的根`chroot /mnt/sysimage/`
        • 運行 grub-install /dev/sda 命令【給主機硬盤修復grub所有啓動操作】
    • 修復方法2:
      • 使用交互式命令 grub
      • 交互輸入 root(hd#,#)【描述boot所在的硬盤編號,和硬盤裏第幾個扇區】
      • setup(hd#) 安裝即可
        【grub 交互式命令來修復,依賴/boot/grub/stage1文件】
  5. 破環grub啓動中 1.5階段 mbr之後的27個扇區,讓1階段中bootloader能識別2階段所在的分區上的文件系統
    重啓後提示【沒有了文件系統驅動,無法識別2階段,所以涼了】
    Linux-CentOS6.9啓動流程排錯

    • 修復方法:
      • 進入光盤引導,救援模式
      • 切到主機的根 chroot /mnt/sysimage/
      • 使用grub-install /dev/sda 命令修復即可
      • 命令執行完後,建議sync同步數據,將數據從內存寫入硬盤後,重啓即可
        【grub-install命令可以一鍵修復1階段,1.5階段,2階段,非常強大。但是grub.conf文件無法修復,只能手寫grub.conf配置文件】
  6. 啓動第二階段,grub.conf文件丟失或這損壞,第二階段就無法啓動。

    • grub.conf文件的格式
      #boot=/dev/sda
      default=0 #默認啓動那一個系統
      timeout=5 #倒計時5秒後,使用默認系統啓動
      splashimage=(hd0,0)/grub/splash.xpm.gz
      hiddenmenu
      title CentOS (2.6.32-696.el6.x86_64)  #開啓內核列表
      root (hd0,0)  #系統默認的根,就是/boot 目錄,定義根的位置 在哪個磁盤,哪個扇區
      kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=93131fa4-d1bc-4442-b42f-215a7bb7a273
      【rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet】【這些內容不寫,也可以正常啓動,只是一些屬性配置設置】
      initrd /initramfs-2.6.32-696.el6.x86_64.img
    • 修復方法:

      • 進入光盤掛載救援模式
        • 切根 chroot /mnt/sysimage
        • 進入/boot/grub裏創建 grub.conf文件
      default=0
      timeout=5
      title centos6
      kernel /vmlinuz-VERSION.img ro【只讀的意思,爲了安全要加,加不加都可以】root=UUID=..【主機根目錄】....
      initrd /initramfs-VERSION.img
  7. 當/boot 整個文件夾被清空,恢復系統操作
    重啓後錯誤提示:
    Linux-CentOS6.9啓動流程排錯

    • 修復方法:
      • 光盤引導,進入救援模式
      • 切根chroot /mnt/sysimage 切入主機根
      • 主機上掛載光盤 mount /dev/cdrom /mnt
      • 重新強制安裝內核 rpm -ivh /mnt/Packages/kernel-VERSION.rpm --force 【sync命令,同步數據】
      • grub-install /dev/sda 修復 第1 第1.5 第2 階段
      • /boot/grub/目錄下缺少 grub.conf文件,手動寫入
      • UUID地址可以用 vim指令讀入 blkid /dev/sda2命令顯示內容,或者直接寫root=/dev/sda2 也可以
        Linux-CentOS6.9啓動流程排錯
    • 第二種情況,/boot/下所有文件丟失、/etc/fstab文件也丟失,根都掛載不上去,首先需要修復 fstab 文件
      • blkid 命令 和 fdisk -l 命令 ,查看磁盤分區和UUID ,嘗試找到 根 分區和 boot/ 分區,手動寫 fstab 文件 。【看分區大小,或者 將分區掛載到文件目錄,查看分區中的內容,判斷分區是否爲根】
      • 簡單寫一下 fstab文件
        Linux-CentOS6.9啓動流程排錯
      • 重啓啓動,進入救援模式,可以掛載上根了。
      • 後續恢復方法,同/boot 被清空的 修復方式一樣即可。
  8. 系統主進程丟失 ,/sbin/init 丟失,錯誤提示:
    Linux-CentOS6.9啓動流程排錯
    • 恢復方法:
      • 在開機,進入系統內核選擇菜單,按 e 鍵 ,在選中內核 按e鍵, 在最後,添加 init=/bin/bash ,用 bash替代init,然後保存 繼續啓動。
      • 這時候,進入的是根的 只讀掛載模式 使用 mount -o remount,rw / 重新掛載根,讀寫權限。
      • 將光盤掛載,然後使用 rpm -ivh /mnt/Packages/upstart-xxxxxxx.rpm --force 強制安裝 init 進程程序的包。即可[可tab 補全]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章