系统排错
系统组成:
【引导代码】 + 【内核+基础驱动】 + 【各种用户程序/系统程序】
安装系统的时候做了些什么?
分区、格式化
把内核和驱动安装在/boot分区
各种程序的rpm包安装后,文件存放在各种目录中
安装第一阶段引导代码到MBR中,第二阶段引导代码放在/boot/下
系统启动流程:
开机-->bois对硬件进行检查-->根据Bois设定选择一种引导的方式:一般是硬盘引导-->加载硬盘MBR中的前446字节的第一阶段的引导代码到内存中---> 产生19号中断---> 转而执行第一阶段引导代码--> 加载第二阶段引导代码 ----> 加载内核+基础驱动 ---> 执行第一个系统进程/sbin/init ---> 执行各种系统进程 ---->读取 /etc/inittab 获取启动级别 ---> 读取 /etc/init/下的子配置文件,根据子配置文件对系统进程各种初始化:
判断是否启动网络
设定主机名
判断是否开启selinux
udev生成/dev/目录下的设备文件
读取/etc/fstab,对分区进行挂载
--> 根据启动级别,去启动该级别对应的服务/etc/rc.d/rc?.d/
--> 登录界面:
图形
命令
启动之后:
登录系统 ---> 判断用户的合法性 (/etc/passwd 和 /etc/shadow)
命令终端模式登录成功 ---> 执行第一个程序/bin/bash(由/etc/passwd文件)--> 读取/etc/profile , /etc/profile.d/下所有脚本 , ~/.bash_profile , ~/.bashrc , /etc/bashrc
退出登录或关闭终端 ~/.bash_logout
图形界面:
图形界面是由/etc/X11/prefdm 首先提供登录界面 ,登录成功之后会启动各种图形界面程序 :
要求 /tmp/目录必须 1777
登录之后:
用户启动各种服务,运行各种程序
分析各种程序对应的日志或者 /var/log/messages
如何进入到救援模式
通过昨天网络引导进入救援模式
光盘引导
引导之后,在启动选项,给对应的内核添加参数 rescue
如果引导的方式不是光驱引导,那么都会提示:救援镜像去哪里获取
安装源中获取
http://10.1.1.29/cblr/links/rhel6u3-x86_64/
提示:救援模式如何使用,已经他试图寻找硬盘上Linux根分区,然后挂载
一般选择 Continue 挂载并且有读写权限
Read-Only 只读挂载
Skip 不会挂载: 一般是对分区上文件系统进行修复的时候,选择它
重大故障:
一、引导代码
第一阶段代码: 在MBR中前446字节
现象: 屏幕黑屏,左上角可能会出现少数字符,有些时候找不到引导程序
判断: 到底是整个MBR中512字节都损坏了还是仅仅MBR中的引导代码损坏
解决:
如果是仅仅引导代码损坏,那么可以进入到“救援模式”
如果是整个MBR损坏,包括主分区表,那么修复就比较麻烦:
如果之前有做MBR备份,那么直接在救援模式下,进行MBR的恢复
如果没有做MBR的备份,就只能通过第三方分区修复软件进行分区扫描1恢复。
进入救援模式:
如果成功被扫描并且挂载了硬盘上的Linux根分区到/mnt/sysimage
# chroot /mnt/sysimage
# grub-install --recheck /dev/sda <--- sda 是系统所在的硬盘,Bois默认的引导硬盘
命令执行完毕,看到 No error reported 就成功了
模拟故障:必须使用虚拟机来实验
dd if=/dev/zero of=/dev/sda bs=1 count=446
重启就能看到故障
第二阶段
原因: /boot/grub/stage2文件丢失了
修复方法同上。
引导程序的配置文件和相关引导驱动文件丢失
/boot/grub/下的文件丢失了。
修复方法:
如果不是grub.conf丢失,修复方法和上面一样: grub-install一下
grub.conf丢失。方法1:进入救援模式,手工编写一份
方法2: 直接在引导界面。通过命令引导系统
二、引导阶段内核镜像出错和或者丢失
进到救援模式下,从相同类型的其他服务器拷贝一份
三、fstab文件出错、丢失
现象:
有些时候系统还能启动,不过启动后,仅仅挂载/ ,而且有些时候还是只读挂载
修复:
能登录系统,就登录系统重新创建一个fstab(把必须的挂载一定要声明),然后重启系统
不能登录系统,就进入到临时的登录,修复fstab
# mount -o remount,rw /dev/sda2 《-- sda2是根分区
去修复文件
不能启动:就只能进入救援模式下修复,
由于fstab丢失,救援模式是发现不了硬盘上已经安装了的Linux根分区,需要自己去挂载,挂载的时候,一定要挂载 /mnt/sysimage 或者挂载自己新建的目录,不能直接挂载到/mnt
四、还有别的报错导致无法正常启动系统,但是已经到了/sbin/init在初始化阶段
正常情况,内核运行之后会执行 /sbin/init进程对系统进行初始化,但如果/sbin/init进程执行的时候遇到错误,无法正常启动启动
解决:
不一定要进到救援模式,告诉内核,不要指定/sbin/init,而是执行/bin/bash,出现命令行,可以通过命令去修复系统
在grub引导菜单中修改内核的参数, kernel xxxx init=/bin/bash