linux系統啟動過程中的排錯
一.系統啟動流程
(1)通電
(2)bios(主機板上的只讀儲存中,basic input or output system)作用,硬體檢測,啟用硬體
(3)grub系統引導(grub引導分為兩個階段)
1)階段1 mbr(主引導記錄)主引導記錄在硬碟上的0磁軌,一扇區,446個字
linux中MBR分割槽原理: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.img1>直接輸入命令(沒有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(兩次退出)系統重啟