一、CentOS6系统启动过程及相关配置文件
-
开机加电自检
-
加电自检:BIOS程序的功能,加电后检测所有硬件设备是否可用,并展示结果
-
-
磁盘分区引导
-
通过BIOS确定引导哪个存储设备后,尝试引导该设备上的分区表,将其中的代码加载到内存运行
-
-
grub菜单引导
-
可实现单系统或多系统的选择功能,可选择不同内核版本
-
配置文件:/boot/grub/grub.conf
-
default:默认操作系统内核,排序按开机显示顺序
-
timeout:选择操作系统菜单的等待时间,即开机显示倒计时
-
splashimage:内核选择界面背景图片(当前纯黑)
-
hiddenmenu:隐藏菜单
-
title:grub菜单的名称
-
root:grub所能识别的根目录,即/boot/,第一块盘第一个分区
-
kernel:内核文件,"/"为/boot
-
initrd:帮助内核完成系统启动,如寻找LVM驱动
-
-
password:设定密码。放在title外表示进入grub菜单需密码,防止他人获取root权限(改密码)
-
-
找回密码:
-
开机,选择内核按"e"
-
选"kernel"按"e",按"空格+1",回车
-
kernel按"b"(根据提示),修改密码
-
-
-
加载内核
-
将菜单中选择的内核加载到内存,展开并启动一个微型操作系统
-
-
运行init进程(初始进程)
-
加载系统运行级别
-
加载/etc/inittab文件,设定0~6级别(C7中无用)
-
-
初始化系统
-
加载/etc/rc.sysinit完成初始化
-
-
根据启动级别开启服务
-
根据第6步确定的级别N加载对应目录下服务脚本:/etc/rcN.d/
-
-
登录系统
二、CentOS7系统启动过程及相关配置文件
-
CentOS7启动过程
-
加载BIOS/UEFI信息,进行硬件检测
-
UEFI须划分/boot/efi分区
-
-
按照BIOS(或UEFI)的设定找第一个可启动的设备
-
读取第一个设备的MBR(主引导记录),加载MBR中的BootLoader(启动引导程序grub2)
-
/boot/grub2/grub.cfg
-
-
依据grub2的设置加载内核,内核再次系统检测
-
依据grub2加载initramfs虚拟文件系统,在内存中加载虚拟文件系统/boot/initramfs
-
内核初始化,以加载动态模块的形式加载部分硬件驱动。
-
调用initrd.target,挂载/etc/fstab中文件系统
-
此时可从VFS模拟的根目录"/boot"切换回硬盘真实根目录"/"
-
内核启动第一个进程systemd,systemd接管启动过程并启动后续程序
-
systemd调用默认default.target单元组,按照default运行子单元组
-
systemd调用sysinit.target单元组,初始化系统。检测硬件,加载剩余硬件的驱动模块等
-
systemd调用basic.target单元组,准备操作系统。加载外围硬件驱动模块、防火墙、SELinux安全上下文等
-
systemd调用multi-user.target单元组,启动字符界面所需程序
-
systemd调用multi-user.target单元组中/etc/rc.d/rc.local文件,执行文件中命令
-
systemd调用multi-user.target单元组中getty.target单元组,初始化本地终端
-
systemd调用graphical.target单元组(字符界面不需)
启动过程名词解释:
-
BIOS:BIOS和UEFI统一简称
-
MBR:GPT为了兼容性也保留了MBR区块。此处表示为磁盘首个分区可安装boot loader的区块
-
boot loader:启动引导程序,用于解决内核文件加载文件,存在于启动设备的第1个扇区
-
加载内核检测硬件与initramfs
-
内核名:/boot/vmlinuz**
-
经由boot loader读取内核文件,将内核解压到内存,用内核检验硬件设备
-
非必要内核功能变成模块,如USB、SATA、SCSI等磁盘设备驱动程序
-
因而内核不能读取SATA等磁盘
-
-
虚拟文件系统
-
C6:/boot/initrd***
-
C7:/boot/initramfs-**(内核版本号)**.img
-
经由boot loader加载至内存,模拟为一个根目录(非"/")
-
通过此模拟加载启动过程中所需内核模块
-
-
-
管理系统服务
查询服务状态:systemctl list-unit-files
-
运行级别
级别简化:multi-user.target 和 graphical.target
-
运行级别切换
-
临时切换
-
systemctl isolate multi-user.target
-
systemctl isolate runlevel3.target
-
-
永久切换
-
查看默认级别:systemctl get-default
-
设置默认级别:systemctl set-default graphical.target
-
-
-
grub2和grub区别
-
配置文件保存位置
-
C6:/boot/grub/grub.conf
-
C7:/boot/grub2/grub.cfg
-
-
配置文件修改方法
-
C6:vim直接修改
-
C7:命令间接修改
修改内核启动顺序
<span style="background-color:#f8f8f8"><span style="color:#3300aa">vim</span> /etc/default/grub <span style="color:#0000ff">GRUB_TIMEOUT</span><span style="color:#981a1a">=</span><span style="color:#116644">5</span> <span style="color:#aa5500">#开机时 grub 默认 5 秒后启动内核</span> <span style="color:#0000ff">GRUB_DISTRIBUTOR</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"</span><span style="color:#009900">$(sed 's, release .*</span><span style="color:#0000ff">$,</span><span style="color:#009900">,g' /etc/system-release)</span><span style="color:#aa1111">"</span> <span style="color:#0000ff">GRUB_DEFAULT</span><span style="color:#981a1a">=</span> saved <span style="color:#aa5500">#saved改成0,1 第1个内核,第2个,以此类推。</span> <span style="color:#0000ff">UB_DISABLE_SUBMENU</span><span style="color:#981a1a">=</span><span style="color:#221199">true</span> <span style="color:#0000ff">GRUB_TERMINAL_OUTPUT</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"console"</span> <span style="color:#0000ff">GRUB_CMDLINE_LINUX</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"crashkernel=auto rhgb quiet net.ifnames=0"</span> <span style="color:#0000ff">GRUB_DISABLE_RECOVERY</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"true"</span> grub2-mkconfig <span style="color:#0000cc">-o</span> /boot/grub2/grub.cfg <span style="color:#aa5500"># 修改或创建配置文件</span> uname <span style="color:#0000cc">-r</span> <span style="color:#aa5500"># 查看当前内核版本</span></span>
-
-
三、加密grub防止通过init1(单用户)修改root密码
-
CentOS6加密
<span style="background-color:#f8f8f8">[root@localhost ~]<span style="color:#aa5500"># grub-md5-crypt</span> Password: <span style="color:#116644">123456</span> Retype password: <span style="color:#116644">123456</span> <span style="color:#0000ff">$1$oaqo5$3</span>d/cmTosm68jTw6o1wCu31 [root@localhost init]<span style="color:#aa5500"># vim /boot/grub/grub.conf</span> password <span style="color:#0000cc">--md5</span> <span style="color:#0000ff">$1$oaqo5$3</span>d/cmTosm68jTw6o1wCu31 <span style="color:#aa5500"># title之前</span> title Red Hat Enterprise Linux (2.6.32-220.el6.x86_64)</span>
-
CentOS7加密
-
改密码:选择内核按"e","linux16"行末尾,输入"rd.break"或"init=/bin/sh"
-
加密(法1)
<span style="background-color:#f8f8f8">[root@localhost ~]<span style="color:#aa5500"># grub2-mkpasswd-pbkdf2 </span> 输入口令:123 Reenter password: <span style="color:#116644">123</span> PBKDF2 hash of your password is grub.pbkdf2.******************** [root@localhost ~]<span style="color:#aa5500"># vim /etc/grub.d/00_header </span> <span style="color:#aa5500"># 文件底部</span> <span style="color:#3300aa">cat</span> << EOF <span style="color:#770088">set</span> <span style="color:#0000ff">superusers</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'rs'</span> <span style="color:#aa5500"># rs为进入grub的用户名</span> password_pbkdf2 rs grub.pbkdf2.******************** EOF [root@localhost ~]<span style="color:#aa5500"># grub2-mkconfig -o /boot/grub2/grub.cfg</span></span>
-
法2
-
grub2-setpassword # 设置密码,创建/boot/grub2/user.cfg
-
用户名为root
-
-
四、通过liveCD进入救援模式、重装grub修复损坏系统
-
CentOS6救援模式
-
损坏grub: dd if=/dev/zero of=/dev/sda bs=1 count=450
-
重启,一路按提示选择:不联网、continue、shell
-
chroot /mnt/sysimage(光盘挂载) 切换文件系统
-
grub-install /dev/sda 修复grub
-
exit,重启
-
-
CentOS7救援模式
-
损坏grub: dd if=/dev/zero of=/dev/sda bs=1 count=446
-
重启,进入Troubleshooting界面,选择rescue模式
-
选1进入continue模式,按提示回车进shell
-
<span style="background-color:#f8f8f8">mount | <span style="color:#3300aa">grep</span> /mnt <span style="color:#3300aa">chroot</span> /mnt/sysimage grub2-install /dev/sda <span style="color:#770088">exit</span> reboot</span>
-
-
CentOS7误删除grub2文件修复
-
删除grub2目录
-
关机进BIOS模式(打开电源进入固件),光盘优先级调高
-
同损坏grub,修复后执行grub2-mkconfig -o /boot/grub2/grub.cfg生成grub.cfg
-
退出,改回优先级
-
-
CentOS7密码找回
-
rd.break(UEFI无效,C9部分版本无效)
-
e编辑内核,"linux16"行末尾输入rd.break,Ctrl+x进入shell
-
mount查看根分区挂载点,重载为rw权限
-
chroot /sysroot,修改root密码
-
解决SELinux
-
vim /etc/selinux/config
-
touch /.autorelabel
-
-
退出重启
-
-
init=/bin/sh
-
与rd.break大体相同,无需chroot
-
解决SELinux后可直接exec /lib/systemd/systemd,无需重启(也无法自启)
-
-