zoukankan      html  css  js  c++  java
  • 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驱动模块
    
  • 相关阅读:
    Dynamics AX 2012 R2 配置E-Mail模板
    Dynamics AX 2012 R2 设置E-Mail
    Dynamics AX 2012 R2 为运行失败的批处理任务设置预警
    Dynamics AX 2012 R2 耗尽用户
    Dynamics AX 2012 R2 创建一个专用的批处理服务器
    Dynamics AX 2012 R2 创建一个带有负载均衡的服务器集群
    Dynamics AX 2012 R2 安装额外的AOS
    Dynamics AX 2012 R2 将系统用户账号连接到工作人员记录
    Dynamics AX 2012 R2 从代码中调用SSRS Report
    Dynamics AX 2012 R2 IIS WebSite Unauthorized 401
  • 原文地址:https://www.cnblogs.com/franc/p/12587462.html
Copyright © 2011-2022 走看看