菜鸟学Linux 第033篇笔记 bootloader,inittab
Linux 系统自启动流程
PC OS (Linux)
POST-->BIOS(Boot Sequence)-->MBR(bootloader,446byte),GPT-->Kernel
-->initrd-->ROOTFS /sbin/init(/etc/inittab)
运行级别 (启动的服务不同)
运行级别:0-6
0 halt
1 single user mode 直接以管理员身份切入 s,S,single
2 multi user mode, no NFS
3 multi user mode, text mode
4 reserved
5 multi user mode, graphic mode
6 reboot
详解启动过程
bootloader(MBR)
LILO LInux LOader(早期,适合嵌入式系统)
GRUB GRand Unified Bootloader
stage1 MBR
stage1_5 识别文件系统
stage2 /boot/grub/
bootloader 有446字节最多
/etc/grub.conf 文件格式
default=0 默认启动title
timeout=5 等待用户选择的超时时长
splashp_w_picpath= 背景图片
hiddenmenu 隐藏菜单
password myroot
password --md5 此处为进入编辑grub时输入密码
title 内核标题,或操作系统名称字符串,可自由修改
root (hd0,0) 内核文件所在的设备:对grub而言,所有类型硬盘一律hd
第一个0 表示第几个磁盘,第二个对应硬盘分区
kernel 内核路径和传递给内核的参数 /proc/cmdline
initrd ramdisk文件路径
password --md5 放在此处则进入内核需要输入密码
内核设计风格
RedHat, SUSE
核心 动态加载 内核模块
内核 /lib/modules/"内核版本号命名的目录"/
vmlinuz-2.6.32
/lib/modules/2.6.32/
RedHat5 ramdisk-->initrd
RedHat6 ramfs-->initramfs
单内核 Linux (LWP)
核心 KO (kernel object)
微内核 windows Solaris(多线程)
Jail
chroot (run command or interactive shell with special root directory)
chroot /test/vrroot or /test/vrrot/bin/bash
ldd /path/Binary_file 显示二进制文件所依赖的共享库
Command
yum install gimp 一个图形编辑软件
使用Xshell远程软件可以启动远程的图形界面gimp &
grub-md5-crypt 使用md5给生成grub密文
runlevel Print previous and current SysV runlevel
who -r display runlevel
uname ( print system information)
-r, --kernel-release
print the kernel release
dd if=/dev/zero of=/dev/sda count=1 bs=400 破坏硬盘的bootloader
修复grub
第一种:
#grub
grub>root (hd0,0)
grub> set (hd0)
第二种:
#grub-install --root-directory=/path/boot's parent /dev/hda
给其它硬盘安装grub
1.将硬盘格式化好之后,挂载到一个以/mnt/boot目录下该硬盘的你目录必须是boot
2.使用命令grub-install --root-directory=/mnt /dev/sd(a,b,c...)
前边的root-directory 必须选用boot的父目录
3.完成后会在该硬盘下生成一个grub的文件夹,打开后里边有文件
4.手动生成一个grub.conf配置文件在grub目录下vim /mnt/boot/grub/grub.conf
编辑该配置文件
default=0
timeout=5
title mylinux(name)
root (hd0,0)
kernel /vmlinuz-2.6.18-308.el5
initrd /initrd-2.6.18-308.el5.img
注意以上两个的版本是一样的,,这样grub就制作完成了
如果grub.conf配置文件丢失,系统启动时会进入grub模式,只要知道内核在哪里就可以启动
如果硬盘多可以在grub模式下输入find (hd0,0)/按Tab来查看此硬盘下所有的内核文件
查找到后执行
grub> root (hd#,#)
grub> kernel /vmlinuz-2.6.18-308.el5
grub> initrd /initrd-2.6.18-308.el5.img
grub> boot
即可启动该Linux系统#号表示要对应具体的第几块硬盘,第几个分区
Kernel初始化的过程:
1、设备探测
2、驱动初始化(可能会从initrd (initramfs)文件中装载驱动模块)
3、以只读挂载根文件系统
4、装载第一个进程init (PID:1)
/sbin/init: (/etc/inittab) (古老)
RedHat6 upstart ubuntu, d-bus, event-driven
systemd 并行
/etc/inittab文件下的定义
# Default runlevel. The runlevels used by RHS are:
id:5:initdefault: 格式含义
id 标识符
runlevels 在哪个级别运行此行
action 在什么情况下执行此行
initdefault 设定默认运行级别
sysinit 系统初始化
wait 等待级别切换至此级别时执行
respawn 一旦程序终止,会重新启动该程序
process 要运行程序
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
/etc/rc.d/rc.sysinit完成的任务
1、激活udev和selinux
2、根据/etc/sysctl.conf文件,来设定内核参数
3、设定时钟
4、装载键盘映射
5、启用交换分区
6、设置主机名
7、根文件系统检测,并在没有错误之后,以读写方式重新挂载
8、激活RAID和LVM设备
9、启用磁盘配额
10、根据/etc/fstab,检查并其它文件系统
11、清理过期的锁和PID文件
/etc/rc.d/init.d /etc/init.d
服务类脚本
start
stop
SysV: /etc/rc.d/init.d
start|stop|restart|status
reload|configtest
脚本中的
# chkconfig: 345 26 74
第一组 runlevels
第二SS start 优先次序
第三KK kill 次序
当chkconfig命令来为此脚本在rc#.d目录创建链接时,
runlevels表示默认创建为S*开头的链接如果为-则表示所有级别,
除此之外的级别默认创建为K*开关的链接
S后面的启动优先级为SS所表示的数字,K后面的优级为KK所表示的数字
# description:
用于说明此脚本的简单功能\,续行
chkconfig命令 updates and queries runlevel information for system services
--list 列出所有独立守护服务的启动设定
先将服务脚本cp到/etc/rc.d/init.d/目录下
chkconfig --add SERVICE_NAME 添加服务链接到/etc/rc.d/rc#.d目录下
chkconfig --add SERVICE_NAME 删除/etc/rc.d/rc#.d目录下的服务链接
chkconfig --level RUNLEVEL SERVICE_NAME {on|off}
如果省略级别指定,默认为2345级别
/etc/rc.local /etc/rc.d/rc.local
系统最后启动的一个服务,准确说,应该执行的最后一个脚本
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
启动终端
/etc/inittab的任务
1.设定默认运行级别
2.运行系统初始化脚本
3.运行指定运行级别对应的目录下的脚本
4.设定Ctrl+Alt+Del组合键的操作
5.定义UPS电源在电源故障、恢复时执行的操作
6.启动虚拟终端(2345)
7.启动图形终端(5)
守护进程的类型
独立守护进程xinetd默认可能未安装,需自行安装 yum install xinetd
xinetd 超级守护进程代理人 需要关联至运行级别
瞬时守护进程:不需要关联至运行级别