centos启动和内核管理
2020-12-24 01:42:59 17 举报
AI智能生成
linux启动流程和内核管理
作者其他创作
大纲/内容
centos启动和内核管理
linux系统的组成部分
内核+文件系统
内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全管理
运行中的系统环境分两层
内核空间
内核代码(系统调用)
应用程序(进程或线程)
内核设计流派
微内核
windows 鸿蒙代表
单内核
把所有功能集成于同一个应用程序
linux为代表 不过linux也支持内核功能模块化了
linux内核特点
支持模块化
支持模块运行时动态装载或卸载
编译内核
[ ]:N\t\t\t\t\t[M]:Module \t\t\t\t\t[*]:Y,编译进内核核心
组成部分:
内核核心文件
/boot/vmlinuz-`uname -r`
ramdisk
centos5
/boot/initrd-`uname -r`
centos6 7
/boot/initramfs-`uname -r`
ramdisk是辅助文件 并非是必须的。
这取决于内核是否能直接驱动rootfs所在的设备;目标设备驱动,例如SCSI设备的驱动;\t\t\t\t\t逻辑设备驱动,例如LVM设备的驱动;\t\t\t\t\t文件系统,例如xfs文件系统; \t\t\t\t\t\t\t\t\t\tramdisk:是一个简装版的根文件系统;目的是为了加载grub stage2阶段的内核
内核模块文件
/lib/modules/`uname -r`
内核管理
ramdisk文件的管理:\t\t\t(1) mkinitrd命令\t\t\t\t为当前使用中的内核重新制作ramdisk文件:\t\t\t\t\t# mkinitrd [OPTION...] [<initrd-image>] <kernel-version>\t\t\t\t\t\t--with=<module>:除了默认的模块之外需要装载至initramfs中的模块;\t\t\t\t\t\t--preload=<module>:initramfs所提供的模块需要预先装载的模块;\t\t\t\t\t\t\t\t\t\t示例: ~]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)\t\t\t\t\t\t(2) dracut命令\t\t\t\t - low-level tool for generating an initramfs image\t\t\t\t\t# dracut [OPTION...] [<image> [<kernel version>]]\t\t\t\t\t\t\t\t\t\t示例: ~]# dracut /boot/initramfs-$(uname -r).img $(uname -r)
命令:
lsmod命令:\t\t\t\t- Show the status of modules in the Linux Kernel\t\t\t\t\t\t\t\t显示的内核来自于/proc/modules
modinfo命令:- Show information about a Linux Kernel modulemodinfo [-F field] [-k kernel] [modulename|filename...]-F field: 仅显示指定字段的信息;-n:显示文件路径;
modprobe命令:\t\t\t\t- Add and remove modules from the Linux Kernel\t\t\t\t\t\t\t\t格式:modprobe [-r] module_name\t\t\t\t\t模块的动态装载:modprobe module_name\t\t\t\t\t动态卸载:modprobe -r module_name
depmod命令:\t\t\t\t- Generate modules.dep and map files.\t\t\t\t\t\t\t\t内核模块依赖关系文件的生成工具;
模块的装载和卸载的另一组命令:\t\t\t\tinsmod命令:\t\t\t\t\tinsmod [filename] [module options...]\t\t\t\t\t\tfilename:模块文件的文件路径;\t\t\t\t\t\t\t\t\trmmod命令:\t\t\t\t\trmmod [module_name]
/proc 内核信息输出的伪文件系统
临时配置/proc/sys下的设置
读取
sysctl path.to.parameter
~]# sysctl net.ipv4.icmp_echo_ignore_allnet.ipv4.icmp_echo_ignore_all = 1
写入
sysctl -w path.to.parameter=VALUE
sysctl -w net.ipv4.icmp.echo_ignore_all=1
echo 1|0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
永久写入文件sysctl -p 配置文件读取配置文件并立即生效
/etc/sysctl.conf
推荐 /etc/sysctl.d/*.conf
/etc/sysctl.d/*.conf/usr/local/lib/sysctl.d/*.conf/usr/lib/sysctl.d/*.conf/lib/sysctl.d/*.conf
常用的内核参数
net.ipv4.icmp_echo_ignore_all
1禁ping
0允许ping
net.ipv4.ip_forward
1开启内核路由转发功能
0关闭内核路由转发功能
net.ipv4.ip_nonlocal_bind
允许应用层序监听本地不存在的ip。常用于监听VIP 即virtual IP 虚拟IP。
fs.file-max = 1020000\t\t\t\t\t
允许打开的最大文件,其实这些都要根据别的参数来调整 即木桶短板效应
vm.drop_caches
centos系统启动流程
硬件启动阶段
BIOS加电自检
POST:power on self test
检测CPU Memory IO设备 主板等是否正常 否则不予启动
Boot sequence
选择启动方式:硬盘、光盘、网络、U盘
grub启动阶段
写在grub之前:bootloader概念
引导启动器,程序
windows:ntbootloader
linux:
LILO:LIinux LOader\t\t\t\t\t\tGRUB:Grand Uniform Bootloader\t\t\t\t\t\t\tGRUB 0.X:Grub Legacy\t\t\t\t\t\t\tGRUB 1.X:Grub2
功能
提供一个菜单,供用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核;
linux的bootloader:grub
stage1
MBR扇区的前446字节bootloader
what is MBR:master Boot record
前446字节:bootloader
64字节:分区信息
2字节:55AA标志位,表示分区是否有效
stage1.5
partition filesystem dirver 分区文件系统驱动
位于MBR第一个扇区之后的扇区,目的让stage1中的bootloader能识别stage2所在的分区上的文件系统;
stage2
/boot/grub 目录下文件grub.conf
stage2及内核等通常放置于一个基本磁盘分区;
功用
提供菜单,供用户选择需要启动的内核版本或操作系统
提供菜单、并提供交互式接口
e: 编辑模式,用于编辑菜单;
c: 命令模式,交互式接口;
为菜单提供了保护机制
为编辑菜单进行认证\t\t\t\t\t为启用内核或操作系统进行认证
解析/boot/grub/grub.conf
a内核参数
e编辑模式用于编辑菜单
c命令模式,交互式接口
设置等待秒数
加载内核镜像到内存
为菜单提供了保护机制,为编辑启动菜单进行认证为启用内核或操作系统进行认证
通过/boot/initrd开头文件建立虚拟文件系统
转交控制权给内核
内核kernel
内核自身初始化
探测可识别的所有硬件设备
加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)
以只读方式挂载根文件系统;
运行用户空间的第一个应用程序:/sbin/init
init程序类型
centos5 sysvinit
配置文件:/etc/inittab
运行级别runlevel
0关机
1单用户模式root用户,无需密码认证,维护模式
2多用户模式 会启动网络 但不会启动NFS 维护模式
3多用户模式 文本界面
4多用户模式 保留 目前没有使用 等待自定义
5多用户模式 图形界面
6重启
默认级别:3,5
级别切换
init #
centos6 upstart
配置文件:/etc/inittab\t\t\t\t\t\t\t/etc/init/*.conf
centos7 systemd
/lib/systemd/system/
Linux内核的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问;
ramdisk --> ramfs
CentOS 5: initrd
工具程序: mkinitrd
总结:系统启动流程:
开机
BIOS加电自检POST
BootSequence(BIOS)
Bootloader(MBR446byte)
kernel ramdisk
rootfs (readonly)
/sbin/init
systemd
系统初始化阶段
系统初始化脚本功能/etc/rc.d/rc.sysinit
(1) 设置主机名(2) 设置欢迎信息(3) 激活udev和selinux (4) 挂载/etc/fstab文件中定义的文件系统(5) 检测根文件系统,并以读写方式重新挂载根文件系统(6) 设置系统时钟(7) 激活swap设备(8) 根据/etc/sysctl.conf文件设置内核参数(9) 激活lvm及software raid设备(10)加载额外设备的驱动程序(11)清理操作
根据运行级别,加载系统服务
/etc/rc.d/rc
for srv in /etc/rc.d/rcN.d/K*; do$srv stopdonefor srv in /etc/rc.d/rcN.d/S*; do$srv startdone
加载系统服务:定义/etc/rcN.d/下所有文件 其实是/etc/init.d/下脚本文件的软链接
S开头文件:要启动的服务(脚本),从01开始启动,数字越小越优先启动
K开头的文件:要停止的服务(脚本),从01开始关闭,数字越小越优先关闭
用户自定义服务:/etc/rcN.d/下rc.local文件
centos6有执行权限 用户自定义服务可以写在里面 而不用写# chkconfig: 345 9 1 这样的备注
centos7 8没有执行权限 用户自定义服务可以写在里面 而不用写# chkconfig: 345 9 1 这样的备注
chkconfig
chkconfig --list查看系统自启动服务
chkconfig --add servicename
能够被添加为服务的服务文件格式:位于/etc/init.d下
#!/bin/bash\t\t\t\t\t\t\t\t\t\t\t\t#\t\t\t\t\t\t\t\t\t\t\t\t# chkconfig: LLL NN NN\t\t\t\t\t\t\t\t\t\t\t\t# description:
chkconfig --del servicename
总结:用户空间的启动流程
/sbin/init(/etc/inittab)
设置默认运行级别
运行系统初始化脚本 完成系统初始化
关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务
设置登录终端 [--> 启动图形终端]
所有服务串行启动
第一个启动的进程依然是/sbin/init,/etc/inittab仅仅定义启动级别
配置文件/etc/init/*.conf
无依赖关系的服务之间并行启动,有依赖关系的服务串行启动
systemd为第一个进程,/etc/inittab默认不起作用。
配置文件/lib/systemd/system/
systemctl {start|stop|restart|status}
所有服务并行启动
启动终端
/sbin/mingetty打开六个纯文本终端
验证登陆
/etc/nologin
在此文件中用户不允许登陆
/etc/passwd /etc/shadow 验证密码和shell和家目录
登陆成功
加载环境变量
屏幕输出
/var/spool/mail 查新邮件
/var/log/lastlog输出最后一次登陆信息
0 条评论
回复 删除
下一页