天天看点

linux系统启动流程详解

Linux系统启动流程

POST(加电自检)——>BIOS(启动次序)——>MBR(bootloader)——>kernel(硬件层)——>initrd——>init(用户层)

内核设计风格

                单内核:Linux

                微内核:Windows(线程)

核心:动态加载内核模块

内核:/lib/modules/“内核版本号命名的目录”

内核的命名

例如vmlinuz-2.6.32

                /lib/modules/2.6.32

在内核与应用程序之间会有一个提供程序的驱动

一个应用程序的运行需要依赖很多的库文件

ldd:显示共享库依赖关系

ldd /path/to/二进制文件

chroot:chroot/path/to/temproot

ramdisk——将内存模拟成磁盘来使用

运行级别——启动的服务不同

                0:关机

                1:单用户模式,直接以管理员登录,不需要密码

                2:多用户模式,不启用NFS(网络文件系统)

                3:正常多用户模式,文本模式

                4:预留模式

                5:多用户模式,图形模式

                6:重启

在/etc/inittab中定义了启动的运行级别

详解启动过程

bootloader

不想让别人随便访问grub可以给它加密码,还可以将密码进行加密

查看运行级别

                runlevel

                who –r

查看内核相关信息

                uname–r

模拟练习,安装grub,先将bootloader破坏掉

破坏bootloader(即安装盘的钱446扇区)

安装grub第一步

#grub

                grub>(要指定内核所在的磁盘,判断那个磁盘是安装了内核)

安装grub的第二种方法

#grub-install --root-directory=/path/to/boot‘s_parent_dir   /path/to/device(这里添加的是内核分区所挂载到了哪个文件系统下,例如使用mount查看/dev/sda挂载到了/boot下,于是在=后添加/boot/)

若是grub文件不存在了,进行主机启动的拯救

                此时不可以使用root进行判断哪个磁盘是含有内核文件的,要使用find命令查找内核文件

grub配置文件丢失

grub>find

grub>root(hd#,N)

grub>kernel /path/to/kernel_file

grub>initrd /path/to/initrd_file

grub>boot

kernel初始化过程

设备探测

驱动初始化(可能从initrd文件中装载驱动模块)

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

装载第一个进程init

init——>(/etc/inittab)

init下的字段

                id:runlevel:action:process

action

                initdefault:设定默认运行级别

                sysinit:系统初始化

                wait:等待级别切换至此级别时执行

                respawn:一旦程序终止会重新启动

将/etc/rc.d/rc.sysinit脚本读懂

                激活udev和selinux

                根据/etc/sysctl.conf文件设定内核参数

                设定时钟

                装载键盘映射

                启用交换分区

                设置主机名

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

                激活raid和LVM设备

                启用磁盘配额

                根据/etc/fstab检查并挂载其他文件系统

                清理过期的锁和PID文件

chkconfig

                chkconfig:runlevel  ss  kk当chconfig命令来为此脚本在rc.#d目录创建连接时runlevels创建默认为s开头的的连接,除此之外的级别默认创建为k开头的连接s后面的启动优先级为ss表示的数字,k后面为关闭优先级顺序kk所表示的数字

description:用于说明此脚本的简单功能

chkconfig

–list:查看所有独立服务的启动设定

--add:创建连接文件

--del:删除连接文件

--level runlevels 服务名称(on|off)

样例脚本

/etc/rc.d/rc.local:系统最后启动的一个服务,一个应该执行的脚本

/etc/inittab:

                设定默认运行级别

                运行系统初始化脚本

                运行指定运行级别对应的目录下的脚本

                设定Ctrl+Alt+Del组合键的操作

                定义UPS电源在电源故障/恢复时执行的操作

                启动虚拟终端

                启动图形终端

守护进程的类型

                独立守护进程

继续阅读