1、开机自检
服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit, 中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
2、MBR 引导
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR(Master Boot Record, 主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR 记录中的引导信息调用启动菜单(如 GRUB)。
3、GRUB 菜单
对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载 Linux 内核文件,然后将系统控制权转交给内核。需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器。
4、加载 Linux 内核
Linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间, 负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个 Linux 操作系统的运行过程。在 CentOS 系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。
5、init 进程初始化
为了完成进一步的系统引导过程,Linux 内核首先将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录。
由Linux内核加载运行/sbin/init程序
init进程时系统中第一个进程
init进程的PID(进程标记)号永远是1
Systemd是Linux操作系统的一种init软件
CentOS 7 中采用全新的System启动方式,取代传统的SysVinit
CentOS 7 中运行的第一个init进程是/lib/systemd/systemd
Systemd 单元类型
单元类型 扩展名 说明
Service | .service | 描述一个系统服务 |
---|---|---|
Socket | .socket | 描述一个进程间通信的套接字(通信协议的载体) |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或目录 |
Timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
Path | .path | 描述一个文件系统中文件或目录(path 路径) |
Snapshot | .snapshot | 用于保存一个systemd的状态(snapshot 快照) |
Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
Target | .target | 描述一组systemd的单元(target 目标) |
Init运行级别所对应的Systemd目标
init运行级别 | 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 | 重新启动,使用该级别时将会重启主机 |
故障原因
病毒,木马等造成的破坏
不正确的分区操作,磁盘读写误操作
故障现象
找不到引导程序,启动中断
无法加载操作系统,开机后黑屏
解决思路
提前做好备份文件
以安装光盘引导进入急救模式
从备份文件中恢复
实验环境
VMware软件,开centos 7,并为其添加一块硬盘(备份数据用的)
恢复步骤
1.备份已损坏MBR扇区数据(实际中我们都是备份整个文件)
加一块磁盘做备份
2.模拟故障
3.加载系统镜像文件中的急救模式
加载系统镜像文件中的内核界面
将备份数据做恢复处理
实验过程
虚拟机加一块300G硬盘做实验
进系统查看磁盘
fdisk -l ###看是否有sdb
mkfs -t ext4 /dev/sdb ###格式化sdb
按y确认删除
挂载mount /dev/sdb /opt
df -Th 查看一下
1、备份MBR扇区数据
执行以下操作可以将第 一块硬盘(sda)的 MBR 扇区备份到第二块硬盘的 sdb1 分区中(挂载到/opt 目录)。
dd if=/dev/sda of=/opt/mbr.bak bs=512 count=1
2、模拟MBR扇区故障
执行以下操作可以从设备文件 zero 中读取 512 字节的数据,并将其覆盖到第一块硬盘(sda),从而破坏 MBR 扇区中的数据。
dd if=/dev/zero of=/dev/sda bs=512 count=1
完成上述操作后重启系统,将会出现“Operating system not found”的提示信息,表示无法找到可用的操作系统,因此无法启动主机。
3.从备份文件中恢复 MBR 扇区数据
由于 MBR 扇区被破坏以后,就无法再从该硬盘启动系统,所以需要使用其他硬盘中的操作系统进行引导,或者直接使用 CentOS 系统的安装光盘进行引导。不管使用哪种方式, 目的都是相同的——获得一个可以执行命令的 Shell 环境,以便从备份文件中恢复 MBR 扇区中的数据。
以使用 CentOS 安装光盘引导为例,当出现安装向导界面时,选择“Troubleshooting” 选项,如图所示,进入修复故障页面。
再选择“Rescue a CentOS Linux system”选项,将以“救援模式”引导Linux 操作系统。
然后系统会自动查找硬盘中的 Linux 分区并尝试将其挂载到/mnt/sysimage 目录(选择
“1”确认并按 Enter 键继续)。接下来会出现 rescue 字符界面
最后,按 Enter 键后将进入带“sh-4.2#”提示符的 Bash Shell 环境
mount /dev/sdb /mnt ## 将备份sdb备份的文件挂到mnt下
然后进去看下是否有mbr.bak
dd if=/mnt/mbr.bak of=/dev/sda count=1 bs=512 ###恢复备份数据
重启reboot 进入系统测试是否正常。
系统正常启动
故障原因
故障现象
解决思路
光盘引导,进入急救模式,提示操作
从备份文件中恢复MBR扇区
'//第一步:查找并破坏grub引导程序(grub.cfg)'
[root@localhost ~]# cd /boot '//进入/boot目录'
[root@localhost boot]# ls '//查看'
config-3.10.0-693.el7.x86_64
efi
grub '存放的是启动菜单的背景图片和样式'
grub2 '存放配置文件'
initramfs-0-rescue-d078430d0d8f434fb5ad6e47678ea86f.img
initramfs-3.10.0-693.el7.x86_64.img
initramfs-3.10.0-693.el7.x86_64kdump.img
initrd-plymouth.img
symvers-3.10.0-693.el7.x86_64.gz
System.map-3.10.0-693.el7.x86_64
vmlinuz-0-rescue-d078430d0d8f434fb5ad6e47678ea86f
vmlinuz-3.10.0-693.el7.x86_64
[root@localhost boot]# cd grub '//进入grub目录'
[root@localhost grub]# ls '//查看'
splash.xpm.gz
[root@localhost grub]# cd ../grub2 '//没有发现grub配置文件,进入grub2目录中查找'
[root@localhost grub2]# ls '//发现grub.cfg配置文件'
device.map fonts grub.cfg grubenv i386-pc locale
[root@localhost grub2]# rm -rf grub.cfg '//删除grub.cfg配置文件'
[root@localhost grub2]# ls
device.map fonts grubenv i386-pc locale '//删除成功,'
[root@localhost grub2]# init 6 '//重启'
系统无法正常启动
重新启动系统,在载入条时,立马按F2进入BIOS界面
按方向键右键到Boot界面,选择到CD-ROM Drive,按+号将这一选项移到最上面
再移动到Exit,回车保存并重启
1.装入光盘,在光盘引导界面选择troubleshooting:
2、进入troubleshooting菜单 选择Rescue a centos system
3、然后系统会自动查找硬盘中的 Linux 分区并尝试将其挂载到/mnt/sysimage 目录(选择
“1”确认并按 Enter 键继续)。接下来会出现 rescue 字符界面
最后,按 Enter 键后将进入带“sh-4.2#”提示符的 Bash Shell 环境
4、进入“bash-4.2#”的 Shell 环境以后,重写(或通过之前备份的文件恢复)grub.cfg 配置文件即可。重写完 grub.cfg 配置文件后,需要使用 grub2-mkconfig 工具更新 grub.cfg 配置文件。
将/mnt/sysimage 设置为当前环境的根
chroot /mnt/sysimage/
(若未执行“chroot /mnt/sysimage”命令,则重新建立的 grub.cfg 配置文件应该位于/mnt/sysimage/boot/grub2/grub.cfg)
进入boot目录,查看文件
5、执行“grub2-install /dev/sda”命令可以重新将grub 引导程序安装到第一块硬盘(sda)的 MRB 扇区
使用 grub2-install 命令修复grub
grub2-install /dev/sda
查看是否修复
cd /boot/grub2/
ls
已经修复
6、修复grub.cfg配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
查看是否修复
cd /boot/grub2/
ls
7、重启
exit
reboot ###主要改启动项,否认还是进光盘模式
10、重启时在载入时立即按F2进入BIOS
将开机启动项改为硬盘,保存退出
最后成功进入系统
故障原因
遗忘root用户的密码
故障现象
无法进行需要root权限的管理操作
若没有其他可用账号,将无法登录系统
解决思路
进入急救模式,重设密码
重新启动系统,在载入条时,立马按F2进入BIOS界面
按方向键右键到Boot界面,选择到CD-ROM Drive,按+号将这一选项移到最上面
再移动到Exit,回车保存并重启
1.装入光盘,在光盘引导界面选择troubleshooting:
2、进入troubleshooting菜单 选择Rescue a centos system
3、进入引导可以按回车,或者等待
按1 在按会车进入sh-4.2#
4、将/mnt/sysimage 设置为当前环境的根
chroot /mnt/sysimage/
5、修改密码
passwd root
输入密码:Abc123 ###第一次
输入密码:Abc123 ###第二次
6、重启
exit
reboot ###主要改启动项,否则还是进光盘模式
7、验证
登录:root
密码:Abc123
选择急救模式,进入救援centos系统的方式都是一样的
加载镜像系统命令
chroot /mnt/sysimage
重新构建grub菜单系统命令
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
在 CentOS 系统中,各种系统服务的控制脚本默认放在/usr/lib/systemd 目录下。通过
systemctl 命令工具可以实现对指定系统服务的控制
语法格式如下:
systemctl 控制类型 服务名称
常用控制类型
对于在实际生产环境中运行的服务器,不要轻易执行 stop 或 restart 操作,以免造成客户端访问中断,带来不必要的损失。若只是要为系统服务启用新的配置,可以采用相对温和一些的“reload”参数重新加载配置,而不是生硬地执行“restart”。
例如:
对正在为用户提供Web 访问的 httpd 服务,当需要应用新的配置时,建议执行“systemctl reload httpd.service” 命令来重新载入配置,而不是执行“systemctl restart httpd.service”。
[root@localhost ~]# systemctl reload httpd.service
查看运行级别
例如
[root@localhost ~]# runlevel
N 5 '//N 是上一次运行的级别,5是这一次运行的级别。因为是开机后就查看,所以上一次的运行级别显示为N(no)'
'若从init 5 切换到 init 3 ,在init3中输入runlevel命令,则会显示 5 3'
CentOS 系统中常见的系统服务
服务名称 | 用途简介 | 备注 |
---|---|---|
atd | 延期、定时执行任务 | 建议关闭 |
bluetooth | 发现、认证蓝牙相关设备 | 建议关闭 |
crond | 按预定周期执行计划任务 | 建议开启 |
irqbalance | 多核心 CPU 处理器的调度支持 | 建议开启 |
kdump | 记录内核崩溃时的内存信息 | 建议关闭 |
lvm2-monitor | LVM 管理及监控 | 建议开启 |
netfs | 访问共享文件夹等网络文件系统 | 建议开启 |
network | 配置及使用网卡、网络地址 | 建议开启 |
restorecond | SELinux 安全机制的文件监控和恢复功能 | 建议关闭 |
rhnsd | 访问 Red Hat Network,获取通知、提交订阅等 | 建议关闭 |
rpcgssd | 管理 NFS(Network File System,网络文件系统)访问中的客户程序语境 | 建议关闭 |
saslauthd | 基于文本的身份认证 | 建议关闭 |
smartd | 监控本地硬盘的状态并发送故障报告 | 建议开启 |
smb | 文件共享服务 | 建议关闭 |
sshd | 提供远程登录和管理 Linux 主机的功能 | 建议开启 |
rsyslog | 记录内核、系统的日志消息 | 建议开启 |
vsftpd | 通过 FTP(File Transfer Protocol,文件传输协议)提供文件上传、下载功能 | 建议关闭 |
必须强调的是,这些服务到底是选择开启还是关闭,应根据主机的实际功能需求来定, 不要生搬硬套。例如,如果当前的 Linux 主机用来向局域网提供文件共享服务,那么 smb 服务应开启,而不能关闭
[root@localhost ~]# ntsysv '//进入ntsysv伪图形化界面'
* 符号代表开机自启
空格 代表开启不自启
Tab键 切换到选项(确定,取消)
空格键可以输入 * 或者取消 *
操作时按↑、↓方向键来选择不同的系统服务,按 Space(空格)键设置服务的默认启动状态(“[*]”表示启动,“[ ]”表示关闭)。如果要查看所选定服务的说明信息,按 F1 键可以获取帮助。
systemctl 控制选项 服务名称
常用的选项有三种:
查看系统服务的启动状态
systemctl is-enable 服务名称
设置系统服务的启动状态
systemctl enable/disable 服务名称
例如,执行以下操作即可配置 apache 服务开机自动启动或关闭,并查看开机启动状态。当 apache 服务设置为开机自动启动时,在/etc/systemd/system/multi-user.target.wants/目录下面会出现一个文件名为 httpd.service 的软连接文件。当 apache 服务设置为开机自动关闭时,在/etc/systemd/system/multi-user.target.wants/目录下面的 httpd.service 软连接文件就会被删除。
[root@localhost ~]# systemctl enable httpd.service //apache 服务设置为开机启动
Createdsymlinkfrom /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# systemctl is-enabled httpd.service
enabled
[root@localhost ~]# systemctl disable httpd.service //apache 服务设置为开机关闭
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service. [root@localhost ~]# systemctl is-enabled httpd.service
disabled
在当前系统下执行“systemctl list-units --type=service”命令可以查看当前系统中所有已激活的系统服务,命令如下:
[root@localhost ~]# systemctl list-units --type=service //查看所有已经激活的系统服务
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.serviceloaded active running ABRT Xorg log watcherdisabled