1. 程式人生 > >linux系統啟動過程中的排錯

linux系統啟動過程中的排錯

一.系統啟動流程

(1)通電

(2)bios(主機板上的只讀儲存中,basic input or output system)作用,硬體檢測,啟用硬體

(3)grub系統引導(grub引導分為兩個階段)

        1)階段1 mbr(主引導記錄)主引導記錄在硬碟上的0磁軌,一扇區,446個字

         linuxMBR分割槽原理:446 Byte  硬碟主引導記錄、64  Byte 硬碟分割槽表(linux最多有四個分割槽,每個16byte、2   Byte 硬碟有效標誌

        2)階段2 grub檔案引導階段

(4)啟動核心,只讀掛載/裝置檢測裝置對裝置驅動進行初始化

(5)系統初始化階段、系統初始化階段載入initrd映象、開啟初始化程序systemd、開始selinux、載入核心引數、初始化系統時鐘、鍵盤,主機名稱、重新讀寫掛載/裝置、啟用raid,lvm、啟用配額、啟動multi-user.target.wants中的所有服務、開啟虛擬控制檯、啟動圖形


二、當系統啟動時出現錯誤,進行排錯

(1)如果 mbr 分割槽前446個位元組壞了

dd if=/dev/zero of=/dev/vda bs=446 count=1 重啟後發現無法啟動虛擬機器

(首先對虛擬機器force   off)

進入挽救模式後,執行

chroot   /mnt/sysimage/

grub2-install   /dev/vda

兩次退出(exit)後用對虛擬機器force   off

硬碟(Hard  Disk)再次啟動 

首先對虛擬機器force   off

使用光碟機啟動

進入挽救模式

再次對虛擬及force  off  之後從硬碟重新啟動


(2)如果引導檔案壞了或丟失,系統啟動不了(grub.cfg)

rm -fr  /boot/grub2/grub.cfg

在沒有reboot之前發現錯誤可以直接執行命令

grub2-mkconfig  >    /boot/grub2/grub.cfg恢復


在reboot後,重啟系統後的介面輸入以下命令:

set root='hd0,msdos1'        ##hd0 代表第一塊硬碟,msdos1 代表第一個分割槽
linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64   ro    root=/dev/vda1     
initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img
boot

開機之後執行 grub2-mkconfig  >    /boot/grub2/grub.cfg


(3)誤刪或其他原因導致的核心檔案丟失如/boot/vmlinuz -3.10.0-123.el7.x86-64丟失

1>可以使用網絡卡啟動 (沒有reboot)

下載映象裡的 Packages/kernel-3.10.0-123.el7.x86-64.rpm(放在桌面)
 rpm2cpio kernel-3.10.0-123.el7.x86-64.rpm | cpio -id
 
解壓後會有一個boot目錄在boot目錄裡面拷貝丟失的檔案到 /boot 下就ok

cp   boot/vmlinuz -3.10.0-123.el7.x86-64    /boot


2>使用光碟機啟動的(reboot之後)

進入挽救模式

cd  /run/install/repo/

cd  packages/

cp   kernel-3.10.0-123.el7.x86_64.rpm   /mnt/sysimage/mnt/

chroot    /mnt/sysimage/

cd /mnt

rpm2cpio kernel-3.10.0-123.el7.x86-64.rpm | cpio -id

解壓後會有一個boot目錄在boot目錄裡面拷貝丟失的檔案到 /boot 下就ok

cp   boot/vmlinuz -3.10.0-123.el7.x86-64    /boot

兩次退出之後再從硬碟啟動系統

從光碟機啟動

進入挽救模式



重新從硬碟啟動

(4)誤刪或其他原因導致的核心檔案丟失如/boot/initramfs-3.10.0-123.el7.x86-64丟失

rm-fr   /boot/initramfs-3.10.0-123.el7.x86_64.img

1>直接輸入命令(沒有reboot)

mkinitrd  /boot/initramfs-$(uname  -r).img    $(uname   -r)


2>使用光碟機啟動進入挽救模式

chroot  /mnt/sysimage

mkinitrd  /boot/initramfs-$(uname  -r).img    $(uname   -r)

ls  /boot/initramfs-3.10.0-123.el7.x86_64.img

兩次退出(exit)

之後從硬碟啟動





(5)系統啟動級別的設定


啟動級別

runlever0.target -> poweroff.target

runlever1.target -> rescue.target

runlever2.target -> multi-user.target

runlever3.target -> multi-user.target

runlever4.target -> multi-user.target

runlever5.target -> grapical.target

runlever6.target -> reboot.targ

(6)當我們忘記超級使用者密碼時在系統啟動時進行修改

1、重新啟動系統

2、在系統啟動階段按上下鍵停止系統引導

3、選擇啟動引導標題,按“e”進行編輯

4、找到linux16引導條目這一行,從這行最後刪除到ro選項,並把ro改為rw,然後新增rd。break選項

5、ctrl+x啟動設定過後的引導條目

6、進入系統執行

chroot   /sysroot

7、passwd    root

8、建立檔案    touch   /.autorelabel讓系統重新掃描所有檔案

9、exit(兩次退出)系統重啟