开机启动过程

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. 用户登录与环境变量

当用户登录时,系统会执行一系列脚本来初始化环境变量:

  1. /etc/profile:系统全局的配置文件,所有用户登录时都会执行,用于设置全局性的环境变量和启动程序。
  2. /etc/bashrc:系统全局的配置文件,每次打开新的 Bash shell 时都会读取,常用来定义全局的别名、函数等。
  3. ~/.bashrc:用户个人的配置文件,每次打开新的 Bash shell 时执行,可设置用户专属的别名、函数和环境变量等。
  4. ~/.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 系统的启动和运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值