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 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 