centos启动和内核管理
2020-12-24 01:42:59 17 举报
AI智能生成
linux启动流程和内核管理
作者其他创作
大纲/内容
linux系统的组成部分
内核+文件系统
内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全管理
运行中的系统环境分两层
内核空间
内核代码(系统调用)
应用程序(进程或线程)
内核设计流派
微内核
windows 鸿蒙代表
单内核
把所有功能集成于同一个应用程序
linux为代表 不过linux也支持内核功能模块化了
linux内核特点
支持模块化
支持模块运行时动态装载或卸载
编译内核
[ ]:N
[M]:Module
[*]:Y,编译进内核核心
[M]:Module
[*]:Y,编译进内核核心
组成部分:
内核核心文件
/boot/vmlinuz-`uname -r`
ramdisk
centos5
/boot/initrd-`uname -r`
centos6 7
/boot/initramfs-`uname -r`
ramdisk是辅助文件 并非是必须的。
这取决于内核是否能直接驱动rootfs所在的设备;目标设备驱动,例如SCSI设备的驱动;
逻辑设备驱动,例如LVM设备的驱动;
文件系统,例如xfs文件系统;
ramdisk:是一个简装版的根文件系统;目的是为了加载grub stage2阶段的内核
逻辑设备驱动,例如LVM设备的驱动;
文件系统,例如xfs文件系统;
ramdisk:是一个简装版的根文件系统;目的是为了加载grub stage2阶段的内核
内核模块文件
/lib/modules/`uname -r`
内核管理
组成部分:
内核核心文件
/boot/vmlinuz-`uname -r`
ramdisk
centos5
/boot/initrd-`uname -r`
centos6 7
/boot/initramfs-`uname -r`
ramdisk是辅助文件 并非是必须的。
这取决于内核是否能直接驱动rootfs所在的设备;目标设备驱动,例如SCSI设备的驱动;
逻辑设备驱动,例如LVM设备的驱动;
文件系统,例如xfs文件系统;
ramdisk:是一个简装版的根文件系统;目的是为了加载grub stage2阶段的内核
逻辑设备驱动,例如LVM设备的驱动;
文件系统,例如xfs文件系统;
ramdisk:是一个简装版的根文件系统;目的是为了加载grub stage2阶段的内核
ramdisk文件的管理:
(1) mkinitrd命令
为当前使用中的内核重新制作ramdisk文件:
# mkinitrd [OPTION...] [<initrd-image>] <kernel-version>
--with=<module>:除了默认的模块之外需要装载至initramfs中的模块;
--preload=<module>:initramfs所提供的模块需要预先装载的模块;
示例: ~]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut命令
- low-level tool for generating an initramfs image
# dracut [OPTION...] [<image> [<kernel version>]]
示例: ~]# dracut /boot/initramfs-$(uname -r).img $(uname -r)
(1) mkinitrd命令
为当前使用中的内核重新制作ramdisk文件:
# mkinitrd [OPTION...] [<initrd-image>] <kernel-version>
--with=<module>:除了默认的模块之外需要装载至initramfs中的模块;
--preload=<module>:initramfs所提供的模块需要预先装载的模块;
示例: ~]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut命令
- low-level tool for generating an initramfs image
# dracut [OPTION...] [<image> [<kernel version>]]
示例: ~]# dracut /boot/initramfs-$(uname -r).img $(uname -r)
内核模块文件
/lib/modules/`uname -r`
命令:
lsmod命令:
- Show the status of modules in the Linux Kernel
显示的内核来自于/proc/modules
- Show the status of modules in the Linux Kernel
显示的内核来自于/proc/modules
modinfo命令:
- Show information about a Linux Kernel module
modinfo [-F field] [-k kernel] [modulename|filename...]
-F field: 仅显示指定字段的信息;
-n:显示文件路径;
- Show information about a Linux Kernel module
modinfo [-F field] [-k kernel] [modulename|filename...]
-F field: 仅显示指定字段的信息;
-n:显示文件路径;
modprobe命令:
- Add and remove modules from the Linux Kernel
格式:modprobe [-r] module_name
模块的动态装载:modprobe module_name
动态卸载:modprobe -r module_name
- Add and remove modules from the Linux Kernel
格式:modprobe [-r] module_name
模块的动态装载:modprobe module_name
动态卸载:modprobe -r module_name
depmod命令:
- Generate modules.dep and map files.
内核模块依赖关系文件的生成工具;
- Generate modules.dep and map files.
内核模块依赖关系文件的生成工具;
模块的装载和卸载的另一组命令:
insmod命令:
insmod [filename] [module options...]
filename:模块文件的文件路径;
rmmod命令:
rmmod [module_name]
insmod命令:
insmod [filename] [module options...]
filename:模块文件的文件路径;
rmmod命令:
rmmod [module_name]
/proc 内核信息输出的伪文件系统
临时配置/proc/sys下的设置
读取
sysctl path.to.parameter
~]# sysctl net.ipv4.icmp_echo_ignore_all
net.ipv4.icmp_echo_ignore_all = 1
net.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 配置文件
读取配置文件并立即生效
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
/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
允许打开的最大文件,其实这些都要根据别的参数来调整 即木桶短板效应
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
GRUB:Grand Uniform Bootloader
GRUB 0.X:Grub Legacy
GRUB 1.X:Grub2
GRUB:Grand Uniform Bootloader
GRUB 0.X:Grub Legacy
GRUB 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: 命令模式,交互式接口;
为菜单提供了保护机制
为编辑菜单进行认证
为启用内核或操作系统进行认证
为启用内核或操作系统进行认证
解析/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
/etc/init/*.conf
/etc/init/*.conf
centos7 systemd
/lib/systemd/system/
ramdisk
Linux内核的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问;
ramdisk --> ramfs
CentOS 5: initrd
工具程序: mkinitrd
CentOS 6,7: initramfs
工具程序:dracut, mkinitrd
总结:系统启动流程:
开机
BIOS加电自检POST
BootSequence(BIOS)
Bootloader(MBR446byte)
kernel ramdisk
rootfs (readonly)
/sbin/init
systemd
系统初始化阶段
centos5 sysvinit
配置文件:/etc/inittab
运行级别runlevel
0关机
1单用户模式root用户,无需密码认证,维护模式
2多用户模式 会启动网络 但不会启动NFS 维护模式
3多用户模式 文本界面
4多用户模式 保留 目前没有使用 等待自定义
5多用户模式 图形界面
6重启
默认级别:3,5
级别切换
init #
系统初始化脚本功能/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)清理操作
(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 stop
done
for srv in /etc/rc.d/rcN.d/S*; do
$srv start
done
$srv stop
done
for srv in /etc/rc.d/rcN.d/S*; do
$srv start
done
加载系统服务:定义/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
#
# chkconfig: LLL NN NN
# description:
#
# chkconfig: LLL NN NN
# description:
chkconfig --del servicename
总结:用户空间的启动流程
/sbin/init(/etc/inittab)
设置默认运行级别
运行系统初始化脚本 完成系统初始化
关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务
设置登录终端 [--> 启动图形终端]
所有服务串行启动
centos6 upstart
第一个启动的进程依然是/sbin/init,/etc/inittab仅仅定义启动级别
配置文件/etc/init/*.conf
无依赖关系的服务之间并行启动,有依赖关系的服务串行启动
centos7 systemd
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 条评论
下一页