Linux的引导过程与服务控制

眼前多少难甘事,自古男儿当自强。这篇文章主要讲述Linux的引导过程与服务控制相关的知识,希望能为你提供帮助。
@TOC
Linux引导过程与服务控制 Linux操作系统引导过程 引导过程总览(简)

  • 开机自检(Bios)
    服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
    ==总结:检查硬件设备,检测出第一个能够引导系统的设备,比如硬盘或者光驱==
  • MBR引导
    当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单(如GRUB) 。
    ==总结:运行放在MBR扇区里的启动GRUB引导程序==
  • GRUB菜单
    对于Linux操作系统来说,GRUB(统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值〉加载Linux内核文件,然后将系统控制权转交给内核。
    CentOS 7采用的是GRUB2启动引导器。
    ==总结: GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置==
  • 加载Linux内核
    Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。
    Centos 7系统中,默认的内核文件位于" /boot/vmlinuz-3.10.0-514.el7.x86_64" 。
    ==总结:把内核和镜像文件系统加载到内存中==
  • init进程初始化
    为了完成进一步的系统引导过程,Linux内核首先将系统中的" /sbin/init" 程序加载到内存中运行(运行中的程序称为进程),init进程负责完成整个系统的初始化,最后等待用户进行登录。
    ==总结:加载硬件驱动程序,内核把init进程加载到内存中运行==
系统初始化进程
  • init进程
    • 由Linux内核加载运行/sbin/init程序
    • init进程是系统中第一个进程,是所有进程的父进程
    • init进程的PID(进程标记)号永远为1
  • Systemd
    • Systemd是Linux操作系统的一种init软件
    • CentOS7中采用全新的Systemd启动方式,取代传统的SysVinit(CentOS 5,6)
    取代传统的串行的脚本启动方式(/etc/init.d/一个接一个)
    Systemd能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度
    • CentOS7中运行的第一个init进程是/lib/systemd/systemd
  • Systemd单元类型
    单元类型 扩展名 说明
    ==Service== .service 描述一个系统服务
    Socket .socket 描述一个进程间通信的套接字(ip:端口)
    Device .device 描述一个内核识别的设备文件
    Mount .mount 描述一个文件系统的挂载点
    Automount .automount 描述一个文件系统的自动挂载点
    Swap .swap 描述一个内存交换设备或交换文件
    Path .path 描述一个文件系统中文件或目录
    Timer .timer 描述一个定时器(用于实现类似cron的调度任务)
    Snapshot .snapshot 用于保存一个systemd的状态
    Scope .scope 使用systemd的总线接口以编程的方式创建外部进程
    Slice .slice 描述居于Cgroup(限制io,内存)的一组通过层次组织的管理系统进程
    ==Target== .target 描述一组systemd的单元
运行级别所对应的Systemd目标
运行级别 Systemd的target 说明
0 target 关机状态
1 rescue.target 单用户模式,不需要密码验证即可登录系统,多用于系统维护
2 multi-user.target 用户定义/域特定运行级别。默认等同于3
3 multi-user.target 字符界面的完整多用户模式,大多数服务器主机运行在此级别
4 multi-user.target 用户定义/域特定运行级别。默认等同于3
5 graphical.target 图形界面的多用户模式,提供了图形桌面操作环境
6 reboot.target 重新启动,使用该级别时将会重启主机
命令 命令 命令 结果
init 0 systemctl isolate poweroff.target (systemctl) poweroff 关机(shutdown)
init 1 systemctl isolate resue.target 切换单用户模式
init 3 systemctl isolate multi-user.target 切换字符界面多用户模式
init 5 systemctl isolate graphical.target 切换图形界面多用户模式
init 6 systemctl isolate reboot.target (systemctl) reboot 重启
排除启动类故障 修复MBR扇区故障
  • 故障原因
    • 病毒,木马等造成的破坏
    • 不正确的分区操作,磁盘读写误操作
  • 故障现象
    • 找不到引导程序,启动中断
    • 无法加载操作系统,开机后黑屏
  • 解决思路
    • 应提前作好备份文件
    • 以安装光盘引导进入急救模式
    • 从备份文件中恢复
故障模拟恢复
  • 修复MBR扇区故障
    MBR位于第一块硬盘(/dev/sda)的第一个物理扇区处,总共512字节
    1. 备份MBR扇区数据到其它磁盘(/dev/sdb1)
      mkdir /backup
      mount /dev/sdb1 /backup
      dd if=/dev/sda of=/backup/mbr.bak bs=512 count=1
      Linux的引导过程与服务控制

      文章图片

      Linux的引导过程与服务控制

      文章图片

      Linux的引导过程与服务控制

      文章图片

      Linux的引导过程与服务控制

      文章图片

    2. 模拟破坏MBR引导扇区
      dd if=/dev/zero of=/dev/sda bs=512 count=l
      Linux的引导过程与服务控制

      文章图片

    3. 引导界面进入急救模式,从备份文件中恢复MBR扇区数据
      先加载好光盘镜像,重启操作系统
      Linux的引导过程与服务控制

      文章图片

      当出现安装向导界面时,选择" Troubleshooting" 选项
      Linux的引导过程与服务控制

      文章图片

      再选择" Rescue a CentOS Linux system" 选项,进入急救模式
      Linux的引导过程与服务控制

      文章图片

      选择" 1" 选择 Continue 并按 Enter 键继续
      Linux的引导过程与服务控制

      文章图片

      再次按 Enter 键后将进入带 " sh-4.2" 提示符的 Bash Shell环境
      sh-4.2# mkdir /backupdir
      sh-4.2# mount /dev/sdb1 /backupdir//挂载带有备份文件的分区
      sh-4.2# dd if=/backupdir/mbr.bak of=/dev/sda//恢复备份数据
      sh-4.2# exit//执行exit命令退出临时shell环境,系统将会自动重启
      Linux的引导过程与服务控制

      文章图片

      Linux的引导过程与服务控制

      文章图片

修复GRUB引导故障
  • 故障原因
    • MBR中的GRUB引导程序(1--446字节)遭到破坏
    • grub.confg文件丢失、引导配置有误
  • 故障现象
    • 系统引导停滞,显示" grub> " 提示符
  • 解决思路
    • 尝试手动输入引导模式(步骤繁琐,需要手动输入/boot/grub2/grub.cfg中的配置信息,很容易出错,不建议使用)
    grub& gt; insmod xfs//加载指定的模块到内核
    grub& gt; linux16 /vmlinuz-0-rescue-3e3bbcbbcd23437fabc66e7016070505 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet//内核的名字及位置等信息,UUID等信息每台设备都不同
    grub& gt; initrd16 /initramfs-0-rescue-3e3bbcbbcd23437fabc66e7016070505.img//镜像系统文件
    grub& gt; boot//引导boot
    • 进入急救模式,重写或者从备份中恢复grub.confg(数据被破坏,上述第一个原因)(和恢复MBR类似,不作赘述)
    • MBR位于第一块硬盘(/dev/sda)的第一个物理扇区处,总共512字节,前446字节时主引导记录,分区表保存在MBR扇区中的第447-519字节中。
    • mkdir /bak
      mount /dev/sdb1 /bak
      dd if=/dev/sda of=/bak/grub.bak bs=446 count=1
    • 模拟对MBR中的GRUB引导程序的破坏,但并不破坏分区表
      dd if=/dev/zero of=/dev/sda bs=446 count=1
    • 引导界面进入急救模式,从备份文件中恢复GRUB引导程序
      sh-4.2# mkdir /backupdir
      sh-4.2# mount /dev/sdb1 /backupdir
      sh-4.2# dd if=/backupdir/grub.bak of=/dev/sda
      sh-4.2# exit
    • 向MBR扇区中重建grub程序(引导界面进入急救模式,重建GRUB菜单配置文件)
    rm -rf /boot/grub2/grub.cfg//模拟丢失GRUB菜单配置文件
    Linux的引导过程与服务控制

    文章图片

    进入急救模式,加载光盘镜像,切换到系统根环境(急救模式进入方法同上)
    sh-4.2# chroot /mnt/sysimage
    Linux的引导过程与服务控制

    文章图片

    Linux的引导过程与服务控制

    文章图片

    重新将GRUB引导程序安装到第一块硬盘(/dev/sda)的MRB扇区,如果有多个分区可省略
    bash-4.2# grub2-install /dev/sda
    重新构建GRUB菜单的配置文件
    bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
    退出chroot环境,并重启
    bash-4.2# exit
    sh-4.2# reboot
    Linux的引导过程与服务控制

    文章图片

    ==此方法对于多个硬盘的Linux系统可能会出现第一次重启无法正常启动的情况,多数情况下可以正常启动,要做好MBR程序备份==
遗忘root用户密码
  • 故障原因
    遗忘用户密码
  • 故障现象
    无法进行需要root权限的管理操作
    若没有其他账号可用,将无法登录系统
  • 解决思路
    进入急救模式,重设密码
    • 按上例进入引导界面更改密码
    passwd root
    Linux的引导过程与服务控制

    文章图片

    • 重新登陆即可
服务控制及切换运行级别 系统服务控制
  • systemctl 控制类型 服务名称
  • 控制类型 6
    • start:启动
    • stop:停止
    • restart:重新启动(对于关闭的服务等于start)
    • status:查看服务状态
    • reload:重新加载配置文件(修改了配置文件后,重启耗时较长或者不适宜重启使用)
    Linux的引导过程与服务控制

    文章图片

Linux系统的运行级别
  • 查看运行级别
    • runlevel命令:只能查看切换前一次的运行级别于当前运行级别
    • systemctl工具(systemctl get-default):只能查看默认的运行级别
    Linux的引导过程与服务控制

    文章图片

  • 临时切换运行级别
    • init命令:命令参数是运行级别对应的数字
    • systemctl工具:命令参数是具体的targrt(上面已经给出)
    Linux的引导过程与服务控制

    文章图片

  • 设置永久运行级别
    • systemctl set-default 命令级别(.target)
    • ln -sf /usr/lib/systemd/system/graphical.target(命令级别.target) /etc/systemd/system/default.target //强制覆盖软链接文件
优化启动过程 ntsysv工具
  • 命令行输入ntsysv会出现图形交互界面
    上下键移动光标,空格选择打上星号和取消星号(有星号的服务开机自启)
    Tab键切换操作按键
    回车选择确定/取消
    Linux的引导过程与服务控制

    文章图片

systemctl / chkconfig工具
systemctl
  • 查询服务是否开机自启
    systemctl is-enabled 服务名
    开机自启-> enabled ; 开机不自启-> disabled
  • 开启关闭服务的开机自启
    systemctl enable 服务名
    systemctl disable 服务名
Linux的引导过程与服务控制

文章图片

  • 查询服务是否启动
    systemctl is-active 服务名
    未开启(但是开机会自启)-> inactive ; 开启-> active ; 未开启且开机不自启-> unknown
    Linux的引导过程与服务控制

    文章图片

  • 打开并设置开机自启(disable同理)
    systemctl enable --now 服务名
    Linux的引导过程与服务控制

    文章图片

chkconfig
  • 只能对/etc/init.d/中的服务实现管理
  • 需要在/etc/init.d/中写入脚本文件
  • 脚本文件中的" # chkconfig: 2345 10 90" 字段三段数字分别表示开机自启的运行级别(-:都不自启),开机第几个启动,关机第几个关闭。
  • chkconfig --add 创建的服务名//添加有可执行权限的命令至系统中
  • chkconfig --list [服务名]//查看服务相关信息
  • chkconfig --level [0123456] 服务名 on/off//更改设定的运行级别下,该服务是否开机自动启动
  • 添加脚本之后可以使用service 服务名 控制类型进行管理
一点相关知识 主机相关
  • 永久修改主机名
    hostnamectl set-hostname newname
  • 查看主机名状态
    hostnamectl status
    Linux的引导过程与服务控制

    文章图片

设置系统语言
  • 设置系统语言为中文
    localectl set-locale LANG=zh_CN.utf8//万国字符集UTF8(ASCII码演化)
  • 查看当前系统使用的语言
    localectl [status]
查看启动用时
  • sytemd-analyze
    【Linux的引导过程与服务控制】
    Linux的引导过程与服务控制

    文章图片


    推荐阅读