第二章 系统启动故障排除
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.178linux.com/46247