linux下的系統排錯
一、系統的開機過程引導
- 通電
- biso初始化(BIOS是基本輸入輸出系統,bios初始化實際上是執行開機電自檢和系統啟動自舉程式)
- grub2磁碟引導(硬碟主引導記錄MBR和分割槽表DPT以及磁碟的有效標誌。其中,主引導檢查分割槽表是否正確以及確定哪個分割槽為引導分割槽,並在程式結束時把該分割槽的啟動程式調入記憶體加以執行)
- grub2檔案引導階段
- 指定boot所在分割槽
- 載入核心,只讀掛載在 / 裝置
- 啟動該init程式進入初始化階段
- 啟動systemd初始化程序
- 讀取 /etc/systemd/ 中的檔案
- 啟動程式
- 啟動登陸環境
二、系統開機出錯的的解決措施 (以下實驗都是以虛擬機器為載體進行實驗)
1.grub2磁碟進到階段
假設電腦的磁碟引導壞了
在虛擬機器上執行以下操作:
確認虛擬機器的作業系統的版本號
hostnamectl
dd if=/dev/zero of=/dev/vda bs=446 count=1
reboot
重啟會有以下的問題出現:
解決方法:
1.準備好虛擬機器對應的版本映象
2.在真機中以root使用者開啟虛擬機器管理 virt-manager
3.為做實驗的虛擬機器新增光碟機裝置
4.並將之前的硬碟驅動改為光碟機驅動,(將光碟機驅動放在硬碟驅動的上面)
5.開啟虛擬機器進入挽救模式
6.通過挽救模式進入到系統真實環境
chroot /mnt/sysimage
然後恢復grub2此引導
沒有出現報錯之後,兩次exit 退出
7.然後關機,將驅動改為硬碟驅動
然後開機。
系統正常開機,問題解決成功。
三、grub磁碟引導檔案丟失 /boot/grub2/grub.cfg
實驗:
在虛擬機器中刪除掉引導檔案
rm -fr /boot/grub2/grub.cfg
如果虛擬機器此時未重啟,那麼執行
grub2-mkconfig > /boot/grub2/grub.cfg
可以使系統恢復引導檔案,如果reboot 重啟了系統那麼就要進行以下操作了
在執行reboot之後
輸入以下資訊:
set root='hd0,msdos1' //hd0,msdos1表示第一個磁碟的第一個分割槽 boot分割槽
linux16 /boot/vmlinuz-3.10.0-123.e17.x86_64 ro root=/dev/vda1 ( /dev/vda1 為根分割槽)
initrd16 /boot/initramfs-3.10.0-123.e17.x86_64.img
boot //引導完成,啟動系統
系統重新啟動之後,進入系統
再執行 grub2-mkconfig > /boot/grub2/grub.cfg 命令將引導檔案恢復,下次電腦將正常啟動。
注意:如果開機不執行該操作,那麼下一次開機繼續會進入引導介面,需要重新手動引導。
四、核心檔案丟失
模擬問題:rm -fr /boot/vmlinuz-3.10.0-123.e17.x86_64 ##刪除系統核心檔案
解決思想:在安裝包中找到核心安裝包,拆解安裝包,將檔案複製到 /boot 下。
當系統未重啟時:
yum whatprovides /boot/vmlinuz-3.10.0-123.e17.x88_64 //查詢核心檔案所在的安裝包 將光碟機的packages的kenel-3.10.0-123.e17.x88_64.rpm安裝包複製到桌面上;
rpm2cpio kernel-3.10.0-123.e17.x88_64.rpm | cpio -id //將安裝包拆解,拆解後的檔案在桌面上
cp boot/vmlinuz-3.10.0-123.e17.x88_64 /boot/ //將boot目錄下的核心檔案複製到根目錄/boot/下
當系統重啟之後,會出現
為虛擬機器新增光碟驅動
並將虛擬機器設定成開機先啟動光碟驅動
進入到挽救模式
執行 df 命令可以看到
當前光碟機掛載點為 /dev/sr0 --------> /run/install/repo
當前硬碟掛載點為 /dev/vda ---------> /mnt/sysimage
cd /run/install/repo/Packages //進入到光碟機存放軟體包的地方
cp kenel-3.10.0-123.e17.x88_64.rpm /mnt/sysimage/mnt //將核心檔案壓縮包複製到/mnt
chroot /mnt/sysimage //從挽救環境進入系統真實環境
cd /mnt //進入/mnt下
rpm2cpio kernel-3.10.0-123.e17.x88_64.rpm | cpio -id //將安裝包拆解
cp boot/vmlinuz-3.10.0-123.e17.x88_64 /boot/ //將核心檔案複製到/boot
exit //退出系統真實環境
exit //退出挽救環境
進行完以上操作只有將虛擬機器改為硬碟驅動
開機進入系統,系統恢復正常。
五、系統初始化檔案丟失
實驗:
在虛擬機器上執行 rm -fr /boot/initramfs-3.10.0-123.el7.x86_64.img 刪除掉初始化檔案
若虛擬機器未重啟,則執行下列命令可恢復檔案:
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
// uname -r 為檢視當前系統核心的版本號
若虛擬機器重啟,那麼會出現報錯:
那麼就需要新增映象檔案為光碟機,並且設定開機光碟機啟動
進入挽救模式:
sh-4.2# chroot /mnt/sysimage //切換至真實的系統環境
bash-4.2# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) //按照當前核心版本號恢復初始化檔案
cat:write error: Broken pipe
bash-4.2# exit
然後關機,將虛擬機器恢復到硬碟驅動啟動
開機之後發現系統恢復。
六、 開機啟動級別發生錯誤
Linux系統有7個執行級別(runlevel) 執行級別0:系統停機狀態,系統預設執行級別不能設為0,否則不能正常啟動 執行級別1:單使用者工作狀態,root許可權,用於系統維護,禁止遠端登陸 執行級別2:多使用者狀態(沒有NFS) 執行級別3:完全的多使用者狀態(有NFS),登陸後進入控制檯命令列模式 執行級別4:系統未使用,保留 執行級別5:X11控制檯,登陸後進入圖形GUI模式 執行級別6:系統正常關閉並重啟,預設執行級別不能設為6,否則不能正常啟動
設定啟動級別
systemctl set-default + 啟動級別
實驗:
在虛擬機器上執行命令 systemctl set-default shutdown.target
開機會出現錯誤提示
解決方法:
1.重新啟動進入該介面
2.開機按上下鍵停止讀秒
3.按 ‘ E ’ 進入編輯模式
4.選擇核心啟動行,linux16 /vmlinuz-xxxxxxxx ro xxxxxxxxx 後新增啟動級別5
5.ctrl+x執行
6.系統恢復正常。
6.修改超級使用者的密碼
七、在忘記超級使用者密碼無法登陸的時候,怎麼樣來修改使用者的密碼
1.重啟系統
2.在系統啟動階段按上下鍵停止讀秒
3.按 “ E ” 進入系統內部
4.找到這條
並將 ro (只讀)改為 rw (讀寫),然後加上 rd.break
5.ctrl+x啟動設定過後的系統引導條目
6.進入系統後執行 chroot /sysroot 切換到真實的系統環境
7.修改超級使用者的密碼
8.建立檔案 touch /.autorelabel 讓系統從新掃描所有檔案
9.exit兩次使系統自動重新啟動
10.超級使用者密碼修改成功。