• linux:系统启动及内核管理


    Linux组成:

    • kernel(内核):进程管理、内存管理、网路管理、驱动、文件系统、安全功能
    • rootfs:程序和glibc
    • 库:函数集合
    • 程序:二进制执行文件

    内核:

    • linux内核特点:

      模块化:.ko文件(内核对象)。如文件系统,硬件驱动,网络协议等。
      支持内核模块动态的加载和卸载
      
    • 内核组成部分:

      /boot/vmlinuz #压缩内核,二进制文件
      

    CentOS6启动流程:

    1. POST:加电自检BIOS主要功能,负责对硬件检测

      ROM:BIOS
      RAM:保存BIOS设置的各种参数
      
    2. MBR引导:

      MBR:磁盘第一个扇区
      前445字节 记录bootloader程序,bootloader启动后寻找grub.conf配置表,找到内核位置
      中间64字节分区表
      最后2字节 55AA 结束标记位
      
    3. bootloader:引导加载操作系统

      windows:ntloader,仅支持windows os,无法启用linux
      Linux:GRUB,支持多系统,功能强大
      #/boot/grub/grub.conf #记录了内核位置 、及initramfs驱动文件位置
      

      grub.conf配置文件

      # grub.conf generated by anaconda
      #
      # Note that you do not have to rerun grub after making changes to this file
      # NOTICE:  You have a /boot partition.  This means that
      #          all kernel and initrd paths are relative to /boot/, eg.
      #          root (hd0,0)
      #          kernel /vmlinuz-version ro root=/dev/sda2
      #          initrd /initrd-[generic-]version.img
      #boot=/dev/sda
      default=0	#系统内核默认选项	
      timeout=5	#默认选择时间
      splashimage=(hd0,0)/grub/splash.xpm.gz	#背景图片
      passwd --ecrypted  $6$OIfGMYIEaz7KOTMZ$uv63xhWyJZogEpeeVne2wwTP.n7bFnRvMdZOgSTFvckZFrgkd0JjQX2BVYwkQ73GZAEjNQL8hOtv0XJ4XeGi2 	#进入内核选项的密码 --ecrypted为sha512加密,grub-crypt可以生成
      hiddenmenu
      #第一个启动选项
      title CentOS (2.6.32-754.27.1.el6.x86_64)
      	root (hd0,0)	#boot位置,hd0表示第一块磁盘 ,0表示第一个分区
      	kernel /vmlinuz-2.6.32-754.27.1.el6.x86_64 ro root=UUID=5b1aa7f8-0764-408a-8fcf-283908647f3b rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
      	initrd /initramfs-2.6.32-754.27.1.el6.x86_64.img	#内核驱动位置
      #第二个启动选项
      title CentOS 6 (2.6.32-754.el6.x86_64)
      	root (hd0,0)
      	kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=5b1aa7f8-0764-408a-8fcf-283908647f3b rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
      	initrd /initramfs-2.6.32-754.el6.x86_64.img
      
    4. 加载系统内核:/boot/vmlinuz(内核文件)

      自身初始化:
      检测硬件设备
      加载驱动程序(借助ramdisk加载驱动)-->boot/initramfs这个文件
      只读挂载根文件系统
      运行初始化/sbin/init(systemd)——>再从磁盘读取驱动,重新挂载根(可读写)
      

    init程序类型:

    • Sysv:/sbin/init,Centos5之前

      配置文件:/etc/inittab

      id:5:initialization	#设置系统开机运行级别
      si::sysinit:/etc/rc.d/rc.sysinit	#加载系统开机脚本
      l3:3:wait:/etc/rc.d/rc 5  #加载/etc/rc.d/rc脚本,用于启动或关闭服务 ,5表示运行runlevel 5
      
    • Upstart:/sbin/init,Centos6

      配置文件:/etc/inittab,/etc/init/*.conf

    • Systemd:systemd,Centos7

      配置文件:/usr/lib/systemd/system,/etc/systemd/system

    /etc/rc.d/rc.sysinit:初始化系统脚本,由/sbin/init初始化程序调用

    #此脚本只在系统开机时运行一次。
    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:此脚本负责启动或关闭系统服务,将根据系统设置启动级别,加载不同的服务。

    #脚本中引用的服务存放位置/etc/rc.d/
    ls /etc/rc.d/
    init.d/ rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/   #存放着不同运行等级文件夹
    ll /etc/rc.d/rc5.d  #查看运行级别5文件夹下具体内容,
    #看到的是各种服务的软连接
    K01smartd -> ../init.d/smartd   #服务脚本真正存放位置/etc/rc.d/init.d/<serve>
    S05rdma -> ../init.d/rdma
    S99locale -> ../rc.local		#比较特殊,存放在/etc/rc.d/rc.local ,脚本内添加的命令,开机后其他服务全部启动完成,将会运行.centos 7 需要好手动给此脚本添加执行权限
    rc启动脚本将开始以S开头的服务
    

    服务脚本:存放路径 /etc/rc.d/init.d/<serve> ,自定义服务需要使用chkconfig命令,向/etc/rc.d/rc0-6/下添加软连接,添加后,可以支持service <serve> start 这种写法

    以at服务为例格式要求
    #!/bin/sh
    # atd Starts/stop the "at" daemon
    # chkconfig:   345 95 5    #这行必须有,235 表示level 345模式 自启动,95表示自启动S编号 5表示程序关闭K编号
    # description: Runs commands scheduled by the "at" command at the time 	#这个描述也必须有
    #    specified when "at" was run, and runs batch commands when the load 
    #    average is low enough.
    

    调整开机启动服务:

    • ntsysv:一次只能调整一个模式

      ntsysv --level=3	#调整level 3的启动服务
      跳出界面,*表示自启动,按空格取消
      
    • chkconfig:可以同时调整多个level centos7不好用

      #显示服务
      chkconfig --list	#显示多个level 服务自启动状态 list后面可指定服务名
      NetworkManager 	0:off	1:off	2:on	3:on	4:on	5:on	6:off
      abrt-ccpp      	0:off	1:off	2:off	3:on	4:off	5:on	6:off
      abrtd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off
      #设置自启动服务 
      chkconfig --level 35 atd on	#这是3,5运行级  atd服务自启动
      chkconfig --level atd on # 不加运行级,默认设置2345级
      # 添加自定义服务
      chkconfig --add testsry	#自定义服务名。 必须放在/etc/init.d/下
      

    自定义服务脚本示例:vim /etc/rc.d/init.d/testsry.sh (centos6环境)

    #!/bin/bash
    #
    # chkconfig: - 98 3
    #description: test service
    . /etc/init.d/functions	#调用系统函数库 ,主要用action函数,显示服务信息
    # 定义函数
    start(){
    	touch /var/lock/subsys/`basename $0`	#测试用
    	action "starting `basename $0`"
    }
    stop(){
    	rm -f /var/lock/subsys/`basename $0`
    	action "stoping `basename $0`"
    }
    status(){
    	[ -f /var/lock/subsys/`basename $0` ] && echo `basename $0` is running || echo `basename $0 is stoped`
    }
    
    case $1 in
    start)
    	start
    	;;
    stop)
    	stop
    	;;
    restart)
    	stop
    	start
    	;;
    status)
    	status
    	;;
    *)
    	echo "Usage: /etc/init.d/`basename $0` {start|stop|status|restart}"
    esac 
    #脚本结束
    
    #设置自启动
    chkconfig --add testsrv	#加入服务列表
    chkconfig --level testsry on #开启服务
    
    # 后续可以使用 service testsry [start | stop] 控制服务
    

    启动排错:

    1.error 15 : File not found #内核错误,未找到

    修复 /boot/vmlinuz内核
    #进入救援模式,救援开始
    查看原系统挂载目录,默认/mnt/sysimage
    mkdir /mnt/cdrom;mount /dev/sr0 /mnt/cdrom	#挂载修复光盘
    cp /mnt/cdrom/isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz-`uname -r`	#复制内核文件
    保存重启
    

    2.光标一直闪:无法加载文件系统驱动,无法挂载内核

    修复/boot/initramfs 驱动文件
    #进入救援模式,救援开始
    chroot /mnt/sysimage/	   #切换/到,真正磁盘上的/
    mkinitrd /boot/initramfs-`uname -r`.img `uanme -r`	#利用修复工具重新生成驱动文件
    保存重启
    

    3.开机后自动关机或者一直重启:可能系统runlevel错误的被设置为0或者6(centos6)

    3.1当程序显示下面这个界面时,快速按下任意键,进入引导菜单

    3.2进入引导菜单后,按a修改内核参数

    3.3进入内核参数修改界面,输入3进入 runlevel3级(命令行模式)

    3.4成功进入系统后,修改/etc/inittab配置文件

    vim /etc/inittab
    id:3:initdefault:				#找到对应的行,修改
    

    4.系统开机在某个服务卡住不动:

    按住 ctrl+alt+del 重启电脑
    重启后进入单用户模式
    chkconfig 服务名 off #临时关闭当前无法启动的服务 
    

    4.1 如果单用户也无法进入:进入内核修改模式

    #进入内核模式修改模式
    init=/bin/bash
    bash-4.1#	#此事进入bash,根为只读模式,需要重新挂载
    mount -o remount,rw /
    chkconfig --level 123456 服务名 off #关闭服务
    exit	#重新启动
    

    5.重制root密码:

    #centos6
    进入单用户模式
    passwd	#直接修改密码   超级简单。
    
    #centos7
    

    6:启动磁盘mbr被破坏

    #方法1进入救援模式
    bash-4.3# grub #执行grub命令
    grub> root (hd0,0)	#指定boot在哪个硬盘和分区
    grub> setup (hd0)	#重新写入mbr
    quite	#退出grub
    sync	#同步磁盘
    #重启完成
    
    #方法2 grub-install --root-directory=DIR /dev/disk 	#--root-dirctory=/ 是默认选项。
    #进入救援模式
    grub-install /dev/sda
    

    7:修复grub1.5-2.0阶段->默认会进入下图模式

    grub> root (hd0,0)	#boot位置
    grub> setup (hd0)	#修复过了1.5阶段
    grub> kernel /vmlinuz-2.6.32-754.el16.x86_64 root/dev/sda2	#指明内核位置
    grub >initrd /initramfs-2.6.32-754.e16.x86_64.img	#指明驱动文件位置。
    grub > boot
    #系统重新启动 进入系统化
    vim /boot/grub/grub.conf	#重写修复此文件
    

    工具:

    lsmod:查看加载的驱动

    rmmod:卸载模块

    rmmod ext3  #卸载ext3驱动模块
    
  • 相关阅读:
    0001 工作业务问题_滞纳金公式计算区别实例
    001 win10下安装linux子系统--Ubuntu及其图形界面
    Java知识系统回顾整理01基础07类和对象01引用
    Java知识系统回顾整理01基础06数组07数组工具类Arrays
    Java知识系统回顾整理01基础06数组06二维数组
    Vue 框架中添加百度地图组件
    VUE中使用vue.nextTick 报this.nextTick is not a function错误
    VUE 饿了么项目实战 VUE &quot;TypeError: Cannot read property 'deliveryPrice' of undefined&quot;报错
    VUE vue2.0配置webpack.dev.conf.js加载本地json数据
    VUE response.json() 的更新问题
  • 原文地址:https://www.cnblogs.com/franc/p/12587462.html
Copyright © 2020-2023  润新知