1. 程式人生 > >linux下的系統排錯

linux下的系統排錯

一、系統的開機過程引導

  1. 通電
  2. biso初始化(BIOS是基本輸入輸出系統,bios初始化實際上是執行開機電自檢和系統啟動自舉程式)
  3. grub2磁碟引導(硬碟主引導記錄MBR和分割槽表DPT以及磁碟的有效標誌。其中,主引導檢查分割槽表是否正確以及確定哪個分割槽為引導分割槽,並在程式結束時把該分割槽的啟動程式調入記憶體加以執行)
  4. grub2檔案引導階段
  5. 指定boot所在分割槽
  6. 載入核心,只讀掛載在 / 裝置
  7. 啟動該init程式進入初始化階段
  8. 啟動systemd初始化程序
  9. 讀取 /etc/systemd/ 中的檔案
  10. 啟動程式
  11. 啟動登陸環境

二、系統開機出錯的的解決措施  (以下實驗都是以虛擬機器為載體進行實驗)

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.超級使用者密碼修改成功。