系统启动流程
- BIOS
- MBR
- GRUB
- KERNEL
- INIT
单用户修改 root 密码
GRUB 加密
系统启动流程
- BIOS
- MBR: Boot Code
执行引导程序 - GRUB
加载内核
执行 init
runlevel
BIOS
Basic Input Output System, 一般保存在主板的 BIOS 芯片中
计算机启动时首先运行 BIOS, 负责检查硬件并且查找可启动设备
可启动设备在 BIOS 设置中进行定义, 如 USB, CDROM, HD
MBR
不同的系统有不同的 MBR
BIOS 找到可启动设备后执行其引导代码
引导代码为 MBR 的前 446 字节
GRUB
MBR 一般会作为跳转, 启动一个更复杂的引导程序, 比如 GRUB
Grub 是现在 Linux 使用的主流引导程序
可以用来引导现在几乎所有的操作系统, pe 也是 grub 引导的
Grub 的相关文件保存在 / boot/grub 目录中
stage1(MBR) -> xxx_stage1_5(file system driver) -> stage2
Grub 配置文件为
/boot/grub / grub.conf
配置格式:
- default=0 # 第一个引导程序
- timeout=5 # 停留时间
- splashimage=(hd0,1)/boot/grub/splash.xpm.gz # 引导界面背景
- hiddenmenu # 默认隐藏菜单
- title CentOS # 操作系统名称
- root (hd0,1) # 操作系统所在分区, 第一块硬盘第二个分区
- # 内核以及传递给内核的参数 (ro root=...), 用空格分开
- kernel /boot/vmlinuz-2.6.32-431.el6.x86_64 ro root=...
- # initial ram file system, 内核模块打包文件
- initrd /boot/initramfs-2.6.32-431.el6.x86_64.img
- KERNEL
MBR 的引导代码将负责找到并加载 Linux 内核
Linux 内核保存在
/boot/vmlinuz - 2.6.32 - 431.el6.x86_64
一般还会加载内核模块打包文件:
/boot/initramfs - 2.6.32 - 431.el6.x86_64.img
Linux 为保持 kernel 的精简将一些不常用的驱动功能编译成为模块, 在需要的时候动态加载, 而这些模块被打包保存为一个 initramfs 文件
早期版本 Linux 使用 initrd 文件, initramfs 是 initrd 的替代优化版本, 比 initrd 更加节省空间更加灵活
命令 dmesg 或者 / var/log/dmesg 文件可以查看本次启动时内核的输出信息
INIT
init(/sbin/init) 是 Linux 系统中运行的第一个进程, 所有进程的父进程
调用
/etc/rc.d / rc.sysinit
负责对系统进行初始化, 挂载文件系统, 并且根据运行级别启动相应服务
Linux 运行级别 (runlevel):
- 0 关机
- 1 单用户模式
- 2 不带网络的多用户模式
- 3 多用户模式
- 4 未使用
- 5 X11 图形化模式
- 6 重启
可以通过 / etc/inittab 配置文件修改默认的运行级别
etc/init / 下的文件是其他配置信息
每个级别对应的启动服务保存在
/etc/rc.d / rc[0 - 6].d /
中
runlevel 可显示当前及上一个运行级别
init 可用以改变当前运行级别
单用户修改 root 密码
为内核传递参数 1 或 single 可进入单用户模式
单用户模式下不启动任何服务
单用户模式直接以 root 用户登录, 并且需要密码
可以使用 passwd 修改 root 密码
GRUB 加密
通过在 grub.conf 中的启动配置中加入如下参数即可
password--md5 $1$aoWpTe$ / MWUUYbBIF.2RUZK8nbWU0
加密后的密码可以通过 grub-md5-crypt 生成
另外, 可以参考阮一峰的博客:
计算机是如何启动的
Linux 的启动流程
来源: http://www.bubuko.com/infodetail-2495149.html