Linux系统 启动流程

  1. 基本概念
    1.1 CMOS & BIOS
    CMOS: 记录各项硬件参数,且嵌入主板的存储器
    BIOS:写入主板上的一个内置程序,计算机运行的第一个程序
    MBR:

  2. 启动流程
    2.1 启动流程:BIOS–>MBR–>-->boot loader–>核心文件

  1. 加载BIOS,硬件自检,读取配置获得第一个启动设备
  2. 读取并执行第一个启动设备内MBR的Boot Loader(grub等)
  3. 根据boot loader配置加载kernel,kernel检测硬件并加载驱动
  4. kernel调用init进程,init取得run-level信息
  5. init运行/etc/rc.d/rc.sysint,准备软件运行环境(网络,时区)
  6. init运行run-level对应的各个服务启动
  7. init运行/etc/rc.d/rc.local(开机启动的程序)
  8. init运行终端模拟程序mingetty来启动login程序,等待用户登录

2.2 Boot loader
安装在启动设备的第一个扇区内(sector),即MBR(Master Boot Record)。BIOS通过硬件的INT 13中断功能来读取MBR

Boot loader: 提供菜单、加载核心、转交控制权给其他loader

  1. 提供菜单: 使用着可选择不同的启动项目,多重系统有用
  2. 加载核心文件:直接指向可启动程序区来开始操作系统
  3. 转交其他boot loader:将启动管理移交其他boot loader

Boot loader可以安装的地点有两个,分别是 MBR 与 boot sector

多操作系统,先装Windows,后Linux的原因: Windows的loader默认不支持控制权转交功能

2.3 加载Kernel
boot loader读取kernel文件,并将其压缩到主内存中,此时kernel开始测试和驱动周边设备(硬盘,CPU,网卡等)
kernel会以自己的功能重新侦测一次硬件,不一定适应BIOS侦测到的硬件信息,此时kernel接管BIOS后续工作

kernel文件位置:
ls --format=single-column /boot
initrd-2.6.16.60-0.42.54.1-smp --> 虚拟文件系统
vmlinuz-2.6.16.60-0.42.54.1-smp --> kernel文件

/lib/modules: 动态核心模块(即驱动程序):/lib和/必须在同一个分区,因此系统启动时,必须挂载根分区,以便核心模块加载驱动程序。模块参数配置/etc/modprobe.conf

/boot/initrd: 虚拟文件系统(Initial RAM Disk): 它能够通过boot loader加载到内存中,该文件被解压到内存中模拟成一个根目录,此模拟在内存中的文件系统能够提供一个可运行的程序,通过该程序加载启动中需要的核心模块

boot loader加载kernel和initrd,然后在内存中让initrd解压成为根目录,kernel以此加载适当的驱动程序,最终释放虚拟文件系统,并挂载实际根目录文件系统

2.4 分析initrd文件:
mkdir -p /tmp/initrd
cp /boot/initrd-2.6.16.60-0.42.54.1-smp /tmp/initrd
cd /tmp/initrd
mv initrd-2.6.16.60-0.42.54.1-smp initrd-2.6.16.60-0.42.54.1-smp.gz
gzip -d initrd-2.6.16.60-0.42.54.1-smp.gz
file initrd-2.6.16.60-0.42.54.1-smp # ASCII cpio archive
cpio -ivcdu initrd-2.6.16.60-0.42.54.1-smp # 根目录,包含/lib, /dev等

没有initrd能否启动?
不一定。
需要initrd最重要的原因是,启动无法挂载根目录,例如根目录上有特殊存储设备,U盘,SCSI,SATA,RAID,LVM等
如果Linux安装在IDE磁盘上,并且使用ext2/ext3文件系统,不需要initrd也能正常启动系统

2.5 系统运行的第一个程序
程序名:/sbin/init
PID: 1
配置:/etc/inittab

2.6 运行级别run-level
0: halt
1: single user mode
2: multi-user, without NFS
3: full multi-user mode
4: unused
5: X11
6: reboot

系统初始化:
/etc/rc.d/rc.sysinit (CentOS)
/etc/rc.d/boot (Suse ?)

启动系统服务:/etc/rc.d/rc N

启动配置文件: /etc/sysconfig

run-level 5运行实例:
/etc/rc.d/rc 5
/etc/rc.d/rc5.d/K??* stop
/etc/rc.d/rc5.d/S??* start

??为顺序数字,K和S的值相反
K21mytest -> …/mytest
S01mytest -> …/mytest

stand alone服务启动目录/etc/init.d
chkconfig 会创建上面的symbolic link

用户自定义的启动程序:/etc/rc.d/rc.local

2.7 /etc/sysconfig配置目录
authconfig: 身份认证,/etc/shadow密文加密算法等
clock: 时区 ZONE=“Asia/Shanghai”,cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
network: 主机名&网关
network.script/: 网卡配置

2.8 切换运行级别
runlevel
init 3
init 0 -> shutdown
init 6 -> reboot

2.9 核心与核心模块
kernel: /boot/vmlinuz
kernel解压所需RAM Disk: /boot/initrd
核心模块: /lib/modules/$(uname -r)/kernel
核心源码: /usr/src/linux或/usr/src/kernel

kernel版本信息: cat /proc/version
系统kernel参数: cd /proc/sys/kernel

kernel加载的module: lsmod

module相信信息:modinfo ext3

增加module: modprobe ext3
删除module:modprobe -r ext3

lsmod | grep vfat
modprobe vfat
lsmod | grep vfat
modprobe -r vfat

  1. Grub
    3.1 boot loader的两个stage:
    stage 1:运行boot loader主程序。该主程序被安装在启动区,即MBR或boot sector,因为MBR太小,仅安装boot loader最小程序,不包括配置
    stage 2: 主程序加载配置文件(/boot)

3.2 grub配置:/etc/grub/menu.lst
硬盘和分区在grub中的代号:
root (hd0,0) 第一块磁盘的第一个分区

系统仅一块SATA硬盘,该磁盘的第一个逻辑分区在Linux和grub中的代号是什么?
第一块SATA磁盘,第一个逻辑分区,在Linux系统中的代号为/dev/sda5,在grub中的代号为(hd0,4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值