20.#.Centos啓動各類故障狀況分析

1.密碼忘了

解決思路和方式:若是能用1模式破解直接破解,不能1破解直接光盤模式進入系統刪除shadow文件中root密碼便可。node

2.fstab 出現掛載錯誤

查看掛載博客中的詳細解釋,這裏再也不贅述。linux

3.grub.conf中 initrd 和 kernel 項先後順序寫反了:

錯誤提示:

就是英文表示他倆順序反了vim

解決思路:

調換順序便可centos

解決步驟:

簡單點:能夠不用掛壁光盤模式,直接esc鍵進入選擇菜單模式,而後按e編輯,用d刪除initrd這一行並用o鍵刪從新添加這一行,以實現調換順序的目的,而後啓動。(或者也能夠在這裏按c鍵進入命令行模式,而後直接輸入kernel,root,initrd進入系統)網絡

  • 注意啓動以後進入系統仍須要修改/boot/grub/grub.conf文件爲正確才行,上面的操做是在內存中的臨時性修改,下次啓動如若不修改文件正確仍是會這樣。
    所以仍是直接進入光盤模式把文件修改正確一步到位更加方便!

4.啓動盤MBR分區表64字節分區信息錯誤

錯誤顯示:

硬盤直接沒法掛載,沒有分區格式,啓動時啓動一半便卡住ide

解決思路:

只能靠以前備份過的分區表來恢復此64字節的數據了
能夠所有備份512字節,也能夠只備份447到510字節的數據(注意地址比字節數少1,由於從0地址開始的)
建議兩個都備份,若是隻是分區壞了則還原的時候只修復分區信息便可。測試

解決步驟:

  1. 進入光盤救援,注意要跳過硬盤的檢測(由於沒法掛載)
  2. lsblk或者f(g)disk -l /dev/sda等查看硬盤
  3. 從網絡或者其餘設備scp備份過的分區64位字節數據
  4. 還原數據dd if=$backupDisk of=$Disk bs=1 count=64 seek=446
  5. 重啓便可
  • 注意光盤救援模式從網絡拷貝文件的時候,可臨時配一個IP地址,這樣才能連通內網網絡,實現的話可用命令
    ifconfig ens33 IP地址/端口
    例如 ifconfig ens33 192.168.0.1/23
    或者ip a a 192.168.0.2/24 dev eth0

5.啓動盤的前MBR 分區表446字節錯誤

  • 注意:此錯誤和後面的錯誤狀況的顯示狀況相似,若是不知道詳細錯誤緣由,所以用了grub-install命令以後,要按照後面的解決步驟來解決問題,只有知道僅僅是446字節錯誤的狀況下才可按照下面的步驟較少的方法操做。

錯誤提示:

正如分析所示,若是有光盤掛載的話則直接進入光盤模式(由於啓動盤的grubstage1錯誤)動畫

解決思路:

光盤救援模式從新恢復grub1便可
注意在這裏只是沒法啓動,分區表仍然存在,則硬盤的分區可以直接掛載(光盤啓動就能檢測到並掛載,文件系統也沒有被破壞)。ui

結局步驟:

  1. 進入光盤救援模式
  2. 輸入grub(無需切根) 在交互式模式下進行恢復(僅支持/boot下grub文件夾中的備份文件沒有丟失,不然要用grub-install)
  3. 選擇依靠恢復文件的boot文件夾的目錄 grub > root (hd0,0) , 選擇安裝446字節MBR位置 grub > setup(hd0) . 退出quit (注意小括號前面有個空格)
  4. sync命令強制寫入磁盤
  5. 安裝完成後reboot.

image

5.2更方便而且更可靠的方式則是利用install安裝修復grub,無需依賴grub文件夾中備份文件

  1. 進入光盤救援模式
  2. 切換根
  3. 執行命令grub-install /dev/sda 等待
  4. 成功以後重啓便可
  • 注意以上是在stage2中沒錯誤的狀況下的命令,由於install也不能修復grub.conf文件,仍需手寫它。

5.3有一種特殊狀況:

就是計算機啓動狀態下運行了grub-install命令,而後把boot/grub文件夾下的grub.conf留下,其餘的文件刪除。在這種狀況下表面上沒錯,可是卻沒法啓動。會顯示error 15錯誤,在這種狀況下也只能按照上面的方式從新修復一次this

6.MBR 分區表512所有錯誤

解決思路:

先恢復分區表66位,再按上面方法恢復446字節grubstage1便可。

7./boot下grub文件夾丟失

錯誤顯示:

error 15 (或者是進入了grub>的交互式界面,代表grub stagr2已經加載可是缺失了grub.conf文件)

解決思路:

恢復grub文件目錄以及下面的grub.conf文件

操做步驟:

若是開機後是直接進入了grub>界面,(或者可開機後按任意鍵,而後按c鍵進入命令行)則能夠直接補入grub.conf中kernel root initrd 的內容 (此方法爲臨時啓動,啓動後仍須要恢復文件,見下圖)

image

若是error 15則:

  1. 光盤救援模式
  2. (不肯定緣由能夠先按照上一個錯誤解決的第二個方法用,grub-install /dev/sda,而後再從這一步開始執行,若是知道是grub文件夾丟失緣由形成的問題,則)手動建立grub目錄和grub.conf文件,注意位置要在mnt原來的系統根boot目錄下。
  3. 書寫格式參考下面,只須要寫重要的四行便可(可用nano命令):
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password=
title CentOS 6 (2.6.32-754.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=d5db5e08-dc6d-4b6e-84fc-7e490e44ba0c rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-754.el6.x86_64.img
  1. sync,而後重啓便可。

注意點:

  1. 那個是e(小寫字母l)6,而不是e 16!
  2. 在開機界面修改的都是沒法保存的,開機後必定要再次修改文件纔可。
    6.10標準可這樣寫:
default=0
timeout=5
hiddenmenu :前三項要寫在title的前面,寫進去會出錯
title Centos 6
        root (hd0,0)
        kernel /vmlinuz-2.6.32-754.el6.x86_64  ro  root=/dev/sda2
        initrd /initramfs-2.6.32-754.el6.x86_64.img

8.MBR 446字節(或者512字節)以及gurb文件夾所有丟失錯誤

錯誤提示:

由於開機找不到啓動設備,則開機後它會按照順序尋找啓動設備。如如有光盤掛載則直接進入光盤中。

解決思路:

(如若512字節,則先恢復備份過的分區表)能夠用grub-install命令直接恢復stage1(MBR446字節) stage1.5(第一個扇區以後的裝有若干個文件系統驅動文件的扇區)以及stage2(除了grub.conf文件以外)的文件,而後手動寫好grub.conf文件。

解決步驟(假設分區表已經恢復,硬盤能夠掛載了):

  1. 進入光盤救援模式
  2. 切換根chroot /mnt/sysimage
  3. grub-install /dev/sda (如若boot不在root下,指明boot所在的上一級目錄)
  4. 進入/boot/grub文件夾中,手動修改grub.conf文件(可按照上面的格式來寫)
    • 小技巧:能夠在vim中用r!ls /boot/vmlinuz-VERSION /boot/initramfs-VERSION.img 的方式讀入內核和initrd文件名,以及root=UUID 可用r! blkid /dev/sda2命令讀入,以避免不知名稱如何手寫。
  5. reboot

9.MBR 446 (或512)字節崩壞,boot整個目錄丟失

錯誤提示:

同上,但若是僅僅是boot丟失,則會相似grub文件夾丟失顯示error 15

解決思路

(先恢復分區表),進入光盤恢復模式後要先恢復boot目錄中的必要文件,而後安裝grub。其中1.內核文件(從光盤中直接拷貝或者從新安裝內核包)2.虛擬文件系統建立(mkinitrd --help)3.grub文件夾(主要是grub.conf要在install以後手動書寫)

解決步驟:

  1. 進入光盤救援模式
  2. 切換根chroot /mnt/sysimage
  3. 進入boot文件夾(/dev/sda1),拷貝光盤中的內核文件vmlinuz,而後根據此內核文件製做initramfs.img文件,此時能夠再也不寫版本了(不過注意grub.conf中也要相對應不寫版本號了)
    • 不寫版本號製做initrd:mkinitrd /boot/initramfs.img `uname -r`
      3.2 也能夠直接rpm -ivh 光盤掛載點/Packages/kernel-VERSION.rpm --force --nodeps 安裝內核文件包
  4. grub-install /dev/sda修復1階段和1.5,部分2階段
  5. 進入grub文件夾,修改grub.conf文件
    • 小技巧同上,不過這裏要寫上面安裝或者複製後的內核和虛擬文件系統的文件名(若是上面沒寫版本,則這裏也無需再寫,)
    • root=UUID=XXX 也可這樣寫,注意UUID後面的不加引號,用blkid命令讀入UUID
  6. reboot便可

10.內核img文件錯誤或者丟失

錯誤顯示:

unable to mount root fs on unkonwn- block(0,0)

解決思路:

從新生成img文件或者從備份中(徹底同樣的安裝機器中相同的img文件或者說以前對/boot文件夾有過備份)恢復它

解決步驟

  1. 進入光盤救援模式
  2. 切換根目錄到原系統根目錄下chroot /mnt/sysimage (須要提早用lsblk查看在哪)
  3. 利用mkinitrd /boot/initramfs-$(uname -r).img $(uname-r) 命令從新生成initramfs文件;若是原img文件存在可是錯誤須要再加上--force。,若是丟失則不須要加上它。
    • 或反向單引號也行mkinitrd /boot/initramfs-`uname -r`.img `uname-r` :注意第二個參數是內核版本號
  4. 此時修復完畢重啓便可

錯誤提示狀態Centos6:

image

錯誤提示狀態Centos7:

image

11.內核執行文件錯誤或者丟失

錯誤顯示:

file kernel-Version not found

image

解決思路:

從光盤中或者相同版本機器中拷貝一份到原目錄下便可(注意光盤中拷貝時須要更更名稱,由於它不含有版本信息)

解決步驟:

  1. 進入光盤救援模式
  2. 找到光盤掛載的位置(/dev/sr0)和本來根掛載的位置
  3. cp 光盤掛載位置/isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz-`uname -r`
  4. 重啓

12.開機啓動狀態故障(inittab中設置錯誤不斷重啓或者關閉)

錯誤顯示:

要麼不斷重啓(6) ,要麼開機就關機(0)

解決思路:

將/etc/inittab文件改正確(能夠不用光盤救援模式,由於這個問題很簡單)

解決步驟

Centos6:

  1. 開機運行至圖標畫面按esc按鍵,進入選擇欄
  2. 而後按a按鍵,輸入這次開機臨時進入的模式(就是/etc/inittab下的6種模式),這裏選擇1或者2,3均可以
  3. 進入以後修改文件正確便可
    Centos7:
  4. 開機進入選擇欄畫面
  5. 按e按鍵進入grub.cfg的編輯界面
  6. 在linux16後面添加systemd.unit=multi-user.target,而後按ctrl+x按鍵 便可讓這一次啓動進入
  7. 進入系統以後仍要修改默認啓動模式爲正確的,用systemctl set-default graphical.target。

13.開機啓動服務(service,在/etc/init.d中的)加載故障卡住

錯誤顯示:

starting 服務名 (就卡在這種狀態下,這一行前面可能有許多staring 服務名 [OK])

解決思路:

跳過此服務啓動,本次啓動不啓動此服務。等進入系統以後查找此服務錯誤緣由,修正後再開機啓動它

解決方法:

  1. 卡主以後重啓電腦(可按ctrl+alt+delete,若是這個被禁用了則想其餘方法),而後進入開機啓動畫面按esc按鍵
  2. 進入以後按a,而後輸入1,單用戶啓動。(利用單用戶啓動基本上不會啓動任何守護進程的特性來跳過卡住的服務的啓動過程)
  3. 利用chkconfig --list 服務名 命令來查看卡住的服務的錯誤緣由並修復。若是短期內沒法修復,則先利用chkconfig 服務名 off 命令先關掉此服務開機啓動,而後正常啓動計算機
  4. 正常啓動後再慢慢尋找緣由修復服務,先保證計算機能啓動而且提供其餘的正常業務進行。

14.終極破壞(分區和LVM邏輯卷混用環境下):fstab丟失;(MBR 512字節破壞,主要是分區表破壞);boot目錄丟失

錯誤顯示:

如若先不考慮512字節損壞問題,則開機後找不到grubstage2,有可能直接進入gurb命令行模式(grub >) ,或者顯示error 15錯誤
如若考慮512字節錯誤,則直接沒法引導,同上。

解決思路和步驟分析:

先不考慮512字節(主要是分區表),它就按照備份恢復的方法來恢復便可。注意分區恢復必定是在任何操做以前的操做,包括下面的操做以前要先恢復備份的分區表。

  1. 後面的解決方案在前面已經提到過,主要是fstab的問題。由於找不到掛載關係,沒法掛載各個分區以及各個邏輯卷,就算進入光盤模式也沒法修復。所以主要就是想辦法修復fstab
  2. 在這裏進入光盤模式後主要用fdisk -l ; df ;blkid;lvs;vgs;pvs等等命令查看邏輯卷以及分區信息。所以工做中的邏輯卷在最開始建立的時候就必定要寫清楚卷名或者label(好比lv_boot、lv_root、lv_swap、lv_data、lv_home等等,沒寫好的話工做中最好用lvrename更名),這樣才能想辦法恢復fstab,否則就就算是神也救不了,不知道邏輯捲到底對應的掛載關係是什麼.
    • 這裏測試用的查看到信息爲的boot分區直接就是本地硬盤第一個分區/dev/sda1 ,而/dev/sda2是物理卷,這個卷組分出了三個邏輯卷分別爲home,root和swap
  3. 查看信息知道邏輯卷對應的掛載關係是什麼以後,邏輯卷仍然沒法使用,由於沒有啓動rc.sysinit腳本,邏輯卷默認不會激活,會顯示NOT available狀態(可在lvdisplay中看到)。所以要先激活它們,能夠用vgchange -ay來激活LVs

image

4.激活以後就可掛載了,此時建立一個臨時文件夾,把lv_root卷掛載到此文件夾上,而後進入etc,手動書寫fstab.例如

  • 小技巧2:能夠用ls 文件 >> fstab的方式追加劇定向文件名到文件中,上面的書寫grub也可這樣用(由於沒有VIM命令,vi老是出問題)
  • 注意掛載的時候要提早查並獲知文件格式等。
  • 注意掛載的時候可能提示要指定文件系統,這樣的話可用mount -t type.(分區表恢復後重啓能夠解決這個問題,此時不能跳過檢測硬盤,直接continue,才能繼續下一步切換根並grub-install)
  • 切換根以後能夠用vim命令,注意別把fstab裝到光盤啓動盤中去了
/dev/sda1             /boot    ext4     defaults 0 0
/dev/VolGroup/lv_root /        ext4     defaults 0 0
/dev/VolGroup/lv_home /home    ext4     defaults 0 0
/dev/VolGroup/lv_swap swap     swap     defaults 0 0
  1. fstab寫好以後,從新進入救援模式讓它生效並掛載好各個分區信息。而後此時即可以按照前面的解決方案修復grub以及boot文件夾了。
    • 注意書寫grub.conf的時候 root=/dev/VolGroup/lv_root ,不是sda2了

15.centos7中的boot文件夾直接刪除

錯誤提示:

直接進入了grub rescue> 命令行,說明進入了grubstage2階段

解決思路:

相似6中的boot被刪除的修復操做便可,就是命令和細節稍有變化

解決步驟:

  1. 進入光盤救援模式
  2. 切根,掛載光盤
  3. 利用rpm -ivh Package/kernel-VERSION --nodeps --force的方式拷貝出來vmlinuz-VERSION和initramfs_VERSION.img文件(固然也可光盤直接拷貝),注意安裝的時候須要時間等待。
  4. 而後grub2-install /dev/sda 安裝,固然也缺乏gurb.cfg文件
  5. 而後利用grub2-mkconfig -o /boot/grub2/grub.cfg 生成它
  6. sync ,reboot便可
grub2中的:
--boot-directory=DIR   install GRUB images under the directory DIR/grub2
                             instead of the boot/grub2 directory

A.注意點:

  1. 沒有lsblk命令,可用blkid ,fdisk -l ,df 命令代替( 本身弄一個U盤linux盤來修復也行,題外話了)
  2. 邏輯卷的各類命令來查看邏輯卷信息,lvs lvdisplay vgs vgdisplay pvs pvdisplay
  3. 使用lvrename命令更改邏輯卷名
    lvrename /dev/VolGroup00/LogVol00 /dev/VolGroup00/lv_root
    lvrename /dev/VolGroup00/LogVol01 /dev/VolGroup00/lv_swap

B.由此可看出重要的,須要備份的文件

  1. MBR分區表512字節
  2. /boot整個文件夾(img,vmlinuz,grub文件夾中grub.conf)
  3. /etc整個文件夾(/etc/fstab /etc/inittab等不少配置文件)
相關文章
相關標籤/搜索