Linux啟動流程及錯誤修復
系統啟動流程
通電
||
bios(主機板上的只讀儲存中,basic input output system) 作用:硬體檢測,啟用硬體
||
grub系統引導(grub引導分為兩個階段)
階段1:mbr(主引導記錄)主引導記錄在硬碟上的0磁軌,一扇區,446個位元組
階段2:grub檔案引導階段
||
啟動核心,只讀掛載/裝置,檢測裝置,對裝置驅動進行初始化,進入系統初始化階段
||
系統初始化階段
載入initrd映象,開啟初始化程序systemd,開始selinux,載入核心引數,初始化系統時鐘,鍵盤,主機名稱
重新讀寫掛載/裝置,啟用raid,lvm,啟用配額,啟動multi-user.target.wants中的所有服務,開啟虛擬控制檯
啟動圖形
常見系統錯誤
主引導記錄mbr被刪除
模擬問題:fdisk -l ---- 檢視當前主機的磁碟裝置,找到帶*的裝置,這裡實驗主機上為/dev/vda1
dd if=/dev/zero of=/dev/vda1 bs=446 count=1 ---- 刪除裝置上的主引導記錄
報錯介面:
解決方法:
虛擬機器加光碟,掛載映象,從boot options中設定從光碟中優先啟動
選擇troubleshooting
進入第二個挽救模式
挽救模式會找到已經安裝的linux系統,並把根掛載到/mnt/sysimage,挽救模式的根和真實系統不是一個根
選擇continue得到挽救模式的環境
chroot /mnt/sysimage ---- 切換到真實的根系統
grub2-install /dev/vda ---- 安裝446位元組的引導,沒有錯誤代表成功安裝
boot options 更改啟動選項,機器即可正常啟動
引導檔案grub.cfg丟失
模擬問題:rm -fr /boot/grub2/grub.cfg
報錯介面:
解決方法:
當主機沒有關閉時:
grub2-mkconfig > /boot/grub2/grub.cfg ---- 將grub檔案重新寫入boot
當主機已經關閉時:
setroot='hd0,msdos1' ---- boot啟動分割槽
linux16 /boot/vmlinuz-3.10.0-123.e17.x86_64 ro root=/dev/vda1 ---- 路徑為自己根所在路徑
initrd16 /boot/initramfs-3.10.0-123.e17.x86_64.img ---- 系統初始化程式
boot
系統即可正常啟動,系統啟動後grub.cfg檔案還沒有存在:grub2-mkconfig > /boot/grub2/grub.cfg
核心檔案丟失
模擬問題:rm -fr /boot/vmlinuz-3.10.0-123.e17.x86_64
報錯介面:
解決方法:
掛載映象至光碟
進入挽救模式
chroot /mnt/sysimage
mkdir /westos
df ---- 檢視光碟裝置名稱
mount /dev/sr0 /westos ---- 把光碟掛載到新建的目錄中
cd /westos/Packages ---- 進入光碟的包目錄
cp kernel-3.10.0.-123.e17.x86_64.rpm /mnt
rpm2cpio kernel-3.10.0.-123.e17.x86_64.rpm | cpio -id
cd /mnt/boot
cp vmlinuz-3.10.0-123.e17.x86_64 /boot
boot options 更改啟動選項,機器即可正常啟動
系統初始化映象檔案丟失
模擬問題:rm -fr /boot/initramfs-3.10.0-123.el7.x86_64.img
報錯介面:
解決方法:
當主機沒有關閉時:
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
uname -r ---- 檢視版本號
當主機已經關閉時:
掛載映象至光碟
進入挽救模式
chroot /mnt/sysimage
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
boot options 更改啟動選項,機器即可正常啟動
/boot目錄被誤刪
模擬問題:rm -fr /boot/*
報錯介面:
解決方法:
掛載映象至光碟
進入挽救模式
chroot /mnt/sysimage
grub2-install /dev/vda1
cp vmlinuz-3.10.0-123.e17.x86_64 /boot
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
grub2-mkconfig > /boot/grub2/grub.cfg
boot options 更改啟動選項,機器即可正常啟動
開機啟動級別發生錯誤
模擬問題:systemctl set-default reboot.target
報錯介面:主機開機一直重啟
解決方法:
在此介面按e
修改檔案內容如下,在行尾加入5 ctrl+x重啟
重啟時,修改啟動級別
systemctl set-default graphical.target
忘記超級使用者密碼
模擬問題:假裝忘記超級使用者密碼
解決方法:
開機啟動時,按e進入介面
把ro改為rw,然後新增rd.break選項 ctrl+x啟動
chroot /sysroot切換到真實的系統環境
passwd 更改超級使用者密碼
touch /.autorelabel ---- 讓系統重新掃描所有檔案,當系統selinux關閉時,可以不建立此檔案。selinux開啟時必須建立此檔案
密碼修改成功