1. 开机自检 (POST)
开机自检 (Power-On Self-Test, POST) 是计算机启动时进行的硬件检测过程,确保硬件设备正常工作。
2. BIOS
定义
BIOS(基本输入输出系统)是固化在主板 ROM 芯片中的程序,它在开机时最先运行。CMOS(互补金属氧化物半导体)是存储 BIOS 设置信息的芯片,靠主板电池在断电后维持数据,BIOS 启动时会读取 CMOS 中的设置来配置计算机。
功能
- 硬件检测与初始化:包括开机自检硬件是否正常,为硬件分配资源并设置初始参数。
- 引导操作系统:按照设定的启动顺序引导操作系统,找到引导程序后移交控制权。
ROM 与 RAM
- ROM 芯片:只读的存储器。
- RAM 芯片:随机存储器,可读可写,停电会丢失数据。
- CMOS:是一个存储参数配置的芯片,BIOS 会读取 CMOS 的参数,了解 CPU 的配置、时间配置以及启动顺序的配置。
进入 BIOS
常见按键方式:在开机或重启后,快速按下 Del(大部分台式机主板)、F2(很多笔记本电脑)、F10(部分惠普电脑)等按键。有些电脑会在开机画面短暂显示进入 BIOS 的提示信息,按照提示操作即可。虚拟机:F2 或者 Esc。
3. BIOS 启动顺序
BIOS 的启动顺序(Boot Order)是指开机时 BIOS 按预设优先级在存储设备中查找可引导操作系统的顺序。本质就是找安装程序/启动程序。
- 第一引导顺序:从硬盘启动(Hard Disk Drive Boot)
- 第二引导顺序:从光驱启动(Optical Disk Drive Boot)
- 第三引导顺序:从 USB 设备启动(USB Device Boot)
- 第四引导顺序:从网络启动(Network Boot)
4. MBR
MBR(Master Boot Record)即主引导记录,位于硬盘的首个物理扇区(0 磁道 0 柱面 1 扇区),负责引导操作系统并管理硬盘分区信息,512 字节,存放引导代码和分区表。
- GRUB:是 Linux 的一个引导程序,非常小,446 个字节。
- GRUB2:GRUB 的升级版。
5. BIOS 读取 MBR
BIOS 读取 MBR,执行其中 GRUB 代码,GRUB 会进一步加载操作系统内核,GRUB 在 /boot 里面寻找文件驱动。
6. vmlinuz 与 initramfs
[root@kafka1 shell]# cd /boot
[root@kafka1 boot]# ls
grub
grub2
vmlinuz-0-rescue-939c820a8da742c2a5d2a120874ea49f
vmlinuz-3.10.0-1160.119.1.el7.x86_64
- vmlinuz-3.10.0-1160.119.1.el7.x86_64:是 Linux 的内核文件,是一个可执行的程序。
- initramfs-3.10.0-1160.119.1.el7.x86_64.img:是一个压缩文件,给 vmlinuz 提供很多驱动程序的文件,在内存形成一个临时的根文件系统。
7. systemd 进程启动
- 第一个进程:systemd (CentOS7, CentOS8) --> 启动对应运行级别的服务。
- 第一个进程:init (CentOS6) --> 启动对应运行级别的服务。
运行级别 (Run Level)
运行级别是老的概念,在 CentOS6 里非常流行,到了 CentOS7 以后,说法不常见。
- 0:关机
- 1:单用户模式
- 2:多用户模式,不能使用网络资源
- 3:完全多用户模式(字符界面)
- 5:图形界面
- 6:重启
[root@kafka1 boot]# runlevel
N 3 # 开机直接进入运行级别 3,没有其他级别 /N 表示 NO
[root@kafka1 boot]# init 5 # 设置运行级别 5
[root@kafka1 boot]# runlevel # 查看当前的运行级别
3 5
systemd
vim /etc/inittab # 现在的运行级别配置文件
multi-user.target: analogous to runlevel 3 多用户模式
graphical.target: analogous to runlevel 5 图形界面模式
systemctl set-default multi-user.target # 设置当运行级别为 multi-user.target(多用户模式)
systemctl get-default # 查看当前的运行级别
服务管理
[root@kafka1 multi-user.target.wants]# ls
auditd.service mariadb.service rsyslog.service
chronyd.service NetworkManager.service sshd.service
crond.service nginx.service tuned.service
dhcpd.service postfix.service vmtoolsd.service
irqbalance.service remote-fs.target
kdump.service rhel-configure.service
每个 .service
文件对应一个具体的服务。例如,sshd.service
对应 SSH 服务:
[root@kafka1 multi-user.target.wants]# cat sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS # 启动 SSH 服务
ExecReload=/bin/kill -HUP $MAINPID # 重启/杀死服务
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
通过 systemctl
命令可以管理这些服务:
systemctl start sshd # 启动 SSH 服务
systemctl stop sshd # 停止 SSH 服务
systemctl restart sshd # 重启 SSH 服务
8. /etc/rc.local 和 /etc/fstab
/etc/rc.local
/etc/rc.local
是一个用于在系统启动时自动运行脚本的文件。虽然现代系统推荐使用 systemd
服务来管理启动任务,但 rc.local
仍然可以用于兼容性目的。
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
bash /sc/feng.sh # 在此处添加开机启动的脚本
确保 rc.local
文件具有可执行权限:
chmod +x /etc/rc.d/rc.local
/etc/fstab
/etc/fstab
文件用于告诉 Linux 系统如何挂载磁盘的其他分区,使得用户可以使用磁盘的所有分区的数据。
/etc/fstab # 挂载磁盘的其他分区
9. 用户登录与环境变量
当用户登录时,系统会执行一系列脚本来初始化环境变量:
- /etc/profile:系统全局的配置文件,所有用户登录时都会执行,用于设置全局性的环境变量和启动程序。
- /etc/bashrc:系统全局的配置文件,每次打开新的 Bash shell 时都会读取,常用来定义全局的别名、函数等。
- ~/.bashrc:用户个人的配置文件,每次打开新的 Bash shell 时执行,可设置用户专属的别名、函数和环境变量等。
- ~/.bash_profile:用户登录时执行,主要用于设置用户的环境变量和启动个人程序,通常会调用
~/.bashrc
。
环境变量初始化
系统会执行 /etc/profile.d/
目录下的所有脚本:
/etc/profile.d/*.sh # 执行 /etc/profile.d/ 下面的所有脚本
登录提示符
登录成功后,系统会显示提示符:
[root@kafka1 ~]# # 登录成功后的提示符
扩展 营救模式
如果/etc/shadow和/etc/passwd被删除
1,首先使用映像文件驱动--》将光盘放入光驱
2,将启动顺序Boot Order第一个改为CD-ROM Drive,在BIOS里面修改
3,按F10退出,并选择Troublehooting
4,选择Rescue a CentOS system
5,选择1,救援环境尝试找到linux并安装挂载到/mnt/sysimage目录
6,将根目录切换到/mnt/sysimge--》chroot /mnt/sysimge
进入挂载的源系统根目--》cd /mnt/sysimge
7,开始救援,将备份文件,复制回来
8,关机,将启动顺序改为+Hard Drive,并开机
总结
通过了解计算机的启动过程、BIOS 设置、MBR 引导、GRUB 引导程序、Linux 内核加载、systemd 服务管理以及用户登录过程,可以更好地理解和管理 Linux 系统的启动和运行。