Linux系統排錯及修復系統
系統引導過程概述:
1. BIOS(Basic Input Output System):直譯過來後中文名稱就是"基本輸入輸出系統"。它是一組固化到計算機內主機板上一個ROM晶片上的程式,它儲存著計算機最重要的基本輸入輸出的程式、開機後自檢程式和系統自啟動程式,它可從CMOS中讀寫系統設定的具體資訊。
2. MBR(Master Boot Record):主引導記錄,MBR儲存於磁碟的頭部,大小為512bytes,其中,446bytes用於儲存BootLoader程式,64bytes用於儲存分割槽表資訊,最後2bytes用於MBR的有效性檢查。
3. Kernel:
4. GRUB(Grand Unified Bootloader):多系統啟動程式。
一、mbr主引導分割槽損壞(grub磁碟引導階段)
1.模擬mbr引導分割槽資料(程式)丟失
fdisk -l ### *在哪,boot載入程式就在哪個分割槽
dd if=/dev/zero of=/dev/vda bs=446 count=1 ##截斷,破壞載入程式
reboot起不了
2.解決
1)virt-manager 中關閉虛擬機器,(小燈泡)此時硬碟啟動系統失敗,選擇使用映象啟動系統;(小電腦)確認選擇
2)開啟時,來到了安裝系統介面,選擇第三個,再選擇第二個;進入挽救模式
3)chroot /mnt/sysimage
4)grub2-install /dev/vda ###安裝主引導分割槽的程式
5)exit(兩次)
6)關閉狀態下,重新選擇硬體方法啟動
二、grub引導檔案損壞
1.模擬
rm -fr /boot/grub2/grub.cfg
reboot後系統無引導,起不了
[[email protected] ~]# df ###看/boot分割槽是否獨立出來
/dev/sda3 120529408 30757384 89772024 26% /
/dev/sda1 508588 149440 359148 30% /boot
...
2.解決
方法一:若沒有重啟:grub2-mkconfig > /boot/grub2/grub.cfg ###grub2-mkconfig就是原檔案內容,將它匯入檔案內
方法二:若重啟了,則要手動引導(一次性)
1)指定啟動分割槽
set root='hd0,msdos1' ###在第幾磁碟分割槽,此處數字寫幾
2)讀取核心,只讀掛載根目錄
linux16 /vmlinuz-核心版本號 ro root=/dev/sda3
3)讀系統初始化映象檔案
initrd16 /initramfs-核心版本號.img
4)boot ###啟動,不可以reboot,否則繼續手動引導
5)上述操作可以使系統正常啟動,但是臨時的,進入系統後要執行grub2-mkconfig > /boot/grub2/grub.cfg
注意:
1.若/boot分割槽獨立出來了,則現環境的根為真實的/boot;第二、三步如上寫相對路徑即可
2.若/boot分割槽未獨立,則現環境的根為真實的/;第二、三步寫絕對路徑/boot/...
3.挽救模式根目錄為/mnt/sysimage
三、核心引導檔案損壞
1.模擬核心檔案誤刪
rm -fr /boot/vmlinuz-3.10.0-123.el7.x86_64
開機報錯,核心檔案找不到。系統無法啟動
2.解決
1)virt-manager 中關閉虛擬機器,(小燈泡)此時硬碟啟動系統失敗,選擇使用映象啟動系統;(小電腦)確認選擇
2)開啟時,來到了安裝系統介面,選擇進入挽救模式;再選擇第二個;選擇1繼續
3)切換真實根 chroot /mnt/sysimage/
4)掛載光碟機
mkdir /source
mount /dev/cdrom /source
5)複製包
cp /source/Packages/kernel-核心版本.rpm /mnt
6)拆開包
rpm2cpio kernel-核心版本.rpm | cpio -id
7)還原
cp /mnt/boot/vmlinuz-3.10.0-123.el7.x86_64 /boot
8)exit(兩次)
9)關閉狀態下,重新選擇硬體方法啟動
四、系統初始化映象檔案(img檔案)缺失
1.模擬
rm -fr /boot/initramfs-3.10.0-123.el7.x86_64.img
reboot時會有報錯,初始化檔案找不到
2.改正
方法一:刪除檔案後本機沒有重新啟動
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) ##uname -r 顯示核心版本名
方法二:刪除檔案後本機已經重新啟動
1)virt-manager 中關閉虛擬機器,(小燈泡)此時硬碟啟動系統失敗,選擇使用映象啟動系統;(小電腦)確認選擇
2)開啟時,來到了安裝系統介面,選擇第三個;再選擇第二個;進入挽救模式
3)df
4)chroot /mnt/sysimage
5)df
6)mkdir /boot/initramfs-$(uname -r).img $(uname -r) ###$()=數學();uname -r 檢視核心版本號
7)exit(兩次)
8)關閉狀態下,重新選擇硬體方法啟動
五、systemctl初始化(系統啟動級別被修改)
1.設定開機後重啟
cd /etc/systemd/system/
[[email protected] system]# ll default.target ###系統開機檔案
lrwxrwxrwx. 1 root root 40 Jul 10 2014 default.target -> /usr/lib/systemd/system/graphical.target
[[email protected] ~]# ll /usr/lib/systemd/system/graphical.target ###有圖介面
-rw-r--r--. 1 root root 522 Apr 2 2014 /usr/lib/systemd/system/graphical.target
[[email protected] system]# ll /lib/systemd/system/multi-user.target ###無圖介面
-rw-r--r--. 1 root root 524 Apr 2 2014 /lib/systemd/system/multi-user.target
[[email protected] system]# ll /lib/systemd/system/poweroff.target ###系統關閉檔案
-rw-r--r--. 1 root root 500 Apr 2 2014 /lib/systemd/system/poweroff.target
[[email protected] system]# ll /lib/systemd/system/reboot.target ###系統重啟檔案
-rw-r--r--. 1 root root 493 Apr 2 2014 /lib/systemd/system/reboot.target
[[email protected] system]# rm -fr default.target
[[email protected] system]# ln -s /lib/systemd/system/reboot.target /etc/systemd/system/default.target ###將重啟檔案與開機檔案連結,這樣重啟優先順序調高,也就更改了啟動級別為重啟
reboot會進入無限重啟
2.改正:先手動進入圖形介面,再更改鏈路
1)在進入系統時按『e』 ###進入系統挽救模式
2)在系統核心linux16那行最後加上5 ###init5 有圖啟動
3)『ctrl+x』 ##執行
4)進入虛擬機器後
[[email protected] ~]# systemctl set-default graphical.target ##開啟初始的啟動級別:有圖啟動
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/graphical.target' '/etc/systemd/system/default.target'
5)[[email protected] ~]# ll /etc/systemd/system/default.target ###已連結到正確鏈路
lrwxrwxrwx 1 root root 40 Oct 29 22:01 /etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target
六、當忘記超級使用者密碼
1.在進入系統時按『e』 ###進入系統挽救模式
2.刪除系統核心linux16那行ro及以後內容,將其改為rw rd.break ###核心啟動終止,不進入系統初始化。系統初始化是進行認證的
3.『ctrl+x』 ###進入單使用者模式執行
4.chroot /sysroot/ ###進入真實的系統根目錄
5.whoami ###檢視當前使用者身份
6.echo 新密碼|passwd --stdin root ###非互動式改密碼
7.touch /.autorelabel ####重新建立密碼後selinux預設不識別,需要重新初始化selinux(selinux的機制;重新載入安全上下文)
8.兩次exit