Linux_Grub2、系统启动流程_RHEL7

前言

RHEL7使用GRUB2,引导程序。

系统启动流程

控制RHEL7启动过程

  1. 开机
  2. 加载主板BIOS
  3. 检测硬件是否有故障
  4. 找启动介质,boot分区MBR(Master Boot Recorder)512Byte,Bootloader(446B)+分区表(64B)+校验结束位(2B),一个分区的标识数据占用16B。内核保存在/boot,通过GRUB2将内核加载到内存。
  5. 通过修改grub.cfg,来实现对系统启动选项的控制。GRUB2实际上是一个微型的OS,他可以识别到一些常用的文件系统,GRUB2运行时会读取自己的配置文件/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目录,此目录下有下列文件: 
1. 00_header 设置 grub 的默认参数 
2. 30_os_prober 设置其他分区中的系统(硬盘中有多个操作系统时设置) 
3. 40_custom、41_custom 用户自己自定义的配置 
4. 10_linux 系统中存在多个 linux 版本 
5. 20_ppc_terminfo 设置tty控制台 
/boot/grub2/grub.cfg 是上面文件的组合体 
设置指定内核启动: 
vim /etc/default/grub

grub2-set-default saved|number
  • 1
  • 1

RHEL7启动级别

修改系统运行级别:

临时修改: 
进入系统后修改:systemctl isolate TAB 
未进入系统前修改:按 e,到linux16行尾,加入systemd.unit=xxxx.target 
永久修改systemctl set-default TAB 
TAB类型和其特性
1. emergency.target: 
sulogin提示,grub启动完成,同时系统的 root 把/只读挂载 
救援模式(只挂载/而且只读,不加载/etc/fstab) 
文件系统出了故障时使用。 
2. graphical.target: 
支持多用户,图形化和文本登录 
3. multi-user.target: 
支持多用户,文本登录 
4. 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密码。 
如过系统启动了selinux,必须运行以下命令,否则将无法正常启动系统:touch /.autorelabel 
exec /sbin/init启动,或者用指令exec /sbin/reboot重启

grup2加密,防止破密码

获取加密密码

grub2-mkpasswd-pbkdf2  #输入密码
  • 1
  • 1

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

cat << EOF
set superusers="jmilk"
password jmilk grub.pbkdf2.shaxxxxxxxxxxxxxxx  #加密密码
EOF
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

更新grub配置后并重启

grub2-mkconfig -o /boot/grub2/grub.cfg
systemctl reboot
  • 1
  • 2
  • 1
  • 2

initramfs文件

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

转载:http://blog.csdn.net/jmilk/article/details/49928853

时间: 2024-08-31 00:38:48

Linux_Grub2、系统启动流程_RHEL7的相关文章

Linux系统启动流程详解

那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 这个部分比较有意思.因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但是,一旦进入操作系统,程序员几乎可以定制所有方面.所以,这个部分与程序员的关系更密切. 我主要关心的是Linux操作系统,它是目前服务器端的主流操作系统.下面的内容针对的是Debian发行版,因为我对其他发行版不够熟悉. 第一步.加载内核 操作系统接管硬件以后,首先读入

图解CentOS系统启动流程

当我们按下开机键后,系统背后的秘密我们是否了解呢?这里,我带大家探索一下linux系统开机背后的秘密. 1.加电自检 主板在接通电源后,系统首先由POST程序来对内部各个设备进行检查,自检中如发现有错误,将按两种情况处理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理. 2.BIOS启动引导阶段 自检通过之后,按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用到的设备.一般电脑是按"F2&q

linux系统启动过程详解-开机加电后发生了什么 --linux内核剖析(零)

linux系统的启动流程 关于linux系统的启动流程我们可以按步进行划分为如下: BIOS POST自检 BIOS(Boot Sequence) 引导操作系统 加载对应引导上的MBR(bootloader) 主引导设置加载其BootLoader 加载操作系统 启动BIOS,准备实模式下的中断向量表和中断服务程序 电脑启动后,CPU逻辑电路被设计为只能运行内存中的程序,没有能力直接运行存在于软盘或硬盘中的操作系统,如果想要运行,必须要加载到内存(RAM)中. BIOS是如何启动的,CPU硬件逻辑

Linux的启动流程(CentOS 6)

前言    Linux启动的过程在实际生产中有着至关重要的作用.试想一下,如果我们在实际生产中服务器因为某一个服务出了问题,而不能启动,这时我们应该怎么办.如果我们了解Linux的详细启动过程,知道是在哪一个环节出了问题,我们就能够进入到相应的环节,排除掉相应的问题,从而解决实际生产中的问题.    同时,我们在这里提出一个问题,有谁知道Windows的启动过程呢?如果启动过程出了问题,我们该怎么办呢?恐怕答案只有重启系统了吧--    Linux 系统的启动过程对于管理员来说是完全透明的,了解

分析Android中应用的启动流程_Android

前言 在我们开始之前,希望您能最好已经满足以下条件:      1.有一份编译后的Android源码(亲自动手实践才会有更深入的理解)      2.对Binder机制有一定的了解 本文启动流程分析基于Android 5.1的源码.为什么是5.1的源码呢?因为手边编译完的代码只有这个版本-另外,用什么版本的源码并不重要,大体的流程并无本质上的区别,仅仅是实现细节的调整,找一个你熟悉的版本就好. 1.启动时序图 作为一个轻微强迫症的人,整理的时序图,相信大家按图索骥,一定能搞明白整个启动流程: 说

Android系统关机的全流程解析_Android

在PowerManager的API文档中,给出了一个关机/重启接口: public void reboot (String reason) 对于这个接口的描述很简单,就是几句话. 接口的作用就是重启设备,而且,就算重启成功了也没有返回值. 需要包含REBOOT权限,也就是android.permission.REBOOT 唯一参数reason代表需要的特定重启模式,比如recovery,当然也可以为null. 一.上层空间 1.frameworks/base/core/java/android/

基于ARM的嵌入式系统Bootloader启动流程分析

  一. 引言:     对于PC机,其开机后的初始化处理器配置.硬件初始化等操作是由BIOS(Basic Input /Output System)完成的,但对于嵌入式系统来说,出于经济性.价格方面的考虑一般不配置BIOS,因此我们必须自行编写完成这些工作的程序,这就是所需要的开机程序.而在嵌入式系统中,通常并没有像 BIOS 那样的固件程序,启动时用于完成初始化操作的这段代码被称为Bootloader程序,因此整个系统的加载启动任务就完全由Bootloader 来完成.简单地说,通过这段程序

微型linux系统的裁剪过程

前面我们介绍过基于busybox制作一个小linux,这篇文章则介绍的是从头至尾,一步一步根据系统启动流程制作的微型linux,并且逐渐将其功能完善. 系统启动流程: POST 加电自检,载入一段程序完成基本及核心硬件的检测 --> BIOS 根据BIOS中设定的引导次序,查找对应设备上的MBR --> 读取MBR的BootLoader,BootLoader中配置了要引导的操作系统的内核的位置 --> 读取内核,内核进行初始化,需要initrd 将Kernel和真正的根文件系统连接起来

Android使用Intent启动其他非系统应用程序的方法_Android

本文实例讲述了Android使用Intent启动其他非系统应用程序的方法.分享给大家供大家参考,具体如下: android应用程序内部通过Intent来实现Activity间的跳转.也知道通过Intent调用系统程序.但若想在应用程序A内开启应用程序B(前提是A.B均已安装),该如何去实现? 记录下实现过程. 在应用程序A内添加如下代码: Intent i = new Intent(); i.setClassName("com.example.a", "com.example