前言:
学习引导过程,排除启动类故障,服务控制及切换运行级别,优化启动过程;重点了解修复MBR扇区,gurb菜单,root密码重置,优化开机启动
一: 引导过程总览
序号 | 步骤 | 解释 |
---|---|---|
1 | 开机自检(BIOS) | 1.加电自检(服务器例外,当服务器通电时,风扇会先转一圈),自检硬件设备是否完好无损 2.加载驱动 |
2 | MBR引导 | 去找系统盘内的MBR去启用 |
3 | GRUB菜单 | 选择系统去启用(系统例如双系统、急救系统等) |
4 | 加载内核(kernel) | 内核就是系统的核心部分,即加载内核去运行系统 |
5 | init进程 初始化 | PID=1,初始化包含把之前的缓存数据全部清空、恢复默认,然后再次加载其他的程序 |
启动类型(优先级从<到n):自动,自动(延迟启动,即开机后自启动),手动,禁用
二 : init 进程
2.1 init 进程
- 由Linux内核加载运行 /sbin/init 程序
- 是系统中第一个进程
- PID(进程标记)号永远为1
/sbin/init 中的sbin是一个软连接,并不是一个目录
[root@localhost /]# ls -al '查看sbin和bin'
总用量 32
dr-xr-xr-x. 18 root root 249 11月 12 19:02 .
dr-xr-xr-x. 18 root root 249 11月 12 19:02 ..
drwxr-xr-x. 2 root root 6 11月 5 12:17 abc
lrwxrwxrwx. 1 root root 7 10月 23 13:35 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 10月 23 13:41 boot
drwxr-xr-x. 20 root root 3300 11月 13 10:00 dev
drwxr-xr-x. 138 root root 8192 11月 13 13:36 etc
drwxr-xr-x. 5 root root 45 11月 13 08:53 home
lrwxrwxrwx. 1 root root 7 10月 23 13:35 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 10月 23 13:35 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 11月 5 2016 media
drwxr-xr-x. 2 root root 6 11月 5 2016 mnt
drwxr-xr-x. 8 root root 150 11月 12 17:33 opt
dr-xr-xr-x. 203 root root 0 11月 13 10:00 proc
-rw-r--r--. 1 root root 4 11月 13 14:06 ps.txt
dr-xr-x---. 14 root root 4096 11月 13 10:01 root
drwxr-xr-x. 42 root root 1260 11月 13 13:36 run
'lrwxrwxrwx. 1 root root 8 10月 23 13:35 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 11月 5 2016 srv
dr-xr-xr-x. 13 root root 0 11月 13 10:00 sys
drwxrwxrwt. 27 root root 4096 11月 13 14:04 tmp
drwxr-xr-x. 13 root root 155 10月 23 13:35 usr
drwxr-xr-x. 22 root root 4096 11月 5 23:09 var
三 : Systemd 单元类型
单元类型 | 关键信息 |
---|---|
Service | 文件所在位置: /lib/systemd/system/*./service |
Socket | 套接字,即通信协议的一个载体、介质,开发者去写的,比如在myscl安装时需要用到 |
Device | 设备文件 块设备(负责存储)和字符设备(负责输入输出) |
Mount | 挂载点 |
Automount | 自动挂载 |
Swap | 交换空间,必要组件 |
Path | 路径(PATH是变量,使用时用echo $PATH) |
Timer | 定时器,比如cron设置周期性计划需要调取定时器 |
Snapshot | 保存状态,即快照功能 |
Scope | 外部进程 |
Slice | 管理进程 |
Target | 目标服务 |
四 :运行init 级别所对应的Systemd目标 (centos 7)
五 : 修复MBR扇区故障
5.1 故障原因
- 病毒、***等造成的破坏
- 不正确的分区操作、磁盘读写误操作
5.2 故障现象
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
5.3 解决思路
- 未雨绸缪,养成习惯,提前做好备份文件
- 以安装光盘的形式去引导进入急救模式
- 从备份文件中恢复
5.4 实验:模拟MBR扇区故障,然后去进行修复
思路:
修复MBR(另一种是GPT)扇区故障
一个扇区512字节
MBR中存有文件元信息(属性,位置)还有系统的引导文件;文件数据信息(具体内容)存放在磁盘的别的位置
步骤:
1:先备份MBR扇区数据
1)加一块硬盘做备份sdb,分区,格式化,挂载
[root@localhost ~]# init 6 '重启'
[root@localhost ~]# fdisk /dev/sdb '给sdb备份盘分区'
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x99e92b15 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x99e92b15
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# mkfs.xfs /dev/sdb1 '格式化'
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1310656 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242624, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mkdir /beifen '创建挂载点'
[root@localhost ~]# mount /dev/sdb1 /beifen '挂载'
[root@localhost ~]# cd /beifen
[root@localhost beifen]# ls
[root@localhost beifen]#
2)然后备份过去
[root@localhost beifen]# dd if=/dev/sda of=/beifen/MBR.sda.bak bs=512 count=1
'运用dd命令去把/dev/的sda磁盘的MBR备份,注意,不是sba1'
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000550469 秒,930 kB/秒
[root@localhost beifen]# ls '查看'
MBR.sda.bak
2:模拟故障
[root@localhost beifen]# dd if=/dev/zero of=/dev/sda bs=512 count=1
'依旧运用dd,去把MBR覆盖'
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000125984 秒,4.1 MB/秒
[root@localhost ~]# init 6 '重启'
然后出现了报错
3:加载系统镜像文件中的急救模式
1)先把镜像放进去
2)在读条的时候按esc进入boot
选第三个troubleshooting
选择Rescue a CentOS system
3)加载,加载完毕
选第一个continue,连接
然后就可以回车键入命令
4:把备份数据做恢复处理
1)此时进入的系统是镜像文件中的系统,并不是电脑中的系统,这里重新创建挂载点,把含有备份文件的磁盘挂载上去,依旧运用dd命令去将备份数据覆盖上去
然后reboot进行重启
成功
小结:
1:备份mbr扇区数据
1)加一块硬盘做备份sdb
分区--》格式化---》挂载/abc
2)dd if=/dev/sda of=/abc/sda.mbr.bak bs=512 count=1
2:模拟故障
dd if=/dev/zero of=/dev/sda bs=512 count=1
3:加载系统镜像文件中的急救模式
加载系统镜像文件中的内核界面
4:把备份数据做恢复处理
mkdir /aaa
mount /dev/sdb1 /aaa
dd if=/aaa/sda.mbr.bak of=/dev/sda bs=512 count=1
六 :修复GRUB引导故障
6.1 故障原因
- MBR中的GRUB引导程序遭到破坏
- grub,conf文件丢失、引导配置有误
6.2 故障现象
- 系统引导停滞,显示“grub>”提示符
6.3 解决思路
- 尝试手动输入引导命令(100多行,嫌麻烦的就别手输了,了解即可)
- 进入急救模式,重写或者从备份中恢复grub.conf(即加载镜像文件中的备份)
- 向MBR扇区中重建grub程序
6.4 实验:grub菜单故障恢复
思路:
1.使用系统急救模式进入命令字符界面
2.加载镜像中的的系统进入bash环境
3.重新构建grub菜单系统
4.重启
步骤
1.先查看下grub所在的文件位置
[root@localhost ~]# cd /boot '切换到/boot'
[root@localhost boot]# ls
config-3.10.0-693.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-33c124456fa34c50a98483245dfea58d.img
initramfs-3.10.0-693.el7.x86_64.img
initrd-plymouth.img
symvers-3.10.0-693.el7.x86_64.gz
System.map-3.10.0-693.el7.x86_64
vmlinuz-0-rescue-33c124456fa34c50a98483245dfea58d
vmlinuz-3.10.0-693.el7.x86_64
[root@localhost boot]# ls grub/
splash.xpm.gz
[root@localhost boot]# ls grub2/
device.map fonts grub.cfg('配置文件') grubenv i386-pc locale
[root@localhost boot]#
可以查看下grub.cfg文件
[root@localhost grub2]# vim grub.cfg
22
23 if [ x"${feature_menuentry_id}" = xy ]; then
24 menuentry_id_option="--id"
25 else
26 menuentry_id_option=""
27 fi
28
29 export menuentry_id_option
30
31 if [ "${prev_saved_entry}" ]; then
32 set saved_entry="${prev_saved_entry}"
33 save_env saved_entry
34 set prev_saved_entry=
35 save_env prev_saved_entry
36 set boot_once=true
37 fi
38
39 function savedefault {
40 if [ -z "${boot_once}" ]; then
41 saved_entry="${chosen}"
42 save_env saved_entry
43 fi
44 }
这个配置文件就是需要手动输入的,不忙的同学实在想尝试的话可以背下来手动输入
把grub.cfg配置文件删除,然后重启测试一波
[root@localhost grub2]# rm -rf grub.cfg
[root@localhost grub2]# ls
device.map fonts grubenv i386-pc locale
[root@localhost grub2]# init 6
2.没有进入系统,出现了手动输入grub的界面
进入急救模式,依旧是依靠镜像文件,把镜像文件挂载好,esc进入(在读取系统时就要去按,眼疾手快)
选择第三个CD-ROM Drive
跟MBR一样,先进入troubleshooting,后进入Rescue a centos system,选择1)continue
里面让用户run the command(运行这个命令):chroot /mnt/sysimage去进入镜像文件中的系统
输入chroot /mnt/sysimage 命令就会从sh切换到bash
重新构建grub2
grub2-install /dev/sda 给sda系统盘安装grub2
grub2-mkconfig -o /boot/grub2/grub.cfg 紧跟的这个指令指创建配置文件,指定位置是/boot/grub2/grub/cfg(也就是最开始删掉cfg的目录)
exit 保存
保存完成,reboot重启
解决问题
小结:
1:使用系统急救模式进入命令字符界面
2:加载镜像中的系统进入bash环境
chroot /mnt/sysimage
3:重新构建grub菜单系统
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
exit
reboot
七 : 遗忘root密码
7.1 故障原因
- 遗忘root用户的密码
7.2 故障现象
- 无法进行需要root权限的管理操作
- 若没有其他可用账号,将无法登陆系统
7.3 解决思路
- 进入急救模式,重设密码
7.4 实验
步骤:
1.加载镜像系统
esc 进镜像,依旧进入急救模式
2.直接改密码
选择1
chroot /mnt/sysimage/ 进入系统
直接输入passwd root 就可以修改密码
记得exit保存
reboot重启,测试密码
小结:
1:加载镜像系统
chroot /mnt/sysimage
2:直接改密码
passwd root
输入密码
八 : 系统服务控制
8.1 系统服务控制
- 常用方式
[root@localhost ~]# systemctl 控制类型 服务名称
- 控制类型
- start: 启动
- stop: 停止
- restart: 重新启动(会中断服务,相当于先stop,后start)
- reload: 重新加载(会重新加载配置文件,不会中断)
- status: 查看服务状态
- ......
九:Linux系统的运行级别
9.1 查看运行级别
- runlevel命令
- systemctl工具
9.2 临时切换运行级别
- init命令(命令参数是运行级别所对应的数字)
- systemctl工具(命令参数是具体的target)
[root@localhost ~]# runlevel '查看运行级别'
N 5 'N处的位置代表上一个运行的级别'
[root@localhost ~]# init 3
[root@localhost ~]# init 5
[root@localhost ~]# runlevel
3 5
一般都是在35界别进行相互切换
十 : 优化启动过程
10.1 系统服务管理工具
- ntsysv工具(伪图像化界面)
- 提供一个交互式、可视化窗口
- 可以在字符终端运行
- 便于集中管理多个服务
- systemctl 工具
- 不提供交互式、可视化窗口
- 管理单个服务效率更高
[root@localhost ~]# ntsysv
带星号的会开机自启动
空格可以添加去掉星号
tab键可以切换界面
[root@localhost ~]# rpm -q httpd
httpd-2.4.6-90.el7.centos.x86_64
[root@localhost ~]# netstat -ntap | grep 80 '查看80端口的网络状态'
tcp 0 0 192.168.139.152:59860 117.78.24.34:80 TIME_WAIT -
tcp 0 0 192.168.139.152:59862 117.78.24.34:80 TIME_WAIT -
[root@localhost ~]# systemctl start httpd '开启httpd'
[root@localhost ~]# netstat -ntap | grep 80
tcp6 0 0 :::80 :::* LISTEN 4863/httpd
设置自启动不会影响工具目前的运行状态
十一 : 系统服务的启动和控制
11.1 ntsysv 系统服务管理工具
11.2 查看系统服务的启动状态
[root@localhost ~]# systemctl is-enabled 服务名称
11.3 设置系统服务的启动状态
[root@localhost ~]# systemctl enable/disable 服务名称
systemctl enable httpd 可以设置自启动
systemctl is-enabled httpd 可以检测服务是否开启自启动
[root@localhost ~]# systemctl enable httpd '设为开机自启动'
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# systemctl is-enabled httpd '查看启动状态'
enabled
[root@localhost ~]# systemctl disable httpd '禁止自启动'
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
[root@localhost ~]# systemctl is-enabled httpd '再次查看'
disabled
[root@localhost ~]# chkconfig --add 名称 '系统中的服务中添加一个工具(名称)'