Linux RHEL 7启动过程
nanshan 2024-11-20 19:33 22 浏览 0 评论
Linux RHEL 7启动过程详解
了解Linux的启动过程对排除故障和修复启动问题来说非常重要。RedHat 7使用systemd(/usr/lib/systemd/systemd)替换init进程(/sbin/init)。与传统的init进程相比,systemd提供了更多的启动控制,虽然它仍支持现有的init脚本。
1. BIOS (Perform POST) | BIOS (执行上电自检Power On Self Test)
2. MBR (loads GRUB2) | 加载GRUB2
3. GRUB2
- Loads the vmlinuz kernel image 加载vmlinuz内核映像
- Extract the contents of initramfs image 提取initramfs映像中的内容
4. KERNEL
- Loads necessary driver modules from initrd image 从initrd映像中加载必要的驱动模块
- Systemd starts systems first process systemd启动系统中第一个进程
5. SYSTEMD
- Reads conf files from /etc/systemd 从/etc/systemd中读取配置文件
- Reads file linked by /etc/systemd/system/default.target 读取/etc/systemd/system/default.target指向的文件
- Brings the system to the state defined by the system target 将系统引导到由system target定义的状态
BIOS
BIOS代表的是基本的输入输出系统,它是一个帮助开机的软件,当上电后,它执行开机自检(POST)来识别、测试和初始化系统硬件部件,加载主引导记录(MBR)。
Master boot record (MBR)
MBR是任何Linux引导磁盘驱动器的第一个扇区(512字节)中的信息,用于标识操作系统位于何处和如何定位。在这512个字节中,引导装载器占了446个字节,接下来的64个字节为磁盘分区表,最后2个字节被称为魔幻数,用于错误检测。MBR检测可启动的设备,并把GRUB2引导程序加载到内存中,然后把控制权交给GRUB2。
GRUB2 Bootloader
GRUB代表GRand Unified Boot-loader. 在RedHat 7中,GRUB 2是默认的引导装载程序,而GRUB用在以前的RHEL版本中。GRUB2配置文件位于/boot/grub2/grub.cfg,不要直接编辑这个文件。GRUB2的菜单配置设置取自/etc/default/grub,当生成grub.cfg的时候。GRUB2在/boot查找vmlinuz内核镜像文件,一旦找到,加载vmlinuz内核映像文件到内存中,并提取initramfs映像文件中的条目然后存储到tmpfs(临时文件系统)中。
初始RAM磁盘(initrd)是在真正的根文件系统之前挂载的一个初始根文件系统。
initramfs: 预先加载块设备模块,例如SCSI, IDE, 因此通常存放在这些模块中的根文件系统就可以被访问和加载。initramfs包含用于引导所需的所有硬件的内核模块,以及进入下一引导阶段所需的初始脚本。在CentOS/RHEL系统上,initramfs包含一个完整的操作系统(可用于故障排除)。
initramfs被绑定到内核,内核将这个initramfs作为两个阶段引导过程的一部分挂载。每当安装新内核时,Dracut实用程序都会创建initramfs。
使用lsinitrd查看dracut创建镜像的内容
# lsinitrd|less
简单地说,GRUB2只是加载和执行Kernel和initramfs映像。
解压RHEL7 initramfs-3.10.0-1127.el7.x86_64.img镜像文件
# mkdir /tmp/initramfs
# cd /tmp/initramfs
# /usr/lib/dracut/skipcpio /boot/initramfs-3.10.0-1127.el7.x86_64.img | gunzip -c | cpio -dcim
[root@dso-test initramfs]# ls -l
total 8
lrwxrwxrwx. 1 root root 7 Jul 28 09:54 bin -> usr/bin
drwxr-xr-x. 2 root root 45 Jul 28 09:54 dev
drwxr-xr-x. 9 root root 4096 Jul 28 09:54 etc
lrwxrwxrwx. 1 root root 23 Jul 28 09:54 init -> usr/lib/systemd/systemd
lrwxrwxrwx. 1 root root 7 Jul 28 09:54 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jul 28 09:54 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Apr 30 2020 proc
drwxr-xr-x. 2 root root 6 Apr 30 2020 root
drwxr-xr-x. 2 root root 6 Apr 30 2020 run
lrwxrwxrwx. 1 root root 8 Jul 28 09:54 sbin -> usr/sbin
-rwxr-xr-x. 1 root root 3117 Apr 1 2020 shutdown
drwxr-xr-x. 2 root root 6 Apr 30 2020 sys
drwxr-xr-x. 2 root root 6 Apr 30 2020 sysroot
drwxr-xr-x. 2 root root 6 Apr 30 2020 tmp
drwxr-xr-x. 7 root root 66 Jul 28 09:54 usr
drwxr-xr-x. 2 root root 29 Jul 28 09:54 var
KERNEL
initramfs被绑定到内核,内核挂载这个initramfs作为两阶段启动过程中的一部分。
linux内核是操作系统的核心,它是系统启动时加载的第一个程序。当系统启动时,内核从initrd加载所有必须的内核模块和驱动器。在Linux 7中加载系统的第一个进程systemd。内核启动进程systemd(PID为1)。
# ps -ef|grep systemd
root 1 0 0 15:19 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
SYSTEMD
Systemd进程是Linux 7系统上运行的第一个进程ID (PID 1),它初始化系统并启动传统的init (/etc/init.d)进程曾经启动过的所有服务。Systemd进程读取/etc/systemd/system/default.target的配置文件,然后在target中加载操作系统。
在启动其他multi-user服务前,systemd会启动所有在/usr/lib/systemd/system/basic.target的服务。
Systemd使系统进入由系统目标定义的状态,执行系统初始化任务,例如
- Setting the host name
- Initializing the network
- Initializing SELinux based on its configuration
- Printing a welcome banner
- Initializing the system hardware based on kernel boot arguments
- Mounting the file systems, including virtual file systems such as the /proc file system
- Cleaning up directories in /var
- Starting swapping
- systemd uses ‘targets’ instead of runlevels. By default, there are two main targets:multi-user.target: analogous to runlevel 3target: analogous to runlevel 5
启动,重启和停机
要关机或重新启动正在运行的系统,我们使用systemctl命令
- systemctl poweroff will stop all running services, unmount all file systems (or remount them read-only when they cannot be unmounted), and then power down the system.
- systemctl reboot will stop all running services, unmount all file systems, and then reboot the system.
Note: systemctl halt and halt are also available to stop the system, but unlike their poweroff equivalents, these commands do not power off the system; they bring a system down to a point where it is safe to manually power it off.
管理GRUB
/etc/default/grub配置文件
定义了控制GRUB在引导时的行为的指令。这个文件中定义的值用于重新生成/boot/grub2/ GRUB .cfg文件,该文件控制GRUB在引导时的行为。对grub文件所做的任何更改只有在执行grub2-mkconfig实用程序之后才会生效。
# cat /etc/default/grub
# 设定超时时间,默认为10秒
# 设定为-1取消倒计时
GRUB_TIMEOUT=5
# 设定默认启动项,推荐使用数字
GRUB_DEFAULT=0
# 取消注释以允许图形终端(只适合grub-pc)
GRUB_TERMINAL=console
# 将会导入到每个启动项(包括recovery mode启动项)的'linux'命令行
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
取消启动菜单中的“Recovery Mode”选项
#GRUB_DISABLE_LINUX_RECOVERY="true"
/boot/grub2/grub.cfg配置文件
这是控制GRUB在引导时的主要配置文件。基于BIOS的系统,该文件在/boot/grub2目录。基于UEFI的系统,该文件在/boot/efi/EFI/redhat目录。可以使用grub2-mkconfig实用程序手动重新生成该文件,也可以在安装新内核时自动重新生成该文件。在此过程中,对该文件所做的任何手动更改都会丢失。
下面是在BIOS和UEFI系统上运行这个实用程序来重新生成grub.cfg文件的方法:
# grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub2/grub.cfg
当使用程序运行时,它会使用定义的设置文件/etc/default/grub和帮助脚本/etc/grub.d目录,为/boot中的内核重新生成文件。
第一个脚本00_header,设置GRUB环境变量
脚本10_linux,搜索同一磁盘分区上所有已安装的内核
脚本30_os-prober,搜索其他操作系统的存在
脚本40_custom 和41_custom ,用于向新的GRUB配置文件添加任何定制。
grub.cfg文件包含每个安装的内核的菜单入口块。每个块以一个标题开始,包括内核和RAM磁盘映像文件的名称,它们相对于/boot的位置,以及要加载的几个选项和模块。这些菜单项标题在系统启动时显示,您可以选择其中一个启动。
如果向系统中添加了新内核,则现有的内核项将保留在该文件中,并可以在启动时在GRUB菜单中选择启动。
重要提示:
- 为了故障处理损坏的grub2配置文件,管理员需要了解/boot/grub2/grub.cfg的语法。在这些块中,linux16和initrd16行指向要从磁盘加载的内核和要加载的initramfs。
- set root这行,并不指向RHEL 7系统的根文件系统,而是指向grub2应该从其中加载内核和initramfs文件的文件系统。语法是(harddrive, partition),其中hd0是系统中的第一个硬盘驱动器,hd1是第二个硬盘驱动器,等等…分区被表示为msdos1代表该驱动器上的第一个MBR分区或gpt1代表该驱动器上的第一个GPT分区。
选择一个systemd target
systemd target是一组systemd单元,应该启动它们以达到所需的状态。其中最重要的指标列于下表:
查看可用的targets
# systemctl list-units --type=target --all
UNIT LOAD ACTIVE SUB DESCRIPTION
basic.target loaded active active Basic System
cryptsetup.target loaded active active Local Encrypted Volumes
emergency.target loaded inactive dead Emergency Mode
final.target loaded inactive dead Final Step
getty-pre.target loaded inactive dead Login Prompts (Pre)
getty.target loaded active active Login Prompts
。。。省略
查看安装在磁盘上的所有targets
# systemctl list-unit-files --type=target --all
UNIT FILE STATE
basic.target static
bluetooth.target static
cryptsetup-pre.target static
cryptsetup.target static
ctrl-alt-del.target disabled
default.target enabled
。。。
选择一个target,在运行时。切换不同的target
# systemctl isolate multi-user.target
隔离目标将停止该目标不需要的服务,并启动尚未启动的任何必需服务。
注意:不是所有的目标都可以被隔离。只有在单元文件中设置AllowIsolate=yes的目标才能被隔离。
设置默认target
当系统启动时,控制权从initramfs传递给systemd, systemd将尝试激活default.target。通常情况下,default.target将是一个符号链接(在/etc/systemd/system中),不是graphical.target 就是multi-user.target。
不需要手动编辑这个符号链接,systemctl工具自带了两个命令来管理这个链接:get-default和set-default,如下所示:
# systemctl get-default
multi-user.target
设置默认target
# systemctl set-default graphical.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target.
# systemctl get-default
graphical.target
相关推荐
- 基于 Linux 快速搭建企业级 DNS 服务器(Bind9 ...
-
一、引言在大型企业网络或自建系统中,搭建一套高可用、自控的DNS解析服务器至关重要。本文将带你基于Linux环境,从零搭建企业级DNS服务平台,采用Bind9实战配置,确保解析稳定、安...
- Linux无法解析域名的解决办法(linux无法解析域名的解决办法有哪些)
-
如果由于误操作,删除了系统原有的dhcp相关设置就无法正常解析域名。 此时,需要手动修改配置文件: /etc/resolv.conf 将域名解析服务器手动添加到配置文件中 该文件是DNS域名解...
- 在centos7 创建基于域名的虚拟主机nginx服务器
-
直接用ip地址访问首先是不安全,其次不太容易记住,如果你的服务器上的项目有很多个,你创建多个基于Ip的虚拟主机,很容易导致公网ip冲突或乱用的情况。这时候我们就可以选择基于域名的虚拟主机。第一步、安装...
- Linux之DNS服务(linux dnsserver)
-
一、学习路线如下二、DNS介绍1.域名的概念域名由特定的格式组成,用来表示互联网中某一台计算机或者计算机组的名称,能够使人更方便的访问互联网,而不用记住能够被机器直接读取的IP地址。2.DNS(dom...
- Linux环境下DNS服务器配置图文详细教程
-
测试环境为vmware虚拟机下,linux系统为RedHatEnterpriseLinuxServer6.0(Santiago),内核版本Linux2.6.32-71.el6.i686...
- 构建基于 Linux 的高性能 DNS 服务器
-
在现代网络架构中,DNS(域名解析)是访问互联网的关键环节。搭建一个高性能、低延迟、可缓存加速的私有DNS服务器,不仅可以提升访问速度,还能增强网络隐私和安全性。本文将基于Linux系统,详细...
- 从运维的角度带你初识neo4j图形数据库的安装及配置
-
前言随着公司业务架构的改变,以前我部署环境的时候,一般只是部署Mysql,jdk,tomcat即可,现在还要部署一些nosql,如redis,neo4j,在之前从来没了解过,随着学习的深入而做了一些笔...
- [超全整理] Java 程序员必备的 100 条 Linux 命令大全
-
一、基础操作(10条)#1.ls-查看目录内容ls-l#长格式显示文件和目录ls-a#显示隐藏文件ls-lh#带单位显示文件大小#2.cd-切换目录...
- 软件测试|一文教你轻松搭建docker环境
-
前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个Do...
- docker基础知识/尚硅谷docker学习笔记
-
最近看了好多docker的资料,找了一些尚硅谷docker的教学视频,大概总结了一下前前后后的学习笔记。分享给大家。安装Docker的基本组成镜像Docker镜像(Image)就是一个只读的模板。镜...
- 前端_react项目从windows部署到centos
-
前言:从工程角度来讲,本地开发完就要把项目部署到生产环境,此过程的快慢也直接影响着整体的效率。所以也有很多人做持续集成的工作,例如:CI/CD/一键部署。但对于个人开发者而言,如果能有工具支撑是最好的...
- Springboot项目使用docker部署(docker中运行springboot项目)
-
环境:SpringBoot2.2.10.RELEASE+Docker+Centos7+JDK8安装配置Dockeryum包更新到最新yumupdate卸载旧版本dockeryumre...
- Spring Boot 3.x + Redis 7.x,轻松掌握Redisson分布式锁实战技巧
-
大家好,我是袁庭新。在分布式环境中,确保数据的一致性和正确性是至关重要的。对于需要高性能、高并发和分布式数据存储的应用程序来说,Redisson是一个很好的选择。同时,Redisson提供的分布式锁功...
- Docker篇(二):Docker实战,命令解析
-
大家好,我是杰哥上周我们通过几个问题,让大家对于Docker有了一个全局的认识。然而,说跟练往往是两个概念。从学习的角度来说,理论知识的学习,往往只是第一步,只有经过实战,才能真正掌握一门技术所以,本...
- 新手快速入门Docker,轻松掌握Docker安装与使用
-
安装使用官方安装脚本自动安装curl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun手动安装CentOS7(使用yum进...
你 发表评论:
欢迎- 一周热门
-
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
手机如何设置与显示准确时间的详细指南
-
NAS:DS video/DS file/DS photo等群晖移动端APP远程访问的教程
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
如何修复用户配置文件服务在 WINDOWS 上登录失败的问题
-
一加手机与电脑互传文件的便捷方法FileDash
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)