Linux系统启动流程
POST(加电自检)——>BIOS(启动次序)——>MBR(bootloader)——>kernel(硬件层)——>initrd——>init(用户层)
内核设计风格
单内核:Linux
微内核:Windows(线程)
核心:动态加载内核模块
内核的命名
例如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电源在电源故障/恢复时执行的操作
启动虚拟终端
启动图形终端
守护进程的类型
独立守护进程
xinetd:超级守护进程,代理人
瞬时守护进程,不需要关联至运行级别
本文出自 “Linux根文件系统” 博客,请务必保留此出处http://amazonjian.blog.51cto.com/9604681/1714547
原文地址:http://amazonjian.blog.51cto.com/9604681/1714547