Linux操作系统的引导过程一般包括以下几个阶段:开机自检、MBR引导、GRUB菜单、加载Linux内核、init进程初始化。
服务器主机开机以后,将根据主板BIOS中的设置对CPU (Central Processing Unit,中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。.
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR (Master Boot Record,主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单(如GRUB)。
对于Linux操作系统来说,GRUB (GRand Unified Bootloader,统一启动加载器) 是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。需要注意的是,CentOS 7采用的是GRUB2启动引导器。
Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。在CentOS系统中,默认的内核文件位于/bootvmlinuz-3.10.0-514.el7.x86_ _64" 。
为了完成进一步的系统引导过程,Linux 内核首先将系统中的“/sbin/init"程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录。
Linux操作系统中的进程使用数字进行标记,每个进程的身份标记号称为PID。在引导Linux操作系统的过程中,*/sbin/init 是内核第一-个加载的程序,因此init 进程对应的PID号总是为1。
init进程运行以后将陆续执行系统中的其他程序,不断生成新的进程,这些进程称为init进程的子进程。反过来说,init 进程是这些进程的父进程。当然,这些子进程也可以进一步生成各自的子进程,依次不断繁衍下去,最终构成-棵枝繁叶茂的进程树,共同为用户提供服务。
从以上描述可以看出,init进程正是维持整个Linux操作系统运行的所有进程的“始祖”,因此init进程是不允许被轻易终止的。需要切换不同的系统运行状态时,可以向init进程发送正确的执行参数,由init 自身来完成相关操作。
语法格式:init [选项]
常用选项:
0 关机
1 单用户
2 多用户
3 字符界面
5 图形界面
6 重启
Systemd是Linux操作系统的一种init 软件,CentOS 7系统中采用了全新的Systemd启动方式,取代了传统的SysVinit。 Systemd 启动方式使系统初始化时诸多服务并行启动,大大提高了开机效率。CentOS 7系统中“/sbin/init"是“/lib/systemd/systemd"的链接文件。换言之,CentOS 7系统中运行的第-一个init 进程是/lib/systemd/systemd"。systemd 守护进程负责Linux 的系统和服务,systemctl 用于控制Systemd管理的系统和服务状态。
Systemd将其管理的资源组织成各种类型的单元(Unit),图表中列出了Systemd 使用的各种单元类型。
单元类型 | 扩展名 | 说明 |
---|---|---|
Service | .service | 描述一个系统服务 |
Socket | .socket | 描述个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或交换文件 |
Path | .path | 描述一个文件系统中文件或目录 |
Timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
Snapshot | .snapshot | 用于保存一个systemd的状态 |
Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | .slice | 描述居于Cgroup的一-组通过层次组织的管理系统进程 |
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 | 重新启动,使用该级别时将会重启主机 |
[root@localhost ~]# systemctl -t help #查询systemd支持的单元类型
Available unit types:
service
socket
busname
target
...此处省略部分内容
病毒,木马等造成的破坏
不正确的分区操作,磁盘读写误操作
找不到引导程序,启动中断
无法加载操作系统,开机后黑屏
提前做好备份文件
以安装光盘引导进入急救模式
从备份文件中恢复
MBR位于物理硬盘的第-一个扇区(512字节),该扇区又称为主引导扇区(MBR扇区),除了包含系统引导程序的部分数据外,还包含整个硬盘的分区表记录。当主引导扇区发生故障时,将可能无法进入引导菜单,或者因无法找到正确的分区位置而无法加载系统,通过该硬盘引导主机时很可能进入黑屏状态。
下面将通过示例介绍对MBR扇区进行备份、模拟破坏、修复的过程。
由于MBR扇区中包含了整个硬盘的分区表记录,因此该扇区的备份文件必须存放到其他的存储设备中,否则在恢复时将无法读取到备份文件。例如,执行以下操作可以将第一块 .硬盘(sda)的MBR扇区备份到第二块硬盘的sdb1 分区中(挂载到/backup目录)。
VMware开虚拟机,并为其添加一块硬盘(备份数据用的)
1.MBR扇区数据备份到新硬盘
2.模拟故障
3.加载系统镜像文件中的急救模式
4.将备份数据做恢复处理
将新添加的硬盘分区--格式化--挂载
fdisk -l ##看是否有sdb
mkfs -t ext4 /dev/sdb ###格式化sdb
挂载mount /dev/sdb /opt
1、备份MBR扇区数据
dd if=/dev/sda of=/opt/mbr.bak bs=512 count=1
2、模拟MBR扇区故障
dd if=/dev/zero of=/dev/sda bs=512 count=1
init 0 #关机
回车进入sh-4.2#
mount /dev/sdb /mnt ## 将备份sdb备份的文件挂到mnt下
dd if=/mnt/mbr.bak of=/dev/sda count=1 bs=512
重启 进入系统测试是否正常。
cd /boot/grub2 #进入grub2
mv grub.cfg grub.cfg.bak #修改grub2.cfg 模拟故障
init 6 #重启
光盘引导,进入急救模式
加载镜像系统命令
chroot /mnt/sysimage/
grub2-install /dev/sda #使用 grub2-install 命令修复grub
cd /boot/grub2/
ls #查看是否修复
grub2-mkconfig -o /boot/grub2/grub.cfg #修复grub.cfg配置文件
cd /boot/grub2/
ls #查看是否修复
进入troubleshooting菜单 选择Rescue a centos system
grub2-mkconfig -o /boot/grub2/grub.cfg
重启
exit
reboot ###主要改启动项,否认还是进光盘模式
遗忘root用户的密码
无法进行需要root权限的管理操作
若没有其他可用账号,将无法登录系统
选择急救模式,进入救援centos系统的方式都是一样的
加载镜像系统命令
chroot /mnt/sysimage
使用 grub2-install 命令修复grub
grub2-install /dev/sda
修复grub.cfg配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
systemd不是一个单独的命令,而是一个集合体
systemctl 是管理系统的主要命令
hostnamectl 是用于查看与修改当前主机信息的命令
systemctl命令可以控制系统服务,此命令涵盖了之前版本操作系统的service命令和chkconfig 命令两者的功能
使用systemctl命令,可以省略服务单元名称的标识.service,即:不输入后缀标识,systemctl命令默认将后缀标识当做.service来处理
systemctl 控制类型 服务名称
start (启动):运行指定的系统服务程序,实现服务功能。
stop (停止):终止指定的系统服务程序,关闭相应的功能。
restart (重启):先退出,再重新运行指定的系统服务程序。
reload (重载):不退出服务程序,只是刷新配置。在某些服务中与restart的操作相同。
status (查看状态):查看指定的系统服务的运行状态及相关信息。
例如:
[root@localhost ~]# systemctl start httpd #启动httpd服务
[root@localhost ~]# systemctl stop httpd #停止httpd服务
[root@localhost ~]# systemctl restart httpd #重新启动httpd服务
[root@localhost ~]# systemctl reload httpd #重新加载httpd服务配置文件
生产环境中建议使用reload命令来重新加载服务
runlevel 命令
runlevel 只能查看切换运行级别与当前运行级别
例如
[root@localhost ~]# runlevel
N 5
#N是上一次运行的级别,5是这一次运行的级别。因为是开机后就查看所以上一次的运行级别显示为N(no)
#若从init 5 切换到 init 3 ,在init3中输入runlevel命令,则会显示 5 3
[root@localhost ~]# ntsysv #进入ntsysv伪图形化界面
* 符号代表开机自启
空格 代表开启不自启
Tab键 切换到选项(确定,取消)
空格键可以输入 * 或者取消 *
常用的选项有三种
enable:开机自动启动。
disable:开机自动关闭。
is-enable:查看开机启动状态。
[root@localhost ~]# systemctl is-enabled httpd
disabled
[root@localhost ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# systemctl is-enabled httpd
enabled
[root@localhost ~]# systemctl disabled httpd
Unknown operation 'disabled'.
[root@localhost ~]# systemctl disable httpd
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
[root@localhost ~]# systemctl is-enabled httpd
disabled