第二章 系統啟動故障排除
1、grub配置文件寫錯,無法進入系統
步驟:(修復完成后記得修改配置文件為正確的文件)
方法一:進入啟動菜單項后,修改菜單項為正確的內容,然后啟動
方法二:進入啟動菜單后,進入grub交互式界面,手動引導啟動
2、grub的stage1故障修復
步驟:
<1>破壞grub的stage1,如果未重啟,則直接利用grub-install命令進行修復,如果重啟,則繼續
<2>重啟后發現無法進入系統,此時可以利用光盤進入緊急救援模式,然后進行grub-install安裝修復
3、grub的stage1.5故障修復
步驟:
<1>破壞grub的1.5階段,重啟系統(如果沒重啟,可直接用grub-install進行安裝)
<2>進入緊急救援模式(進入救援模式的步驟省略),進行grub-install安裝修復grub
4、grub的stage2故障修復(刪除/boot/grub目錄和內核文件,ramdisk文件)
步驟:
<1>刪除/boot/grub目錄和內核文件vmlinuz,ramdisk文件initramfs,然后重啟
(如果沒重啟,可以直接拷貝系統光盤上的vmlinuz文件,然后運行mkinitrd命令生成initramfs文件,然后運行grub-install命令生成修復grub文件,最后編輯grub配置文件即可)
<2>進入緊急救援模式(進入過程省略)進行修復
5、破壞grub的stage1、stage1.5、刪除boot目錄的故障恢復
步驟:
<1>破壞stage1、stage1.5,刪除boot目錄,然后重啟
如果沒重啟,rpm安裝kernel包(注意加上–replacepkgs或–force選項,因為kernel安裝的文件不僅僅有boot目錄下的相關文件,如果不用選項,會報錯),然后grub-install安裝修復grub,然后編輯生成一個grub.conf配置文件即可
<2>進入緊急救援模式(進入緊急救援模式的過程省略),修復
6、破壞grub的stage1、stage1.5、刪除boot目錄,刪除/etc/fstab文件的故障恢復
步驟:
<1>破壞grub的stage1、stage1.5、刪除boot目錄,刪除/etc/fstab文件,重啟系統
如果破壞后,尚未重啟系統,只需重新編輯/etc/fstab文件,然后與上個實驗一樣,安裝kernel包(注意加–replacepkgs或–force選項),grub-install安裝grub,然后提供grub的配置文件即可
<2>進入緊急救援模式,進行修復
7、當系統安裝在lvm邏輯卷上時, 破壞grub的stage1、stage1.5、刪除boot目錄,刪除/etc/fstab文件的故障恢復
步驟:
<1>破壞stage1、stage1.5,刪除boot目錄、刪除/etc/fstab文件,并重啟
<2>進入緊急救援模式修復
8、系統上init文件、inittab文件破壞后的恢復方案
步驟: 思路為查詢文件是由哪個程序生成,然后在救援模式下進行安裝對應的包,進行修復
第三章 自建Linux系統
實驗環境:
CentOS6.8的64位系統
思路為:在現有虛擬機上添加一個新磁盤,然后對磁盤做出相關操作,然后新建一個虛擬機,新建的虛擬機利用該塊磁盤完成系統啟動
步驟:
1、在原有虛擬機上添加一塊磁盤
2、對添加的磁盤進行分區,格式化
3、掛載新建的磁盤分區
4、拷貝內核文件、ramdisk文件到新磁盤的boot目錄,為新磁盤創建grub,提供grub配置文件
5、為新磁盤的根添加相關的目錄結構,并拷貝相關程序及程序依賴的庫文件到新磁盤上
卸載磁盤,否則磁盤無法引用
6、新建虛擬機,并將虛擬機的磁盤指向到我們做好的磁盤
7、啟動虛擬機,驗證功能
8、復制命令用到的腳本為:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
[root@localhost ~] # cat scripts/course/copycmd.sh #!/bin/bash # Autor: nwc # Version: 2.0 # CreateTime: function CMDCP() { DIR=` dirname $CmdPath` if [ -d ${LuJing}${DIR} ] ; then cp $CmdPath ${LuJing}${DIR} && echo "cp $CMD success" || echo "cp $CMD fail" else mkdir -p ${LuJing}${DIR} cp $CmdPath ${LuJing}${DIR} && echo "cp $CMD success" || echo "cp $CMD fail" fi } function CMDLIBCP() { for i in ${LibCmd} ; do LIBDIR=` dirname $i` if [ -d ${LuJing}${LIBDIR} ]; then cp $i ${LuJing}${LIBDIR} && echo "cp $i success" || echo "cp $i fail" else mkdir -p ${LuJing}${LIBDIR} cp $i ${LuJing}${LIBDIR} && echo "cp $i success" || echo "cp $i fail" fi done } while true ; do read -p "Input a exec program name like ls/cat... q for quit " CMD case $CMD in q) echo "exit..." exit ;; *) if which --skip- alias $CMD &> /dev/null && [[ $CMD != "q" ]]; then CmdPath=` which --skip- alias $CMD` LibCmd=`ldd $CmdPath| grep -o -E "/[^[:space:]]+" ` LuJing= /mnt/sys CMDCP CMDLIBCP else echo "you input is not a right command" continue fi ;; esac done |
轉載請注明:linux
原創文章,作者:wencx,如若轉載,請注明出處:http://www.www58058.com/46247