#24 centos6(RHEL)系列操作系统的启动流程、与命令chkconfig、grub的使用

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

            所有由rc脚本关闭或启动的链接文件的原文件都存在于/etc/rc.d/init.d,系统为了方便使用,为此目录创建了链接/etc/init.d


            所有/etc/inid.d(/etc/rc.d/init.d)目录中的脚本执行方式:

              # /etc/init.d/srv_script {start|stop|restart|status}

              # service srv_script {start|stop|restart|status}


            chkconfig命令:

              chkconfig - updates and queries runlevel information for system services

              查看系统服务相关运行级别下的运行状态;

                chkconfig [--list] [name]


              管理系统服务在/etc/rc.d/rc#.d/目录下的服务脚本的链接:

                chkconfig --add name

                chkconfig --del name

                为了能够让chkconfig命令管理系统服务的脚本的链接,每个脚本中都必须有这样的格式;

                  # chkconfig:2345 90 60

                    2345:在哪个运行级别下,此服务是自动启动状态;也就是说,在对应的运行级别的rc#.d目录中,是以S开头的文件;如果该位置为“-”,则表示所有运行级别都是为K开头的;

                    90:如果在某个运行级别下为开启状态,该数字为S后面的优先级数字

                    60:如果在某个运行级别下为停止状态,该数字为K后面的优先级数字

                  # description:对于此系统服务的摘要性描述信息;

              

              单独设置指定运行级别下系统服务的摘要性描述信息:

                chkconfig [--level levels]  name <on|off|reset>


              /etc/rc.d/rc.local脚本:

                是init程序在引导用户空间进程启动的过程中,所执行的最后一个脚本;因为,不便于或不需要写在系统服务相关的脚本中的内容但又期望可以开机即运行的功能,可以直接写在此脚本中;           

     

              rc.local脚本:

                是init程序在引导用户空间进程启动的过程中,所执行的最后一个脚本;因为,不便于或不需要写在系统服务相关的脚本中的内容但又期望可以开机即运行的功能,可以直接写在脚本中;


                # Run gettys in standard runlevels

                1:2345:respawn:/sbin/mingetty tty1

                2:2345:respawn:/sbin/mingetty tty2

                3:2345:respawn:/sbin/mingetty tty3

                4:2345:respawn:/sbin/mingetty tty4

                5:2345:respawn:/sbin/mingetty tty5

                6:2345:respawn:/sbin/mingetty tty6

                           

              6


              mingetty会调用login程序,打开虚拟终点;除了mingetty之外,诸如getty之类的程序也可以生成虚拟终端控制台;


              如果默认的运行级别时5,则我们需要/etc/x11/prefdm脚本打开图形界面终点:

                X6R11 - X Version 6 Release 11


  小结:(用户空间的启动流程),/sbin/init

    /sbin/init --> /etc/inittab -->设置默认运行级别 --> /etc/rc.d/rc.sysinit脚本,完成系统初始化 --> 关闭那些对应运行级别下需要停止的服务,启动那些对应运行级别下需要开启的服务 --> Ctrl+Alt+del热键功能 --> UPS电源的失效与恢复之后的操作 --> 生成终端[启动图形界面]


centos 6:

  init程序:upstart,其应用程序依然是/sbin/init,其配置文件;

    /etc/inittab:仅仅只是用于定义默认运行级别;

    /etc/init/*.conf:

      rcS.conf:执行系统初始化脚本的任务;

      rc.conf:执行根据运行级别关闭或开启系统服务的任务;

      start-ttys.conf:执行打开终端相关的任务;

      prefdm.conf:执行大小图清洁棉的任务;


    upstart机制:基于事件驱动的程序管理模型;driven-envet


centos 6 系统启动流程:

  post --> bootsequence(BIOS)--> BootLoader --> kernel [-->ramfs] -->rootfs(ro)--> /sbin/init -->设置默认级别 --> 系统初始化 --> 可以并行执行Ctrl+Alt+del热键功能定义,系统服务器的开启和关闭,电源管理,dubs管理等 --> 登录提示符


centos 7:

  inIT程序:systemd,与经典的init程序完全不同;其配置文件;

    /etc/systemd/system/*

    /usr/lib/systemd/system/*:systemdd 的unit文件;


    /etc/inittab:彻底被废弃;


    systemd完全兼容sysV风格的inIT程序及其脚本;因为service类的命令在centos7中依然可用;但是,建议使用centos7标配的systemctl命令来控制和管理系统服务;


    systemctl命令:

      systemctl - Control the systemd system and service manager

      systemctl [OPTIONS...] COMMAND [NAME...]


    使用systemctl管理服务的一般方式:

      systemctl {start|stop|restart|status} name[.service]


    设置centos 7的默认运行级别:

      ~]# systemctl get-default {multi-user.target | graphical.targer}


     查看centos 7的默认运行级别:

      ~]# systemctl get-default 


总结:

  post --> bootsequence --> BootLoader --> kernel --> rootfs --> init


  grub:legacy:

    1st stage:stage1,MBR的前446bytes;

    1.5 stage:MBR之后的若干个扇区中;让stage1中的BootLoader程序能够识别stage所在的分区的文件系统;

    2nd stage:stage2,磁盘的启动分区,

      注意:stage2及内核核心文件必须放置在同一个基本磁盘分区上;


      stage2提供的功能:

        1.加载操作系统内核核心文件;

        2.提供一个菜单和交互式接口;

        3.允许用户编辑菜单内容;

        4.命令行接口操作模式;

        5.身份认证机制,以保证菜单编辑和内核启动的安全;


      grub的命令行界面:

        grub>


        grub的命令行界面中的常用命令:

          help:获取所有的grub命令的名称列表和简要使用方法;

          help grub_cmd: 显示特定命令的详细帮助信息;

          root (hd#,#):将指定磁盘的制定分区作为grub程序的根设备;

            hd#:磁盘编号,#一般是从0开始的数字;如hd0表示第一块磁盘;

            #:分区编号,#一般是从0开始的数字,如0表示第一个分区;


            (hd0,0):当前计算机上的第一块磁盘的第一个分区;

          find (hd#,#):从指定的分区中搜索文件,并显示出文件所在位置;

          kernel /path/to/kernel_core_file:设定本次启动时用到的内核文件的绝对路径;额外还可以在kernel命令中,为内核启动添加更多的内核参数;

            ro root=/dev/sda3 selinux=0 init=/sbin/init quiet rhgb {1|s|S|single}

          initrd /path/to/initramfs-version-release.img


    grub的配置文件:

      /boot/grub/grub.conf  <--  /etc/grub.conf          

default=0

  设定默认启动菜单项;整个菜单中的所有的title是从0开始编号的;

timeout=5

  用户未做出选择时,grub会自动引导默认菜单对应的内核的超时时间;

splashimage=(hd0,0)/grub/splash.xpm.gz

  grub的北京图片对应的路径;

hiddenmenu

  隐藏菜单

password --md5 CRYPTED_PASSWORD

  为了保护菜单设置的密码,通常用于防止随意进入单用户模式;

title CentOS 6 (2.6.32-573.el6.x86_64)

  定义菜单项中的各个“标题”,可以定义多个title项;至少有一项;

        root (hd0,0)

          指定grub的根设备,通常是用来安装grub的那个分区;

        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=4e82764c-11aa-4e68-9f3a-1a821f5db868 nomodeset rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet

          该菜单对应的要启动的内核及传递给内核的各个参数;

        initrd /initramfs-2.6.32-573.el6.x86_64.img

          内核所对应的ramdisk(ramfs)文件

        password --md5 CRYPTED_PASSWORD

          保护操作系统内核的启动;


  自制小Linux:

    1.在某个正常运行的centos里添加一块硬盘;

    2.对硬盘分区,创建相应的文件系统,并挂载(/mnt/root,/mnt/sysroot);

    3.安装grub程序,

      # grub-install --root-directory=/mnt(boot的父目录)/dev/sdb

    4.为小Linux的根分区创建目录层级结构;mkdir -pv /mnt/sysroot/{bin,boot,dev,etc,lib,lib64,proc,sys,mnt,media,tmp,var,usr,sbin}

    5.复制内核文件及ramdisk文件到目标系统的启动分区;

      # cp /boot/vmlinuz-version-release /mnt/boot

      # cp /boot/initramfs-version-release.img /mnt/boot

    6.给grub提供配置文件:

      default=0

      timeout=10

      title mylinux (1.0.0)

        root (hd0,0)

        kernel /vmlinuz-version-release ro root=/dev/sda3 selinux=0 init=/bin/bash

        initrd /initramfs-version-release.img

    7.将/bin/bash及其共享库文件,复制到/mnt/sysroot下对应的目录中;除此之外,还可以复制其他的各应用程序及相应的共享库文件;

    8.多执行几次sync命令,使得内存中缓存或缓冲的数据被保存到磁盘上;

    9.新建虚拟机,将小硬盘作为新虚拟机的硬盘使用;将宿主系统挂机之后,再启动小Linux即可;    

  

    小实验:

      破坏grub,在重启之前可以使用下列方法恢复;

        1.# grub-install --root-directory=/ /dev/sda

        2.# grub

          grub> root (hd0,0)

          grub> setup (hd0)

          grub> quit

          #


      破坏grub或者grub。conf配置文件,重启之后无法正确引导内核;可以使用光盘或U盘等其他的引导设备将系统引导起来,并进入rescue模式,其他操作方法如上。


post --> bootsequence(BIOS) --> BootLoader(grub,mbr-stage1) --> stage1.5 --> stage2 --> kernel --> init


  chkconfig:检查、设置系统的各种服务。这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。

    选项:

      --add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据; 

      --del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据; 

      --level<等级代号>:指定读系统服务要在哪一个执行等级中开启或关毕。

    等级代号列表: 

      等级0表示:表示关机 

      等级1表示:单用户模式 

      等级2表示:无网络连接的多用户命令行模式 

      等级3表示:有网络连接的多用户命令行模式 

      等级4表示:不可用 

      等级5表示:带图形界面的多用户模式 

      等级6表示:重新启动

    例子:

      chkconfig --list(列出所有的系统服务。)

      chkconfig --add httpd(增加httpd服务。)

      chkconfig --del httpd(删除httpd服务。)

      chkconfig --level httpd 2345 on(设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态。) 

      chkconfig --list(列出系统所有的服务启动情况。)

      chkconfig --list mysqld(列出mysqld服务设置情况。)

      chkconfig --level 35 mysqld on(设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭。)

      chkconfig mysqld on(设定mysqld在各等级为on,“各等级”包括2、3、4、5等级。)


  grub:多重引导程序grub的命令行shell工具。

    选项:

      --batch:打开批处理模式; 

      --boot-drive=<驱动器>:指定stage2的引导驱动器; 

      --config-file<配置文件>:指定stage2的配置文件; 

      --device-map=<文件>:指定设备的映射文件; 

      --help:显示帮助信息; 

      --install-partition=<分区>:指定stage2安装分区; 

      --no-config-file:不使用配置文件; 

      --no-pager:不使用内部分页器; 

      --preset-menu:使用预设菜单; 

      --probe-second-floppy:检测第二个软盘驱动器; 

      --read-only:只读模式。

    例子:

      root (hd0,1)(假设 /dev/hda2 是你的 /boot 所在的分区 */)

      kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3(假设 /dev/hda3 是你的 / 所在的分区 */) 

      initrd /boot/initrd.img-2.6.15-26-386 

      boot


本文转自谁等了谁 51CTO博客,原文链接:http://blog.51cto.com/12486569/1952152

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
Linux 网络安全
Centos 防火墙端口控制命令
Centos 防火墙端口控制命令
29 3
|
1月前
|
Linux 网络安全 数据安全/隐私保护
如何在 VM 虚拟机中安装 CentOS Linux 9 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 CentOS Linux 9 操作系统保姆级教程(附链接)
168 0
|
2月前
|
Java Linux BI
使用 ABAP 在 SAPGUI 里直接执行 Linux 操作系统的命令
使用 ABAP 在 SAPGUI 里直接执行 Linux 操作系统的命令
31 0
使用 ABAP 在 SAPGUI 里直接执行 Linux 操作系统的命令
|
4月前
|
Prometheus Kubernetes 监控
云原生|kubernetes |使用Prometheus监控k8s cAdvisor篇(进阶篇--- 一)(centos操作系统)
云原生|kubernetes |使用Prometheus监控k8s cAdvisor篇(进阶篇--- 一)(centos操作系统)
402 0
|
16天前
|
网络协议 应用服务中间件 Linux
centos7 Nginx Log日志统计分析 常用命令
centos7 Nginx Log日志统计分析 常用命令
29 2
|
1月前
|
存储 Shell Linux
【Shell 命令集合 网络通讯 】⭐Linux 显示当前系统的主机名和操作系统类型 uuname命令 使用教程
【Shell 命令集合 网络通讯 】⭐Linux 显示当前系统的主机名和操作系统类型 uuname命令 使用教程
29 0
|
1月前
|
监控 网络协议 Linux
Linux 命令大全 & CentOS常用运维命令
Linux 命令大全 & CentOS常用运维命令
154 0
|
1月前
|
关系型数据库 MySQL 数据库
虚拟机Linux-Centos系统网络配置常用命令+Docker 的常用命令
虚拟机Linux-Centos系统网络配置常用命令+Docker 的常用命令
43 0
|
1月前
|
监控 算法 Linux
Linux 操作系统常用命令与操作指南
本文将为大家介绍Linux操作系统中的常用命令和操作。这些命令对于初学者和Linux用户都非常重要,掌握它们将大大提高在Linux环境下的工作效率。
62 0
|
3月前
|
存储 数据挖掘 Linux
服务器数据恢复—CentOS7操作系统服务器数据恢复案例
服务器数据恢复环境: 某品牌PowerEdge R730服务器+PowerVault MD3200存储,划分若干lun,操作系统版本是centos7,EXT4文件系统。 服务器故障&分析: 服务器在运行过程中自动关机且无法启动,服务器管理员对服务器进行修复后成功启动服务器,但服务器上原来的某个分区无法挂载。管理员将无法挂载的分区进行fsck修复&挂载,查看这个分区的数据发现部分文件丢失。