26-linux启动流程

本文详细解析了Linux系统的启动流程,包括GRUB的功能、内核初始化、救援模式以及GRUB2的配置和修复。从核心文件、ramdisk到kernel探测硬件设备、挂载根文件系统,再到用户空间的第一个应用程序/sbin/init的运行,层层深入。同时介绍了如何在GRUB1.5和GRUB2中进行交互式修复和配置文件修复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux系统:

​ kernel+rootfs(程序和glibc)

​ 支持模块化 ko 内核对象

核心文件

cpio -tv 预览io文件

  • ramdisk 辅助的伪根系统
  • initramfs-3.10.0-862.el7.x86_64.img #安装os生成
	 mkinitrd /boot/initramfs-`uname -r`.img `uname -r
  • vmlinuz-3.10.0-862.el7.x86_64
  • lib/modules/ver-release

启动流程

1.加点自检

2.读取第一个启动设备的mbr的引导加载grub的启动信息

3.加载核心操作系统的核心信息,解压缩,尝试驱动硬件

4.核心执行init程序并获取默认的运行信息

5.init程序执行/etc/rc.d/rc.sysinit文件

6.启动核心的外挂模块

7.init运行的各个批处理文件

8.init执行/etc/rc.d/rc.local

9.执行/bin/login,等待用户登录

10.登录后开始以shell控制主机

grub功能

提供选择菜单加载用户指定内核,把内核专家内存 解压展开,并把系统控制权交给内核

  • grub0.x primary bootloader 446里面

    -grub 1.5 mbr扇区后面,存放文件系统驱动,必须识别文件系统驱动—>boot对应的文件系统驱动

    ​ /dev/sda1 xfs 1014M 142M 873M 14% /boot

  • grub 2 /boot/grub 分区

  • 总结:

    ​ stagel :mbr

    ​ stage1.5 :mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统

    ​ stage2 :磁盘分区/boot/grub/

  • kernel

​ 探测可识别到的所有硬件设备

​ 加载硬件驱动程序

​ ramdisk识别根文件系统

​ 以只读方式挂载根文件系统

​ 运行用户空间的第一个应用程序 /sbin/init

救援-initramfs

	initramfs-3.10.0-862.el7.x86_64.img 文件丢失

- ​	1.光盘引导

- ​	2.救援模式 

- ​	3.chroot  /mnt/sysimage #切换根文件系统

- ​	4.cd /mnt/sysimg/boot
- -  5 生成initramfs
  mkinitrd /boot/initramfs-`uname -r`.img `uname -r 
  exit
  exit
  sync
  reboot

救援-vmlinux

​	1.光盘引导	

​    2.救援模式    

​	3.cp  run/media/repo/vmlinuz-3.10.0-862.el7.x86_64  /mnt/sysimage/vmlinuz-``uanme -r

​ 系统初始化流程

   post(开机自检)---bios--bootloader(MBR)--kernel(ramdisk)----rootfs[挂载根文件系统(只读)]---init(systemd)

​ 运行级别:

​ 为了系统的运行或维护等目的而设定的机制, 0-6:7个级别

​ 0 关机 shutdown

​ 1 单用户模式–无须认证,维护模式 root用户

​ 2 多用户模式 带网络功能但不会启动nfs

​ 3 多用户模式 正常完全模式–只会启动shell不启动桌面

​ 4 预留模式

​ 5 多用户模式 完全功能模式,会启动图形界面

​ 6 重启模式

kernel初始化

1.设置主机名

2.设置欢迎信息

3.激活udev和selinux

4.挂载/etc/fstab文件定义的文件系统

5.检查根文件系统,并以读写方式重新挂载

6.设置系统时钟

7.激活swap

8.根据/etc/sysctl.comf文件设置内核参数

9.激活lvm和raid

10.加载额外的设备驱动

11.清理

rc脚本

​ 意味着去启动或关闭/etc/rc.d/rc3.d/目录下的服务脚本

​ k*:要停止的服务 k##* 优先级 数字越大 被依赖的服务先关闭

​ s*:要启动的服务 s##* 优先级 数字越小 被依赖的服务先启动

​ rc脚本:接受一个运行级别的参数

[root@localhost ~]# ls /etc/rc.d/

init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local

脚本框架

   for srv in /etc/rc.d/rc#.d/k*;do

​      $srv stop

​    done

​    for srv in /etc/rc.d/rc#.d/s*;do

​       $srv start

​    done

init

配置文件 /etc/inittab

/etc/rc.d/rc.sysinit 初始化

​ /etc/init.d/* (/etc/rc.d/init.d/*)脚本执行方式

​ chkconfig命令

​ 管控/etc/init.d/下的所有服务脚本在各级别下的启动或关闭状态

​ chkconfig --list

​ chkconfig --add 添加

​ chkconfig --del 删除

​ chkconfig --level name 默认级别 2345

  • ​ 正常级别下,最后启动的一个服务s99local没用连接至/etc/init.d 而是连接在/etc/rc.d/rc.local

​ 如果需要开机自动运行的脚本文件可直接放置到此文件中

  • 用户空间的启动流程

    /sbin/init(/etc/init.tab)

    设置默认运行级别—运行系统初始化脚步,完成系统初始化–关闭对应级别停止和开启的服务–设置登录终端–启动

启动流程详细

 post----boot(bios)---bootloader(MBR)--kernel(ramdisk)--rootfs--swtichroot--/sbin/init---/etc/inittab(/etc/init/*.config)---设定系统默认级别--系统初始化脚本rc.sysinit---关闭或启动对应级别的服务-----启动终端(shell或图形终端)

​ init程序:systemd,配置文件 /usr/lib/systemd/system/,/etc/systemd/system/

​ 完全兼容 sysv脚本 因此service命令依然可用,建议使用systemctl

grub2详解

​ 配置文件:/boot/grub/grub.conf <—/etc/grub.conf

​ stage2及内核等通常放置于一个基本磁盘分区

grub 1修复

#dd if=/dev/zero of=/dev/sda bs=1 count=446 破坏
  • 1.chroot /mnt/sysimage
  • 2.grub2-install /dev/sda #不依赖
	hexdump -C /dev/sda -n512 -v

交互式修复,依赖/etc/grub 里面的文件

grub
root (hd0,0)
setup(hd0)

grub1.5

  • 1.chroot /mnt/sysimage

  • 2.grub2-install /dev/sda #不依赖

    vim /ect/grub2.cfg

    ​ linux16 /vmlinuz-3.10.0-862.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0

    rhgb 图形化 quiet不显示内核加载流程

修复grub.cfg文件

grub> kernel /vmlinuz-3.10.0-862.el7.x86_64

grub> initrd /initramfs-3.10.0-862.el7.x86_64.img

​ 如何识别磁盘文件

​ hd#,#

​ hd# 磁盘编号

​ # 磁盘分区编号

grub 交互式

​ help 获取帮助命令

​ find

​ root (hd#,#)设置根设备

​ kernel 设定本次启动时用到的内核文件

​ initrd 设定为选定的内核提供额外文件的ramdisk

​ boot 引导启动选定的内核

如果/boot/下文件全部没有,可以在救援模式下安装kernel

​ rpm -ivh /mnt/cdrom/Packages/kernel-x --root=/mnt/sysimage --force

/boot/grub.conf

​ grub2-install /dev/sda

配置项

​ default 默认项启动

​ timeout 超时时间

​ splashimage

​ hiddenmenu 隐藏菜单

​ password 菜单编辑认证

​ title 定义菜单标题

​ root (hd#,#) grub查找stage2级kernel文件所在的设备分区,为grub的根

​ kernel /vmlinux-x.x. 启动的内核

​ initrd /initramfs-x.x 内核匹配的ramfs

单用户模式

​ 1.编辑grub菜单(选定,然后使用e编辑)

​ 2.在选定的kernel后面附加 1,s,S或single都可以

​ 3.在kernel所在行,输入b命令

fstab 修复 (df -Th)

1.挂载 / 到/dev/sda2

2.swap

3.重新启用救援模式

/sbin/init修复

  • 1.从其他机器scp拷贝 前提网络可达 ,重启

  • 2.chroot /mnt/sysimage

    ​rpm2cpio /misc/cd/packages/upstart-x
    

Centos 流程

post---->bios---->bootloader-mbr(grub)---->kernel(ramdisk)---->rootfs(switch root)---->/sbin/init(/etc/inittab)---->默认运行级别---->系统初始化(rc.sysinit)---->关闭启动服务---->启动终端(图像界面)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值