Liunx 系统启动和内核管理总结

Liunx系统启动

一、硬件启动流程

(1)、打开电源  
(2)、BIOS:   
1. POST 初始化硬件设备,检查系统外围主要设备(CPU,内存,硬盘,显卡i-o设备,键盘鼠标)  
2.确定启动设备  
    -根据BIOS设置的启动顺序,检测驱动器(硬盘,光盘,U盘,网络)  
    --如果硬盘是启动项,读取硬盘第一个扇区(MBR,512字节)到内存  
    ---控制区转给MBR中的Boot loader  
(3)、MBR 1.执行MBR中Bootloader  
2.MBR由主引导程序,硬盘分区表DPT和有效硬盘标书(55aa,标识是MBR分区)  
3.MBR的BOOt loader含有grub的stage1阶段  

POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测(主板自带的程序功能)  
ROM:BIOS,Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等  
RAM:CMOS互补金属氧化物半导体,保存各项参数的设定  
按次序查找引导设备,第一个有引导程序的设备为本次启动设备  

bootloader: 引导加载器,引导程序(MBR引导)  
windows: ntloader,仅是启动OS  
 Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核  
    LILO:LInux LOader | 早期的版本启动程序  
    GRUB: GRand Unified Bootloader |centos6 0.97 centos7 2.02  
    GRUB 0.X: GRUB Legacy, GRUB2  

二、GRUB启动引导阶段

(1)stage1 包含在MBR的前446字节,但内容不足够起到完整的识别(分区文件系统加载程序等)  
(2)stage1_5 在MBR分区后面,能识别启动分区文件系统是1和2直接的桥梁  
(3)stage2 解析/boot/grub里的grub.conf,显示操作系统启动菜单,加载内核文件到内存,通过/boot/initrd开头文件建立虚拟DAM disk虚拟文件系统转交给内核  

三、内核引导阶段

探测可识别到的所有硬件设备  
加载硬件驱动程序(借助于ramdisk加载驱动)  
以只读方式挂载根文件系统(grub.conf grub.cfg里的root=)  
运行用户空间的第一个应用程序:/sbin/init 用init里面的进程文件初始化,第二次重新挂载  

四、系统初始化阶段

(1)、 读取/etc/inittab 获取用户级别  

(2)、读取/etc/rc.sysinit初始化系统  
        测试与载入内存设备/proc及usb设备、/sys  
        挂载/etc/fstab定义的文件系统  
        加载核心的相关设置,按/etc/sysctl.conf文件设定的内核参数的值(/proc/sys/)   
        将启动相关信息加载到/var/log/dmesg文件中  

(3)、加载系统服务  
        /etc/rc/rc#.d 根据运行级别启动对应/etc/rc/rc#.d目录下的服务,K开机关闭S开机开启centos6 chkconfig centos7 systemctl  
        /etc/local 加载用户自定义服务 一般可以将自己编译的服务放在里面  

五、启动终端
默认执行/sbin/mingetty打开的6个文本终端
验证登陆
1./etc/nologin(可能没有)有则在内的普通用户不可登陆,(usermod -s /sbin/nologin,可能能使用系统资源,/bin/false 则所有服务都不可以用)
2./etc/usertty对文件做出附近访问限制,不存在该文件没有限制
3./etc/securetty 登记的终端才允许使用,没有文件任何终端都可以登陆
4./etc/passwd & /etc/shadow 存放用户信息、密码、使用何种shell

    登陆成功  
    输出 /var/log/lastlog 输出最近一次登陆的信息  
        /var/spool/mail/用户名 邮件存放的地方  
        /etc/profile、.bash_profile、.bash_login、.profile  

安装图形界面默认是5级别的图形桌面  

centos6系统启动和有关文件

Linux内核特点:  
支持模块化:.ko(内核对象)如:文件系统,硬件驱动,网络协议等  
支持内核模块的动态装载和卸载  
内核组成部分:  
核心文件:/boot/vmlinuz-VERSION-release{核心驱动文件}  
            vmlinux-2.6.32-754.e16.x86_64  
ramdisk:辅助的伪根系统  
CentOS 5 /boot/initrd-VERSION-release.img |虚拟磁盘  
CentOS 6,7 /boot/initramfs-VERSION-release.img(一些必要的辅助文件模块驱动放在这里-打包文件-虚拟文件系统)  
initramfs-2.6.32-754.el6.x86_64.img   
模块文件:/lib/modules/VERSION-release(模块化的驱动文件)   
/lib/modules/2.6.32-754.el6.x86_64/kernel/fs  
配置文件 /etc/ld.so.conf.d/kernel-2.6.32-754.el6.x86_64.conf  
locate ext3.ko 搜索模块  

1、先识别系统核心文件放在/boot (不进入/就完成不了后续的行为)2、识别放驱动的文件(/lib/modules) 3、识别加载文件系统的驱动 4、在加载有文件系统的/  5、加载init进程  
此时ramdisk的initramfs-2.6.32-754.el6.x86_64.img文件就存放了加载文件系统的驱动  
文件是装系统临时生成的   

(我这是想看看这个文件有点啥:)
mv initramfs-2.6.32-754.el6.x86_64.img in.img.gz
gunzip initramfs-2.6.32-754.el6.x86_64.img.gz
file initramfs-2.6.32-754.el6.x86_64.img
cpio -id < initramfs-2.6.32-754.el6.x86_64.img(小型的/环境)
centos initrd(硬盘) centos6 initramfs(文件系统) 提高速度

CentOS 6,7 initramfs.img
工具程序:mkinitrd, dracut
ramdisk文件的制作
(1) mkinitrd命令:为当前正在使用的内核重新制作ramdisk文件(脚本调用dracut)
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut命令:为当前正在使用的内核重新制作ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)

实验:破坏此文件 挂光盘救援模式 光盘的isolinux目录下有vmlinuz(不会放图,不想放图,顺便也删除了)
mkinitrd /boot/initranfs-uname -r.img uname -r生成boot下的ramfs文件(可能需要加上force)
mount /dev/sr0 /mnt
cp /mnt/isolinux/vmlinuz /boot/vmlinuz-uname -r
rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.e16.x86_64.rpm --root=/mnt/sysimage/(boot的父目录) --force

内核初始化通过init进程 /etc/inittab 截取了比较重要的部分
17 # Default runlevel. The runlevels used are:
18 # 0 - halt (Do NOT set initdefault to this) 关机
19 # 1 - Single user mode
单用户模式(root自动登录), single, 维护模式 进入单用户模式可以破解root口令
20 # 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
多用户模式,启动网络功能,但不会启动NFS;维护模式
21 # 3 - Full multiuser mode 文本界面
22 # 4 - unused 预留级别;可同3级别
23 # 5 - X11 图形界面
24 # 6 - reboot (Do NOT set initdefault to this)
26 id:5:initdefault:
id:runlevel:action:process
id:是惟一标识该项的字符序列
runlevels: 定义了操作所使用的运行级别
action: 指定了要执行的特定操作
wait: 切换至此级别运行一次
respawn:此process终止,就重新启动之
initdefault:设定默认运行级别;process省略
sysinit:设定系统初始化方式
process:定义了要执行的进程
实验id:6:...设置成6无限重启,在重启的等待界面输入任意键进入一个启动界面选项
根据提示按键(在启动前更改内核参数)输入 a 可以输入0-6启动为什么模式
进入单用户更改用户口令passwd

/etc/rc.d/rc.sysinit: 系统初始化脚本规定了N多的参数,多看看,
si::sysinit:/etc/rc.d/rc.sysinit---centos5里面有这个的初始化脚本的设置

之前的0-6在/etc/rc.d/rc#.d 有一一对应的文件,选择什么则进入什么
每个文件里面都分只有两个开头的文件 K和S,K表式运行此模式时关闭此服务,S相反开启
K: K##:##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务
S: S##:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务
ntsysv命令更改当前运行模式的服务下一次开机的开启和关闭(图形操作)
ntsysv --level=5更改5模式的服务的开机状态

既然这里有服务肯定要学的,这么好的格式,这么重要的东西,我就不写了

chkconfig --add testsrv /var/lock/subssy 观察目录,服务在这里创建对应服务文件
chkconfig命令查看服务在所有级别的启动或关闭设定情形
chkconfig [--list] [name] chkconfig --list
添加:SysV的服务脚本放置于/etc/rc.d/init.d (/etc/init.d)
chkconfig --add name 对应的创建name的rc.d里面的服务文件
#!/bin/bash
#LLLL 表示初始在哪个级别下启动,-表示都不启动
*# chkconfig: LLLL nn nn
chkconfig --del name 删除
修改指定的链接类型
chkconfig [--level levels] name
--level LLLL: 指定要设置的级别;省略时表示2345
chkconfig --level 345 atd on/off 定义下次开启还是关闭
chkconfig atd on 默认更改2-5
yum install atd;sercvice atd start;chkconfig atd on;配置服务开启
实验,某个服务出错
ctrl + alt + delete 重启,任意键进入 进入单用户模式 将出错的服务关闭
chkconfig testsrv on (/etc/inittab这个文件centos5是比较完整的,最好了解下这个好)

写到这里想起来 6的/etc/inittab里面注释的说明很重要,说了很多信息

xinetd管理的服务(服务那么多,这个就很实在了)
service 命令:手动管理服务
service 服务 start|stop|restart
service --status-all 列出所有服务的状态
瞬态(Transient)服务(非独立服务)被xinetd进程所管理(超级守护进程)
进入的请求首先被xinetd代理
配置文件:/etc/xinetd.conf、/etc/xinetd.d/(里面是代理的服务)
与libwrap.so文件链接
用chkconfig控制的服务:
示例:chkconfig tftp on
telnet非独立服务被xinetd监控 安装yum install telnet
lsof -i :23 centos7 systemctl 代替了xinetd
xinetd默认装好的程序里面的是off状态,手动开启
修改/etc/xinted.d/telnet 里的disable=no 可以被激活状态
service xinetd start ss -ntlp
telnet 192.168.60.149 ss -nt
chkconfig telnet of

注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本
不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中
东西过多,好好学吧

grub: GRand Unified Bootloader
grub 0.97: grub legacy(老的版本)
grub 2.x: grub2
grub legacy:
stage1: mbr (/boot/grup/stage1这里有备份)
stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
stage2:磁盘分区(/boot/grub/)
grub安装支持交互式命令方式
(1) grub-install
安装grub stage1和stage1_5到/dev/DISK磁盘上,并复制GRUB相关文件到 DIR/boot目录下
grub-install --root-directory=DIR /dev/DISK 修复MBR512

grup-install /dev/sda (grup.conf里的图片无法修复)
这里/boot/grub/grub.conf文件很重要 其他文件上面的命令都可以恢复,这个问价要手写
这是里面内容,6结束
1 # grub.conf generated by anaconda
3 # Note that you do not have to rerun grub after making changes to this file
4 # NOTICE: You have a /boot partition. This means that
5 # all kernel and initrd paths are relative to /boot/, eg.
6 # root (hd0,0)
7 # kernel /vmlinuz-version ro root=/dev/sda2
8 # initrd /initrd-[generic-]version.img
9 #boot=/dev/sda
10 default=0
11 timeout=5
12 splashimage=(hd0,0)/grub/splash.xpm.gz
13 hiddenmenu
14 title CentOS 6 (2.6.32-754.el6.x86_64)
15 root (hd0,0)
16 kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=f279775c-e233-4f26-b7ab-118dfe992d 2c rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=a uto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
17 initrd /initramfs-2.6.32-754.el6.x86_64.img
里面可以加 passwd 选项对单用户模式起到保护作用
grub加密生成grub口令
grub-md5-crypt 里面有salt(盐)输入相同口令出来的结果不一样
grub-crypt