启动流程:
1、BIOS加电自检、检测硬件、决定启动介质、找到引导扇区
2、读取并且执行第一个开机设备中的MBR的bootloader(grub程序)
3、依据bootloader设置去加载内核,内核开始侦测硬件并加载驱动程序
如果是sysvinit启动程序
4、内核启动init进程
5、系统初始化
6、init找到/etc/inittab文件,决定系统的运行级别(X)
7、触发相应的运行级别的事件,运行/etc/rcX.d下的脚本
8、执行/etc/rc.local文件,来到登录界面
9、输入用户名密码,进入到系统中
如果是systemd启动程序
4、在硬件驱动加载成功后,内核会主动呼叫systemd程序,并default.target流程开机
systemd执行sysinit.target初始化系统及basic.target准备操作系统
systemd启动multi-user.target下的本机与服务器服务
systemd执行multi-user.target下的/etc/rc.d/rc.local文件
systemd执行multi-user.target下的getty.target及登录服务
systemd执行graphical需要的服务
boot loader主要功能如下:
提供选单:用户可以选择不同的开机项目
载入核心文件:直接指向可开机的程序区域来开始操作系统
转交其他loader:将开机管理功能转交给其他Loader负责
内核在Linux中的存放位置为/boot分区下,主要有2个文件要被加载:
vmlinuz-4.18.0-193.el8.x86_64 内核文件
initramfs-4.18.0-193.el8.x86_64.img 虚拟文件系统
查看initramfs文件里的内容:lsinitrd /boot/initramfs-4.18.0-193.el8.x86_64.img
如果systemd默认的是multi-user.target,下面命令可以列出它加载的服务:systemctl list-dependencies multi-user.target
从RHEL7用了grub2,而不再是grub了。
MBR分区的前446个字节存放的是系统引导程序grub,中间64字节是分区表,最后2个字节表示结束。
是grub是怎么工作的:
1、BIOS自检,检查硬件;
2、激活MBR,MBR上不存在文件系统,可以视作硬件一部分,因此可以被直接读取
3、grub加载到内存,生成一个微系统,微系统内置了精简版的文件系统
4、通过这个微系统,他会去引导分区,比如默认一般是sda1上去找内核文件如vmlinuz,然后再调用grub的配置文件。
grub的主要把他的配置文件放在了3个地方。
/boot/grub2/grub.cfg (/etc/grub2.cfg是/boot/grub2/grub.cfg文件的符号链接)
/etc/grub.d/
/etc/default/grub
他们的关系是 grub.cfg里面通过 ####BEGIN ##### 这种格式按照顺序调用/etc/grub.d
里面的脚本实现不同的功能。grub.d目录里面有很多数字开头的脚本,按照从小到大的顺序执行。以00__header为例,他又会调用/etc/default/grub
配置文件来实现最基本的开机界面配置,如下所示:
例如:在/etc/grub2.cfg
文件里面调用/etc/grub.d/10_linux
来配置不同的内核,这里面有2个menuentry
(菜单入口),所以我们开机的时候会看见两个默认选项,一个是普通模式,一个是救援模式
下面是/etc/default/grub
文件。和其他的脚本比起来,非常简单直观了。
需要注意的是,最好不要直接去修改/etc/grub2.cfg
文件。这是因为如果后期升级内核,所有的配置都会失效。如果需要自定义这个文件,我们可以修改对应的脚本或者/etc/default/grub
文件,然后通过grub2-mkconfig
重新生成grub.cfg文件。
例1:修改启动等待时间
rhel7默认启动等待时间为5秒,下面将启动时间改为10秒(注:如果改成-1
,那么每次启动时需要手动确认才可以)
重新编译生成grub.cfg文件:grub2-mkconfig -o /boot/grub2/grub.cfg
重启测试
例2:开机界面的时候输入“e
”,会打开编辑窗口,可以根据需要进入rescue,emergency或者shell模式。如何限制访问:
在/etc/grub.d/00_header
文件末尾,添加以下内容:
cat <<EOF
set superusers='用户名'
password 用户名 密码
EOF
重启编译生成grub.cfg文件
重启测试
以上设置的是明文密码,也可以设置成密文口令:
加密密码有命令grub2-mkpasswd-pbkdf2
生成
在/etc/grub.d/00_header
文件末尾,添加以下内容:
cat <<EOF
set superusers='用户名'
password_pbkdf2 用户名 密文密码
EOF
开机界面按“e
”进入编辑窗口,我们可以根据需要进入rescue
,emergency
和shell
引导的3种模式。这3种模式对于系统启动排错很有帮助,比如某个服务卡住了无法加载可以通过这3种模式排错。
rescue模式:在commandline的配置末尾添加s ,类似rhel6之前的单用户模式
按ctrl+x
启动
普通模式需要加载的服务很多,但是rescue模式加载的就少很多,输入管理员密码就可以进入了
emergency模式和rescue模式类似,不过加载的服务更少,把s
改成emergency
就行了
如果root密码忘记怎么办(重置root密码)
方法一:
1、重启系统,按e
进行编辑
2、在linux16那行尾部加上以下信息:rd.break console=tty0
3、按ctrl+x
启动
4、重新挂载文件系统:mount -o remount,rw /sysroot/
5、改变根目录:chroot /sysroot/
6、修改root密码
注:出现方块原因是没有中文环境,可以用LANG=en_us
切换成英文环境
7、在根目录创建相关文件(用于重新标记selinux环境值,如果启动了selinux,不运行此命令将无法正常启动系统):touch /.autorelabel
8、退出重启系统
方法二:
1、在linux16的最后一行删除rhgb quiet,然后添加init=/bin/sh,它会用shell替代默认daemon进程
2、按crtl+x启动
3、挂载文件系统为可写模式,因为根目录的加载权限是ro,只读,需要重新加载成rw权限:mount -o remount,rw /
4、修改密码:
5、在根目录创建相关文件,如果之前系统启用了selinux,必须运行以下命令,否则将无法正常启动系统:touch /.autorelabel
创建这个文件会自动在开机的时候重新做标签用于重新标记SELINUX的环境值。
6、启动系统,运行命令exec /sbin/init
来正常启动,或者用命令exec /sbin/reboot
重启
例1:grub故障:
1、模拟故障
2、重启后出现以下故障:开机的时候系统会自动尝试从本地、光盘和网络加载引导程序(如果光盘、网络等引导失败则会显示“operating system not fount”)
3、在bios调整引导顺序,使用光盘引导,选择Troubleshooting(排错)
4、选择Rescue a CentOS system
5、选择continue
6、根据提示,进入shell环境
7、fdisk -l
看看启动分区是哪个,有星号的就是
8、进入bash环境(系统根目录),重装一下grub2到启动分区:grub2-install /dev/sda
9、退出重启
例2:grub引导程序没有问题,但是内核文件或grub.cfg配置文件损坏的情况下怎么处理:
1、模拟故障
2、重启之后会进入grub救援模式,这表示引导程序没有问题,但是引导文件找不到了。
3、和例1操做一样,通过光盘引导,进入急救模式
4、检查boot目录,挂载光盘镜像
5、解决方法是重新安装内核,可以用rpm
或者yum
,用yum
需要先卸载当前的再安装,rpm
可以强制--force
覆盖安装
使用yum:
yum remove -y kernel
yum install -y /media/Packages/kernel-3.10.0-1160.el7.x86_64.rpm
使用rpm:
rpm -ivh /media/Packages/kernel-3.10.0-1160.el7.x86_64.rpm --force
6、装完内核后,重新安装一次grub2:grub2-install /dev/sda
,然后重新编译grub2配置文件:grub2-mkconfig -o /boot/grub2/grub.cfg
7、退出重启
注:如果开机后直接进入命令行模式,即使runlevel显示的是5,手动输入startx
一样报错,请尝试重新安装图像化界面yum groupinstall 'Sever with GUI'