Linux 操作系统原理 — 系统启动流程
目录
系统启动流程
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 配置后并重启:
grub2-mkconfig -o /boot/grub2/grub.cfg
systemctl reboot
- 1
- 2
initramfs 文件
存放 kernel 可以 rw fs 的驱动,当 kernel 加载到内存后要以 ro 的方式加载根分区(xfs),但是因为系统驱动存放在根分区中。所以额外将让 kernel 可以读取根分区的驱动全放入到 initranfs 中,在 Kernel 还没有读取根分区时,initramfs 文件将所有的驱动解压到内存中供 kerne l使用。
文章来源: is-cloud.blog.csdn.net,作者:范桂飓,版权归原作者所有,如需转载,请联系作者。
原文链接:is-cloud.blog.csdn.net/article/details/49928853
- 点赞
- 收藏
- 关注作者
评论(0)