理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

前言:

学习引导过程,排除启动类故障,服务控制及切换运行级别,优化启动过程;重点了解修复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 单元类型

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

单元类型 关键信息
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)

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

五 : 修复MBR扇区故障

5.1 故障原因

  • 病毒、***等造成的破坏
  • 不正确的分区操作、磁盘读写误操作

5.2 故障现象

  • 找不到引导程序,启动中断
  • 无法加载操作系统,开机后黑屏

5.3 解决思路

  • 未雨绸缪,养成习惯,提前做好备份文件
  • 以安装光盘的形式去引导进入急救模式
  • 从备份文件中恢复

5.4 实验:模拟MBR扇区故障,然后去进行修复

思路:

修复MBR(另一种是GPT)扇区故障

一个扇区512字节

MBR中存有文件元信息(属性,位置)还有系统的引导文件;文件数据信息(具体内容)存放在磁盘的别的位置

步骤:

1:先备份MBR扇区数据

1)加一块硬盘做备份sdb,分区,格式化,挂载

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

[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  '重启'

然后出现了报错

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

3:加载系统镜像文件中的急救模式

1)先把镜像放进去

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

2)在读条的时候按esc进入boot

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

选第三个troubleshooting

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

选择Rescue a CentOS system

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

3)加载,加载完毕

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

选第一个continue,连接

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

然后就可以回车键入命令

4:把备份数据做恢复处理

1)此时进入的系统是镜像文件中的系统,并不是电脑中的系统,这里重新创建挂载点,把含有备份文件的磁盘挂载上去,依旧运用dd命令去将备份数据覆盖上去

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

然后reboot进行重启

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

成功

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)
小结:

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的界面

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

进入急救模式,依旧是依靠镜像文件,把镜像文件挂载好,esc进入(在读取系统时就要去按,眼疾手快)

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

选择第三个CD-ROM Drive

跟MBR一样,先进入troubleshooting,后进入Rescue a centos system,选择1)continue

里面让用户run the command(运行这个命令):chroot /mnt/sysimage去进入镜像文件中的系统

输入chroot /mnt/sysimage 命令就会从sh切换到bash

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

重新构建grub2

grub2-install /dev/sda 给sda系统盘安装grub2

grub2-mkconfig -o /boot/grub2/grub.cfg 紧跟的这个指令指创建配置文件,指定位置是/boot/grub2/grub/cfg(也就是最开始删掉cfg的目录)

exit 保存

保存完成,reboot重启

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

解决问题

小结:

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保存

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

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 系统服务管理工具

理论:引导过程与服务控制 (解决忘记root问题、解决不能正常开机的问题)

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 名称  '系统中的服务中添加一个工具(名称)'

猜你喜欢

转载自blog.51cto.com/14558445/2450197
今日推荐