linux&&系统故障排查
日志文件分析
主要日志文件
日志文件分析
系统启动类故障排除
Linux的系统启动过程是怎样的?
开机自检(BIOS)
加电后,主板上的BIOS芯片对基本硬件(cpu、内存、显卡)等进行检查,最后“滴”一声,进入下一步硬盘引导。
MBR引导
寻找硬盘引导记录,硬盘上面存放着系统。即加载MBR引导信息,加载MBR中的GRUB引导程序。
硬盘:有许多磁道,最外层的被称为0磁道。0磁道上有一个扇区,该扇区只有512字节的容量。该扇区被称为第一扇区,第一扇区包含引导程序(引导程序在window和Linux上各不相同,我们最常用的是grub引导程序,该引导程序在第一扇区占据446字节空间)、分区表(记录磁盘的分区信息主分区、扩展分区、逻辑分区,该分区表在第一扇区占据64字节空间)、结束标志(2字节)。第一扇区主要用于系统引导和分区识别功能。第一扇区就是MBR(主引导记录)
GRUB菜单
GRUB根据配置文件grub.conf加载内核程序
加载内核程序
内核程序开始加载系统中的第一个进程init
MBR扇区故障
MBR故障有什么现象?判断依据。
MBR如果损坏且未留有备份,该系统可能无法修复!!!因为分区表丢失会导致无法识别分区。
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
MBR故障修复步骤
提前准备好备份文件
dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1
模拟损坏MBR扇区故障
dd if=/dev/zero of=/dev/sda bs=512 count=1
以RHEL6安装光盘引导进入急救模式
#进入shell模式后,使用fdisk命令检查当前的磁盘信息
fdisk -l
#挂载存放MBR备份数据的磁盘
mkdir /dir1
mount /dev/sdb1 /dir1
#将挂载目录下的MBR备份数据恢复到boot分区下
dd if=/dir1/sda.mbr.bak of=/dev/sda bs=512 count=1
#退出shell模式
exit
利用备份文件进行恢复
重新启动即可
dd : 复制命令,依据扇区进行复制
if : 输入文件
of : 输出文件
bs : 块大小
count : 此处数量为1块
bs * count = 512 = MBR的容量
GRUB引导故障
GRUB配置文件grub.conf有什么用?
#使用“fdisk -l”命令查看硬盘信息,其中带*号的一行是boot引导分区,内部存放着内核文件。
fdisk -l
#使用mount命令,根据以上的设备信息查询引导分区的挂载目录位置。一般是/boot目录
mount
-rw-r--r-- 1 root root 1240067 Jul 13 2016 abi-4.4.0-31-generic
-rw-r--r-- 1 root root 1243479 Dec 2 2016 abi-4.4.0-53-generic
-rw-r--r-- 1 root root 189566 Jul 13 2016 config-4.4.0-31-generic
-rw-r--r-- 1 root root 189885 Dec 2 2016 config-4.4.0-53-generic
drwxr-xr-x 5 root root 4096 Dec 14 2016 grub
-rw-r--r-- 1 root root 21230206 Dec 14 2016 initrd.img-4.4.0-31-generic
-rw-r--r-- 1 root root 21675809 Dec 14 2016 initrd.img-4.4.0-53-generic
-rw------- 1 root root 3879360 Jul 13 2016 System.map-4.4.0-31-generic
-rw------- 1 root root 3887632 Dec 2 2016 System.map-4.4.0-53-generic
-rw------- 1 root root 6937248 Jul 13 2016 vmlinuz-4.4.0-31-generic
-rw------- 1 root root 6963344 Dec 2 2016 vmlinuz-4.4.0-53-generic
##vmlinuz-4.4.0-31-generic : 内核文件
##initrd.img-4.4.0-31-generic : 内核的映像文件或扩展文件
#查看grub目录,其中grub.cfg是引导程序的配置文件
root@bjphp2:/boot# ls -al grub/
total 44
drwxr-xr-x 5 root root 4096 Dec 14 2016 .
drwxr-xr-x 3 root root 4096 Dec 14 2016 ..
drwxr-xr-x 2 root root 4096 Dec 14 2016 fonts
-rw-r--r-- 1 root root 699 Dec 14 2016 gfxblacklist.txt
-r--r--r-- 1 root root 7383 Dec 14 2016 grub.cfg
-rw-r--r-- 1 root root 1024 Jul 30 2018 grubenv
drwxr-xr-x 2 root root 12288 Dec 14 2016 i386-pc
drwxr-xr-x 2 root root 4096 Dec 14 2016 locale
#之后grub根据配置文件加载内核,内核启动系统第一个进程
Linux系统启动时,光标一直闪,无法完成启动怎么办?
具体描述
新电脑安装linux系统后,在不拔出U盘的状态下可以进入grub目录,通过输入exit命令可以进入正常的linux命令行界面;若拔出U盘,服务器重启后左上角会有光标闪烁且一直无法进入命令行界面。
解决方法
sudo grub-install /dev/sda
sudo update-grub
原因
大概率是因为你在使用U盘安装系统时,在设置grub目录时,设置到了/dev/sda目录(U盘目录)。
GRUB故障修复步骤
模拟损坏grub故障
dd if=/dev/zero of=/dev/sda bs=446 count=1
bs=446 : grub仅占MBR扇区的前446个字节,因此此处仅破坏前446个字节即可
grub故障不需要备份数据也可恢复
grub损坏故障现象与MBR损坏故障现象相同或类似。
以RHEL6安装光盘引导进入急救模式
#进入shell模式后,使用ls命令可以看到光盘目录中的内容
ls
#此时,使用命令"ls /mnt/sysimage"可以看到系统目录中的内容
ls /mnt/sysimage/
#使用chroot命令创建虚根,用户仅能看到虚根及虚根以内的数据。其实虚根前面存在光盘目录/mnt/sysimage。
chroot /mnt/sysimage/
#安装grub引导程序到硬盘起始位置
grub-install /dev/sda
#退出shell模式,重新启动系统即可
exit
grub.conf文件丢失修复步骤
模拟grub.conf文件丢失
#备份grub.conf文件
mv /boot/grub/grub.conf /tmp
现象
方法一:手动输入引导命令,实现系统启动
执行root命令及之后的命令即可
方法二:插入RHEL6安装光盘
在BIOS中设置光盘引导,在系统启动时启动RHEL6安装光盘
进入系统急救模式
同GRUB故障修复步骤一样,进入shell模式
#进入shell模式,设置虚根
chroot /mnt/sysimage
#将grub.conf备份文件恢复到/boot/grub目录下
cp /tmp/grub.conf /boot/grub/
#退出shell模式,进入BIOS更改为硬盘引导,重新启动系统即可
exit
如果grub.conf文件丢失,可以从相同系统版本的服务器上拷贝一份拿来使用
/etc/inittab文件丢失
遗忘root用户的密码
故障现象
- 无法进行需要root权限的管理操作
- 若没有其他可用账号,将无法登陆系统
遗忘root用户的密码修复步骤
方法一:引导进入单用户模式,重设密码
启动系统,如下图所示为grub配置文件加载内核的选项。按“e”进入下一步
如下图所示,将看到grub配置文件中的三个选项
root : 内核的位置
kernel : 内核文件是谁
initrd : 内核的映像文件
选择第二个,并按“e”键进入下一步。
如上图所示,在命令行输入以下内容
quiet 1
1 : 1代表加载init进程时以何种方式加载,1指的是单用户模式。
1 或 s 或 single 均可
单用户模式:单用户模式在加载init进程时,不需要输入用户口令即可登录。
最后敲击回车键返回上级的三个选项页面,然后按“b”键进入下一步启动
如下图所示,进入单用户模式
最后,使用命令passwd设置root口令即可.
重启服务器后,新用户口令生效。
方法二:进入急救模式,重设密码
更改BIOS,设置光盘引导,放置RHEL6安装启动光盘。
进入shell模式,切换虚根
chroot /mnt/sysimage/
#设置root用户新口令
passwd
#退出shell模式,重启系统即可
exit
如何防止root密码被恶意修改?如何防止单用户模式下修改root密码?
基本原理
给grub菜单加上限制,设置第二密码。
单用户模式下,遗忘root密码设置root新密码是通过修改grub配置文件实现的!
操作步骤
#修改grub配置文件,在hiddenmenu下一行设置口令
vim /boot/grub/grub.conf
hiddenmenu
password 123456
保存退出,重新启动系统检测。
default=0 : 一个系统中可能同时存在两个内核。0代表着以第一个内核开始启动。
splashimage=(hd0,0)/grub/splash.xpm.gz : 图片文件。
hiddenmenu : 等待延迟timeout五秒后,隐藏菜单。
了解init进程
init进程有几种运行状态?
init进程是系统启动的第一个进程
init进程有以下七种运行状态
0 : 关闭init进程,因为init进程是系统中的第一个进程,所以关闭init进程等同于关闭系统
1 : 单用户模式,字符界面。
2 : multiuser,withhout NFS。多用户模式,不含网络系统,字符界面。
3 : full multiuser mode。完全多用户模式,字符界面。
4 : unused。保留未用。
5 : x11。完全多用户模式,图形界面。
6: : 重新启动init进程,因为init进程是系统中的第一个进程,所以重新启动init进程等同于重启系统。
通常设置init进程的运行级别为3。
Linux如何设置服务器开机运行字符界面?
设置init进程的运行级别为3即可。
如何查看init进程的配置文件?
vim /etc/inittab
该文件控制着系统运行时的默认运行级别。用于设定init进程默认的运行级别。
运行级别一般为3或5
Linux如何在字符界面下临时开启图形界面?
使用startx命令即可
startx
图形界面同一时刻只存在一个。
Linux如何设置系统启动时系统服务的运行状态?
Linux中可以对哪些系统服务设置运行状态?
执行“chkconfig --list”命令,查看系统服务运行状态的设置。
如何查询单个服务的运行状态设置?
chkconfig --list httpd
#设置目标服务开机自启动
chkconfig httpd on
#此时目标服务默认在init程序以2345运行级别运行时启动。
chkconfig --list httpd
#指定当init程序以3,5运行级别运行时启动目标服务
chkconfig --level 35 httpd on
#检查
chkconfig --list httpd
chkconfig设置单个服务开机启动或停止比较方便
ntsysv设置多个服务开机启动或停止比较方便
如何实现批量系统服务运行状态设置?
执行ntsysv命令
以上设置完成后,保存退出即可生效。
可以使用命令“ntsysv 35”,对init程序运行状态3,5级别时系统服务的运行状态进行设置。
Linux中的系统服务有哪些?都是用来做什么的?
以上的设置,在init的运行级别为2,3,5时生效。
文件系统类故障排除
修复文件系统
故障原因
- 非正常关机,突然断电,设备读写失误等
- 文件系统的超级块(super-block)信息被破坏
超级块(super-block): 位于分区的起始位置(目录区),记录分区内部文件在数据区的存放位置。
故障现象
- 无法向分区中读取或写入数据
- 启动后提示“Give root password for maintenance”
解决思路
- 根据提示输入root口令,进入修复模式
- 使用fsck命令进行修复
故障排除步骤及修复步骤
文件系统损坏有以下几种类型:
非根分区文件系统损坏
#模拟对/dev/sdb1分区的破坏操作
dd if=/dev/zero of=/dev/sdb1 bs=512 count=4
#检查是否能挂载该分区
mount /dev/sdb1 /mnt
mount: you must specify the filesystem type
#对该分区进行修复
fsck -y -t ext4 /dev/sdb1
#再次挂载该分区
超级块在分区的起始位置,容量大小不确定。
根分区(普通分区)文件系统损坏
#模拟对/dev/sda3分区的破坏操作
dd if=/dev/zero of=/dev/sda3 bs=512 count=4
#此时,由于根分区损坏,全部命令均无法正常使用
ls
bash:/bin/ls:输入/输出错误
重启系统,无法发现init程序,无法正常启动系统,如下所示。
更改BIOS设置,设置光盘启动,放置启动光盘,进入救援模式。
进入shell模式
#对该分区进行修复
fsck -y -t ext4 /dev/sda3
fsck -y /dev/sda3
最后恢复硬盘启动即可
根分区(LVM分区)文件系统损坏
模拟破坏LVM的根分区
更改BIOS设置,设置光盘启动,放置启动光盘,进入救援模式。
进入shell模式
#查找卷组
lvm vgscan
#激活卷组
lvm vgchange -ay /dev/VolGroup(卷组名)
#查看逻辑卷
lvm lvscan
#
fsck -y /dev/VolGroup/LogVol01(根分区对应的逻辑卷名)
修复完成后、恢复硬盘启动、重新启动即可。
磁盘资源耗尽故障
故障原因
磁盘空间已被大量的数据占满,空间耗尽(数据区满)
虽然还有可用空间,但文件数i节点耗尽(目录区满)
故障现象
无法写入新的文件,提示“…:设备上没有空间”
部分程序无法运行,甚至系统无法启动
解决思路
清理磁盘空间,删除无用,冗杂的文件
转移或删除占用大量i节点的琐碎文件
进入单用户模式、急救模式进行修复
为用户配置磁盘限额
Linux中磁盘空间被耗尽该如何修复?
Linux中磁盘索引节点被耗尽该如何修复?
模拟磁盘索引节点耗尽
#查看新增测试磁盘
fdisk -l
#对新增磁盘分区.n-1-2
fdisk /dev/sdb
#格式化新增磁盘
mkfs -t ext4 /dev/sdb1
#挂载测试磁盘到服务器。
mount /dev/sdb1 /data
df -hT
df -i
#模拟创建大量空文件
#脚本实现即可
解决方法
使用find命令查找空文件,删除无效的空文件即可.慎用。
rm -rf `find /data -size 0k`
Linux中如何查看磁盘索引节点的使用情况?
df -i /data
检测磁盘坏道
故障原因
磁盘设备中存在坏道(逻辑的或物理的)
故障现象
- 读取磁盘中的数据时,磁盘设备发出异常声响(真坏)
- 访问磁盘中的某个文件时,反复读取且出错,提示文件损坏
- 对于新建立的分区无法完成格式化
- 系统使用该磁盘时频繁死机
解决思路
- 检测硬盘中是否存在坏道
- 修复硬盘或更换新的硬盘
磁盘坏道修复步骤
#执行磁盘坏块检查命令
badblocks -sv /dev/sdb
-s : 扫描并修复
-v : 显示过程
Linux中最常见的公共日志文件是哪个?
/var/log/messages
67:00