Lupinus

Re:从零开始的go学习生活(`・ω・´)

0%

[开机启动流程]

开机启动流程

CentOS 6 启动流程

  1. 内核引导

    • BIOS加电自检,检测主板上的硬件设备,根据BIOS设置启动系统
    • 读取/boot分区下,所有内核文件
  2. 运行init

    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
    sysV:CentOS5之前使用的pid为1的进程 
    Upstart:CentOS6使用的init进程
    Systemd:CentOS7

    #加载init,涉及到Linux系统中7个运行级别
    0:关机运行级别
    1:单用户运行级别(修改root密码)
    2:多用户运行级别,没有文件系统
    3:多用户运行级别,有文件系统(命令行模式)
    4:CentOS6和7 保留,未使用
    5:多用户,图形化运行级别
    6:重启运行级别(reboot)

    #查看Linux系统当前的运行级别
    [root@localhost ~]# runlevel
    N 3

    #运行init,会读取 /etc/inittab配置文件
    #读取配置文件中的默认运行级别
    #获取当前系统的运行级别
    #启动init进程
    [root@localhost ~]# systemctl get-default
    C6id:3:initdefault:
    C7multi-user.target
    [root@localhost ~]# systemctl set-default graphical.target
  3. 系统初始化

    1
    2
    3
    4
    5
    6
    7
    #根据运行级别中设置了开机自启动服务来启动对应服务 
    C6
    [root@localhost ~]# chkconfig --list

    C7
    [root@localhost ~]# systemctl list-unit-files
    [root@localhost ~]# ll /etc/systemd/system/multi-user.target.wants/
  4. 建立终端

  5. 用户登录系统

image-20220507193246943

CentOS 7启动流程

  1. BIOS(开机自检)
  • BIOS加电自检,检测主板上的硬件设备,根据BIOS设置启动系统

  • 读取/boot分区下,所有内核文件

  1. MBR ( Master Boot Record主引导记录)
  • 主引导记录放在linux引导硬盘的第一个扇区中,此信息通过BIOS预加载到ROM
  1. GRUB2 Bootloader(引导菜单)
  • 加载grub2菜单,选择要进入的系统
  • 可以选择多系统
  1. Kernel(内核引导)
  • 读取/boot目录下所有内核文件
  1. .Systemd (不再使用init,改成了systemd
1
2
3
4
5
6
7
runlevel0.target -> poweroff.target 
runlevel1.target -> rescue.target
runlevel2.target -> multi-user.target
runlevel3.target -> multi-user.target
runlevel4.target -> multi-user.target
runlevel5.target -> graphical.target
runlevel6.target -> reboot.target
  1. Runlevel-Target (运行级别)

CentOS7进入单用户模式

忘记root密码

  • 关机

    1
    2
    3
    4
    halt 
    poweroff
    shutdown -h now
    init 0
  • 开机

    image-20220507194704562

  • 进入gurb2菜单

    1
    2
    3
    4
    5
    6
    #修改内核参数
    selinux
    vim /etc/sysconfig/selinux selinux=enforcing ==> selinux=disabled

    在linux16行末,写入:enforcing=0 init=/bin/bash
    按Ctrl + x

    image-20220507195445025

  • 修改密码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    无法直接修改密码,因为当前/目录是只读状态

    #重新挂载/目录
    mount -o rw,remount /

    #修改密码
    passwd root
    echo 111 | passwd --stdin root

    #重新加载init
    exec /sbin/init

    image-20220507200132878

修改默认运行级别

  • 关机

  • 进入grub2菜单

  • e编辑grub2菜单的内核参数

image-20220507205723245

1
2
3
Linux16行中 ro改成rw 
行末写:rd.break
修改后,按Ctrl + x
  • 修改运行级别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#1.重新挂载root权限目录 
mount -o rw,remount /sysroot

#2.获取root权限
chroot /sysroot

#3.修改默认运行级别
systemctl set-default multi-user.target

#4.退出
exit

#5.重启
reboot

救援模式

进入救援模式

需要有系统盘,才能进入救援模式

要进入安装系统的界面,才能进入救援模式

  • 关机

    1
    2
    3
    4
    init 0 
    halt
    poweroff
    shutdown -h now
  • 将系统盘放入光驱中

    image-20220509225438678

  • 进入BIOS

    1
    2
    3
    将系统启动的顺序,改为从光盘启动 
    方法一:开机时,不断按f2
    方法二:在电源里面点击,进入固件

    image-20220509225610047

    image-20220509225732441

    把CD-ROM启动顺序排到第一个

    image-20220509225816522

    image-20220509230044904

    按F10保存并退出 ->选择yes

    image-20220509230014368

    进入安装系统的界面

    image-20220509231009067

    image-20220509231305601

    进入救援模式

    image-20220509231805231

    输入:1

    image-20220509232317336

    1
    2
    3
    #1.先输入回车 
    #2.获取root的环境(root权限)
    chroot /mnt/sysimage
  • 重启

    1
    2
    bash-4.2# exit
    bash-4.2# reboot
  • 进入BIOS从硬盘启动

生产案例

  • 生产场景1: 当系统坏了,无法登陆系统,但是需要把里面的数据拷贝出来,怎么办?
1
2
3
4
5
bash-4.2# mkfs.xfs -f /dev/sdc
bash-4.2# mkdir /data
bash-4.2# mount /dev/sdc /data
bash-4.2# cp -a 重要文件 /data
bash-4.2# umount /dev/sdb
  • 生产场景2: 修复MBR,主要出现在安装双系统的时候,后安装的系统把原来的MBR删除了,需要修复

1.破坏硬盘的钱446字节,模拟MBR引导损坏,会发现重启无法启动系统

1
[root@localhost ~]# dd < /dev/zero >/dev/sda bs=1 count=446

image-20220509233837613

image-20220509233734772

扇区损坏,需要进入救援模式修复扇区

1
2
3
4
5
6
7
8
#1.修复扇区 
grub2-install /dev/sda

#2.退出root环境
exit

#3.重启
reboot

image-20220510000439174

  • 生产场景3:CentOS7误删除grub文件,进行修复

1.模拟故障

1
2
3
4
#删除grub2
[root@zls ~]# rm -fr /boot/grub2/
#重启
[root@zls ~]# reboot

2.进入救援模式

1
2
3
4
5
6
7
8
9
10
#1.修复扇区(恢复磁盘)
grub2-install /dev/sda

#1.5 重置grub.cfg配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg

#2.退出root环境
exit

#3.重启 reboot

systemd管理进程

image-20211001192508822

systemd的优势

  • 最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15…)

  • CentOS7 支持开机并行启动服务,显著提高开机启动效率

  • CentOS7关机只关闭正在运行的服务,而CentOS6,全部都关闭一次。

  • CentOS7服务的启动与停止不在使用脚本进行管理,也就是/etc/init.d下不在有脚本。

  • CentOS7使用systemd解决原有模式缺陷,比如原有service不会关闭程序产生的子进程。

systemd相关配置文件

1
2
3
4
5
6
7
8
9
10
11
#系统中所有服务启动的脚本存放路径 
C7:/usr/lib/systemd/system/ nginx.service
C6: /etc/init.d/

#系统运行级别相关目录
C7:/etc/systemd/system
C6:/etc/rc*.d

#默认运行级别需要开机自启的服务存放目录
C7:/etc/systemd/system/multi-user.target.wants/
C6:/etc/rc3.d/

systemd管理服务的命令

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
#1.启动服务 
C6:/etc/init.d/服务名 start
service 服务名 start
C7: systemctl start 服务名
service 服务名 start

#2.停止服务
C6: /etc/init.d/服务名 stop
service 服务名 stop
C7: systemctl stop 服务名
service 服务名 stop

#3.服务重启
C6: /etc/init.d/服务名 restart
service 服务名 restart
C7: systemctl restart 服务名
service 服务名 restart

#4.服务重新加载
C6: /etc/init.d/服务名 reload
service 服务名 reload
C7: systemctl reload 服务名
service 服务名 reload

#5.检查服务的启动状态
C6: [root@localhost ~]# /etc/init.d/sshd status
openssh-daemon (pid 1508) is running...
C7: systemctl status sshd

#6.判断服务是否在运行
[root@localhost ~]# systemctl is-active sshd
active
[root@localhost ~]# systemctl stop sshd
[root@localhost ~]# systemctl is-active sshd
inactive

#7.禁用某个服务
[root@localhost ~]# systemctl mask crond

#8.取消禁用某个服务
[root@localhost ~]# systemctl unmask crond

开机自启服务管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#1.查看开机自启的服务有哪些 
C6:[root@localhost ~]# chkconfig
C7:[root@localhost ~]# systemctl list-unit-files

#2.设置开机自启动
C6:[root@localhost ~]# chkconfig sshd on (默认2、3、4、5运行级别都自启)
C7:[root@localhost ~]# systemctl enable sshd
相当于:ln -s /usr/lib/systemd/system/nginx.service /etc/systemd/system/multi-user.target.wants/

#3.关闭开机自启
C6:[root@localhost ~]# chkconfig sshd off
C7:[root@localhost ~]# systemctl disable sshd
相当于:rm -f /etc/systemd/system/multi-user.target.wants/nginx.service

#4.查看指定服务是否开机自启
C6:[root@localhost ~]# chkconfig --list sshd
C7:[root@localhost ~]# systemctl is-enabled nginx
enabled:允许开机自启
disabled:不允许开机自启

#5.如果启动脚本被修改,重新加载启动脚本
C7:systemctl daemon-reload