Linux 操作系统原理系统启动流程

网友投稿 973 2022-05-28

目录

文章目录

目录

系统启动流程

编辑 gurb.cfg

RHEL7 的启动级别

RHEL7 破密码步骤

grup2 加密,防止破密码

initramfs 文件

系统启动流程

RHEL7 使用了 GRUB2 引导程序。

开启电源。

加载主板 BIOS

检测硬件是否有故障 。

找启动介质,进入磁盘的 MBR 引导分区分区。MBR 大小为 512Byte,由 Bootloader(446B)+ 分区表(64B)+ 校验结束位(2B)组成。一个分区的标识数据占用 16B。

linux 内核文件保存在 /boot 目录下,通过 GRUB2 程序将内核加载到内存。可以通过修改 grub.cfg,来控制系统启动选项。GRUB2 的本质是一个微型的操作系统,他可以识别到一些常用的文件系统,GRUB 2运行时会读取自己的配置文件 /boot/grub2/grub.cfg。每个内核条目都会以 menuentry 开头 ,menuentry 包含标题、选项(不建议修改),menuentry 后面有一对大括号,其中都是启动项,启动项以 TAB 开头 ,linux16 这行指定内核的位置、根分区的位置、以只读方式挂载根分区 、字符集、键盘布局、语言、rhgb(以图形化方式显示启动过程)、quiet(启动过程出现错误提示)。根分区都是 xfs 格式的,xfs 需要驱动才能读取文件,驱动的位置在 /lib/modules/3.10.0-123.el7.x86_64/kernel/fs/xfs,通过 initrd16 将启动相关的驱动和模块解压到内存,再读取根分区(xfs)的数据。

注意:RHEL7 的 grub.cfg 不能直接修改,要通过修改 /etc/default/grub 来间接编辑 grub.cfg。

编辑 gurb.cfg

修改配置文件 /etc/default/grub,修改后用 grub2-mkconfig 指令成 grub2.cfg。在 grub2-mkconfig 生成配置文件时需要加载 /etc/grub.d 目录,此目录下有下列文件:

00_header:设置 grub 的默认参数。

30_os_prober:设置其他分区中的系统(硬盘中有多个操作系统时设置)。

40_custom、41_custom:用户自己自定义的配置。

10_linux:系统中存在多个 Linux 版本。

20_ppc_terminfo:设置 tty 控制台 。

/boot/grub2/grub.cfg 就是上面文件的组合体。

例如,设置指定内核启动:

# vim /etc/default/grub grub2-set-default saved|number

1

2

RHEL7 的启动级别

临时修改:

进入系统后修改:systemctl isolate TAB

未进入系统前修改:按 e,到 linux16 行尾,加入systemd.unit=xxxx.target。

永久修改:systemctl set-default TAB。

TAB 类型和其特性:

emergency.target:sulogin 提示,grub 启动完成,同时系统的 root 把/只读挂载。救援模式(只挂载/而且只读,不加载 /etc/fstab)。在文件系统出了故障时使用。

graphical.target:支持多用户,图形化和文本登录。

multi-user.target:支持多用户,文本登录。

rescue.target:sulogin(单用户模式)提示,基本的系统初始化完成,单用户模式需要口令,要输入密码。和多用户区别在于不启动任何服务,加载了文件系统,适用于某服务设置故障,进入此模式修补。

RHEL7 破密码步骤

rd.break破解:

开启电脑 systemctl reboot。

在 Grub 选项上按 e 键,进入编辑模式。

在 vmlinuz 行后加入 rd.break console=tty0(单用户模式)。

ctrl+z 保存重启。

mount -o remount,rw /sysroot 挂载系统临时根目录为可写。

chroot /sysroot 改变系统目录为临时挂载目录。

echo fanguiju | passwd --stdin root 修改密码。

touch /.autorelabel

exit

exit

注意:若在 VMware 虚拟机上操作不成功,可以尝试将 rhgb quiet(图形化启动)先删除。

rd.break 一般用于修改 passwd 或者出现重大问题,临时中断运行,未加载 FileSystem,比但用户模式还要精简。若这样 rd.break 不能进入,则向 kernel 传递 init=/bin.bash 或 init=/bin/sh 参数,使用 init 的方法来破解。

init破解:

开启电脑 systemctl reboot。

在 Grub 选项上按 e 键,进入编辑模式。

在 kernel(linux16/linux/linuxefi)行尾添加 init=/bin/sh。

Ctrl+x 启动 Shell。

挂载文件系统为可写模式 mount –o remount,rw / 直接挂载根目录。

passwd root 修改 root 密码。

exec /sbin/init 启动,或者用指令 exec /sbin/reboot 重启。

NOTE:如过系统启动了 selinux,必须运行以下命令,否则将无法正常启动系统:touch /.autorelabel。

grup2 加密,防止破密码

获取加密密码:

grub2-mkpasswd-pbkdf2 # 输入密码

1

编辑 00_header 文件:此文件配置初始的显示项目,如默认选项,时间限制等,加入密码验证项目,在最后一行添加:

# vim /etc/grub.d/00_header cat << EOF set superusers="jmilk" password jmilk grub.pbkdf2.shaxxxxxxxxxxxxxxx #加密密码 EOF

1

2

3

4

5

6

更新 grub 配置后并重启:

Linux 操作系统原理 — 系统启动流程

grub2-mkconfig -o /boot/grub2/grub.cfg systemctl reboot

1

2

initramfs 文件

存放 kernel 可以 rw fs 的驱动,当 kernel 加载到内存后要以 ro 的方式加载根分区(xfs),但是因为系统驱动存放在根分区中。所以额外将让 kernel 可以读取根分区的驱动全放入到 initranfs 中,在 Kernel 还没有读取根分区时,initramfs 文件将所有的驱动解压到内存中供 kerne l使用。

Linux

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为云云原生训练营学习(二)在鲲鹏的k8s部署NFS
下一篇:关于rolling函数的探索,以及对北向资金能否预示股市涨跌的修正
相关文章