当前位置:   article > 正文

Linux/Centos7系统管理之引导过程与服务控制_centos7 引导方式 boot

centos7 引导方式 boot

Linux/Centos7系统管理之引导过程与服务控制

  1. Linux系统引导的过程
  2. 解决常见的启动类故障
  3. 控制Linux中的系统服务(核心)
  4. 优化Linux中的启动任务

一、引导过程总览(重要)——流程必要掌握

  1. 开机自检——BIOS(Basic Input/Output System),先加电,检查硬件(CPU、内存、显卡、键盘等设备)是否没有问题,没有问题加载驱动

  2. MBR引导——微代码找启动盘

     

    CPU首先读取位于CMOS中的BIOS程序,按照BIOS中设定的启动次序(Boot Sequence)逐一查找可启动设备,找到可启动的设备后,去该设备的第一个扇区中读取MBR(Master Boot Record,主引导记录)。

     

    MBR存在于可启动磁盘的0磁道0扇区,占用512字节,它主要用来告诉计算机从选定的可启动设备的哪个分区来加载引导加载程序(Boot loader),MBR中存在如下内容: 

    (1) Boot Loader 占用446字节,存储有操作系统(OS)相关信息,如操作系统名称,操作系统内核位置等,它的主要功能是加载内核到内存中运行。 

    (2) Partition Table 分区表,占用64字节,每个主分区占用16字节(这就是为啥一块硬盘只能有4个主分区

     

    (3)分区表有效性标记占用2字节,CPU将MBR读取至内存,运行GRUB(Boot Loader常用的有GRUB和LILO两种,现在常用的是GRUB),GRUB会把内核加载到内存去执行。

     

    如上所示,我们可查看/boot/grub2/grub.cfg文件的第100行的内容,就能看到是在该配置文件中对内核文件进行操作了。

  3. GRUB菜单——使用广泛的多系统引导器程序,系统控制权传递给GRUB以后,将会显示启动菜单提供给用户选择,根据选择或者默认项加载内核文件,然后将系统控制权转交给内核。

  4. 加载内核(kernel)——/boot目录下,Linux内核是预先编译好的特殊二进制文件,介于各种硬件资源和系统程序之间,负责资源分配与调度。

     

    补充:下面的vmlinuz-3.10.0-693.el7.x86_64就是我们的内核文件了。在/boot目录下

    1. [root@lokott ~]# ll /boot |grep "vmlinuz*"
    2. -rwxr-xr-x. 1 root root 5877760 1023 12:20 vmlinuz-0-rescue-f18b1b17cb2b477f8cb451fffad48550
    3. -rwxr-xr-x. 1 root root 5877760 823 2017 vmlinuz-3.10.0-693.el7.x86_64
    1. [root@lokott ~]# head -100 /boot/grub2/grub.cfg |tail -1
    2. linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=UUID=d0f8b702-0aa9-4857-9551-2e1283d2f5f9 ro crashkernel=auto rhgb quiet LANG=zh_CN.UTF-8
  5. init进程初始化——原来的缓存全部清空,加载必要进程之后,加载外部的第三方进程(应用软件)(延时启动)

     

    内核初始化作为PID1从initramfs执行/sbin/init。在Centos7中将其复制为systemd,systemd启动initrd.target中的 所有单元,并且挂载根文件系统/sysroot

1.1init进程

由Linux内核加载运行/sbin/init程序,是系统中的第一个进程,PID号永远为1

Systemd 单元类型

运行级别所对应的systemd目标

其中.service ——/lib/sysytemd/system

文件存储两个部分——元信息(状态的信息)和内容

===========================================================================================

1.2修复MBR扇区故障

1.故障原因

病毒、***等造成的破坏

不正确的分区操作、磁盘读写误操作

2.故障现象

找不到引导程序、启动中断

无法加载操作系统,开机后黑屏

3.解决思路

提前做好备份文件

以安装光盘引导进入急救模式

从部分文件中恢复

实验一——模拟修复MBR扇区故障实验

流程如下

  1. 备份MBR扇区数据——加一块硬盘做备份(一定需要先备份)

     

    (1)分区,格式化,挂载

     

    (2)备份mbr引导扇区到其它磁盘

     

    备份=dd if=/dev/sda of=/abc/sda.mbr.bak bs=512 count=1 (/abc是另一块磁盘的挂载点)

  2. 模拟故障

     

    dd if=/dev/sda of=/abc/sda.mbr.bak bs=512 count=1

     

    重启:reboot——> 启用DHCP(找不到系统),从网上找有无可以加载的系统,但是是找不到的

     

    修复之前需要光盘镜像需要连接使用

  3. 加载系统镜像文件中的急救模式

     

    加载系统镜像文件中的内核界面

     

    在读条时按下ESC键(手速快点)——选择CD-ROM Drive——选择Troubleshooting——选择Rescue a Centos system(补充:当然如果你的镜像文件一直是连接状态的话前面两个步骤是可以省略的)

     

    4.把备份数据做恢复

具体实验步骤和结果如下:

第一步:

  1. [root@localhost ~]# lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  3. sda 8:0 0 40G 0 disk
  4. ├─sda1 8:1 0 6G 0 part /boot
  5. ├─sda2 8:2 0 20G 0 part /
  6. ├─sda3 8:3 0 10G 0 part /home
  7. ├─sda4 8:4 0 1K 0 part
  8. └─sda5 8:5 0 4G 0 part [SWAP]
  9. sdb 8:16 0 20G 0 disk
  10. └─sdb1 8:17 0 20G 0 part
  11. sr0 11:0 1 4.2G 0 rom /run/media/root/CentOS 7 x86_64
  12. [root@localhost ~]# mkfs.xfs /dev/sdb1
  13. meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1310656 blks
  14. = sectsz=512 attr=2, projid32bit=1
  15. = crc=1 finobt=0, sparse=0
  16. data = bsize=4096 blocks=5242624, imaxpct=25
  17. = sunit=0 swidth=0 blks
  18. naming =version 2 bsize=4096 ascii-ci=0 ftype=1
  19. log =internal log bsize=4096 blocks=2560, version=2
  20. = sectsz=512 sunit=0 blks, lazy-count=1
  21. realtime =none extsz=4096 blocks=0, rtextents=0
  22. [root@localhost ~]# mount /dev/sdb1 /mnt
  23. [root@localhost ~]# df -hT | tail -1
  24. /dev/sdb1 xfs 20G 33M 20G 1% /mnt
  25. [root@localhost ~]# dd if=/dev/sda of=/mnt/sda.mbr.bak bs=512 count=1
  26. 记录了1+0 的读入
  27. 记录了1+0 的写出
  28. 512字节(512 B)已复制,0.000126274 秒,4.1 MB/
  29. [root@localhost ~]# ls /mnt/
  30. sda.mbr.bak

第二步:

  1. [root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1//垃圾填充覆盖第一个扇区内容(模拟破坏)
  2. 记录了1+0 的读入
  3. 记录了1+0 的写出
  4. 512字节(512 B)已复制,0.000139415 秒,3.7 MB/
  5. [root@localhost ~]# reboot //重启

第三步:

一直是连接着系统镜像文件的情况下啊,重启之后操作如下:

(1)选择Troubleshooting——回车

(2)选择Rescue a CentOS system——回车

(3)进入加载界面,稍等

(4)进入急救界面准备进行修复MBR,输入1,回车,弹出下面的对话后再次回车

(5)进行修复扇区的命令输入

===========================================================================================

1.3修复GRUB引导故障

1.故障原因

MBR中的GRUB弓|导程序遭到破坏
grub.conf文件丢失、引导配置有误

2.故障现象
系统引导停滞,显示"grub>” 提示符

3.解决思路
尝试手动输入引导命令
进入急救模式,重写或者从备份中恢复grub.conf
向MBR扇区中重建grub程序

实验二——模拟修复GRUB引导故障实验

流程如下:

  1. 使用系统急救模式进入命令字符界面

  2. 加载镜像中的系统进入bash环境

     

    chroot /mnt/sysimage

  3. 重新构建GRUB菜单系统

     

    grub2-install /dev/sda

     

    grub2-mkconfig -o /boot/grub2/grub.cfg

     

    exit

     

    reboot

实验操作过程与结果如下:

  1. [root@localhost ~]# ll /boot/
  2. 总用量 136460
  3. -rw-r--r--. 1 root root 140894 823 2017 config-3.10.0-693.el7.x86_64
  4. drwxr-xr-x. 3 root root 17 1114 11:37 efi
  5. drwxr-xr-x. 2 root root 27 1114 11:38 grub
  6. drwx------. 5 root root 97 1114 11:42 grub2
  7. -rw-------. 1 root root 69272056 1114 11:41 initramfs-0-rescue-a33ccb7775134b0e83e04555d56fedb7.img
  8. -rw-------. 1 root root 28281283 1114 11:42 initramfs-3.10.0-693.el7.x86_64.img
  9. -rw-------. 1 root root 16565979 1114 11:43 initramfs-3.10.0-693.el7.x86_64kdump.img
  10. -rw-r--r--. 1 root root 10181954 1114 11:41 initrd-plymouth.img
  11. -rw-r--r--. 1 root root 293027 823 2017 symvers-3.10.0-693.el7.x86_64.gz
  12. -rw-------. 1 root root 3228420 823 2017 System.map-3.10.0-693.el7.x86_64
  13. -rwxr-xr-x. 1 root root 5877760 1114 11:41 vmlinuz-0-rescue-a33ccb7775134b0e83e04555d56fedb7
  14. -rwxr-xr-x. 1 root root 5877760 823 2017 vmlinuz-3.10.0-693.el7.x86_64
  15. [root@localhost ~]# ll /boot/grub2
  16. 总用量 32
  17. -rw-r--r--. 1 root root 84 1114 11:42 device.map
  18. drwxr-xr-x. 2 root root 25 1114 11:42 fonts
  19. -rw-r--r--. 1 root root 4235 1114 11:42 grub.cfg
  20. -rw-r--r--. 1 root root 1024 1114 11:42 grubenv
  21. drwxr-xr-x. 2 root root 8192 1114 11:42 i386-pc
  22. drwxr-xr-x. 2 root root 4096 1114 11:42 locale

解释说明一下:如上所示其中/boot目录下的grub目录存放的是启动菜单的背景图片及样式,而grub2中存放的才是配置文件。

(1)先删除该配置文件来模拟整个过程

  1. [root@localhost grub2]# cd /boot/grub2/
  2. [root@localhost grub2]# ls
  3. device.map fonts grub.cfg grubenv i386-pc locale
  4. [root@localhost grub2]# rm -rf grub.cfg
  5. [root@localhost grub2]# init 6

重启之后的界面如下:(此时无法正常登录)

(2)引导急救模式,加载系统镜像:在读条时(手速快点)按下ESC进入选择菜单——选择3.CD-ROM Drive——选择Troubleshooting——选择Rescue a Centos system,最终进入如下界面进行操作

之后就可以正常登录了。

===========================================================================================

1.4破解root密码

1.故障原因

遗忘root用户密码

2.故障现象

无法进行需要root权限的管理操作

没有其他可用账号,将无法登录系统

3.解决思路

进入急救模式,重新设置密码

实验三——遗忘root用户密码

流程如下:

  1. 加载镜像系统
  2. 直接改密码

实验操作过程与结果如下:

(1)先将镜像文件选择为已连接

(2)重启本地虚拟机

在读条时(手速快点)按下ESC进入选择菜单——选择3.CD-ROM Drive——选择Troubleshooting——选择Rescue a Centos system

(3)使用chroot命令和passwd root来设置root密码;之后exit、reboot就可以正常登录root用户了

二、系统服务控制

2.1系统服务控制命令systemctl

控制类型 (选项参数)

  • start: 启动
  • stop: 停止
  • restart: 重新启动(会中断服务,相当于先stop,后start)
  • reload: 重新加载(会重新加载配置文件,不会中断)
  • status: 查看服务状态

实例:

  1. [root@localhost ~]# systemctl stop network //停止网络连接
  2. [root@localhost ~]# ifconfig | head //查看ip信息
  3. ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  4. ether 00:0c:29:56:d3:4a txqueuelen 1000 (Ethernet)
  5. RX packets 374 bytes 28991 (28.3 KiB)
  6. RX errors 0 dropped 0 overruns 0 frame 0
  7. TX packets 50 bytes 6529 (6.3 KiB)
  8. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  9. virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
  10. inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
  11. ether 52:54:00:71:37:09 txqueuelen 1000 (Ethernet)
  12. [root@localhost ~]# systemctl start network //启动网络连接
  13. [root@localhost ~]# ifconfig | head
  14. ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  15. inet 192.168.68.130 netmask 255.255.255.0 broadcast 192.168.68.255
  16. inet6 fe80::7eb1:2dde:8a54:6927 prefixlen 64 scopeid 0x20<link>
  17. ether 00:0c:29:56:d3:4a txqueuelen 1000 (Ethernet)
  18. RX packets 379 bytes 29759 (29.0 KiB)
  19. RX errors 0 dropped 0 overruns 0 frame 0
  20. TX packets 75 bytes 10116 (9.8 KiB)
  21. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  22. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536

2.2Linux系统的运行级别

查看运行级别

  • runlevel命令
  • systemctl工具

临时切换运行级别

  • init命令
  • systemctl工具

2.3优化启动过程

系统服务管理工具

  • ntsysv工具(伪图像化界面)

    • 提供一个交互式、可视化窗口
    • 可以在字符终端运行
    • 便于集中管理多个服务
  • systemctl 工具

    • 不提供交互式、可视化窗口
    • 管理单个服务效率更高

    结合下面的实例来进一步介绍systemctl命令

    1. [root@localhost ~]# rpm -q httpd
    2. httpd-2.4.6-90.el7.centos.x86_64
    3. [root@localhost ~]# netstat 显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组。^C
    4. [root@localhost ~]# netstat -ntap | grep 80
    5. [root@localhost ~]# systemctl start httpd
    6. [root@localhost ~]# netstat -ntap | grep 80
    7. tcp6 0 0 :::80 :::* LISTEN 14793/httpd
    8. [root@localhost ~]# systemctl stop httpd
    9. [root@localhost ~]# netstat -ntap | grep 80
    10. [root@localhost ~]# systemctl enable httpd
    11. Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
    12. [root@localhost ~]# systemctl is-enabled httpd
    13. enabled

    systemctl enable httpd 是开机自启动,is-enabled是显示其状态,关闭自启动是disable 上面输入reboot后使用netstat查看80端口是否有httpd服务自启动。具体操作如下所示。

    1. [root@localhost ~]# netstat -ntap | grep 80
    2. tcp6 0 0 :::80 :::* LISTEN 953/httpd
    3. [root@localhost ~]# systemctl disable httpd
    4. Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
    5. [root@localhost ~]# systemctl is-enabled httpd
    6. disabled
    7. [root@localhost ~]#

    三、总结

    本文主要是对Linux系统管理中系统引导过程和服务控制及优化的讲解,涉及如下命令:

     

    exit、reboot、chroot、grub2-install、grub2-mkconfig、passwd、runlevel、ntsysv、systemctl、netstat等。主要是对系统启动引导过程中的一些问题进行解决,强制破解root密码(实质上是强行更换),最后讲述的是服务控制命令操作和简单的一些优化操作

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/889062
推荐阅读
相关标签
  

闽ICP备14008679号