目录
Linux操作系统引导过程
1.开机自检
计算机加电后,首先会进入BIOS启动环境。在这个环境中,固件会检测硬件,并且搜索可引导设备,比如硬盘。
2.MBR引导
BIOS会在可引导设备中搜索引导加载程序,如GRUB。引导加载程序位于硬盘的MBR(主引导记录)上。引导加载程序的作用是加载操作系统内核。
3.启动GRUB菜单
引导加载程序会读取GRUB配置文件获取内核的设置和位置,然后显示GRUB菜单
4.内核加载
引导加载程序会读取内核映像文件并将其加载到内存中。一旦内核加载完毕,引导加载程序会将控制权转交给内核。
5.init进程启动
内核初始化完成后,会启动init进程(通常是/sbin/init),并将init进程加载到内存中运行。init进程是用户空间的第一个进程,负责启动其他进程和服务。
6.系统初始化
init进程会执行一系列的配置文件和脚本,以初始化用户空间的环境。这些配置文件和脚本可以包括/etc/inittab、/etc/rc.d/等。
系统初始化进程
init进程
由 Linux 内核加裁运行 /sbin/init 程序
init进程是系统中第一个进程
init进程是所有进程的父进程init进程的PID号永远为1
Systemd
Systemd 是Linux操作系统的一种init软件
Centos7中采用全新的Systemd启动方式,取代传统的SysVinit
Centos7中运行的第一个init进程是 /lib/systemd/systemd
Linux系统运行级别
运行级别概念
操作系统的运行级别是指操作系统在启动过程中的不同阶段的运行状态。不同的运行级别对应着不同的功能和服务。
常见的操作系统运行级别有以下几种:
运行级别 | 功能 |
0 | 关机 |
1 | 单用户模式 |
2 | 字符界面的多用户模式 |
3 | 字符界面的多用户模式 |
4 | 字符界面的多用户模式 |
5 | 图形界面的多用户模式 |
6 | 重启 |
查看运行级别
(1)runlevel命令
runlevel #查看上一次的运行级别和当前的运行级别
(2)systemctl
systemctl get-default #查看当前的默认运行级别
切换运行级别
(1)init
平常使用较多的是:init 切换运行级别
(2)systemctl
功能 | systemctl |
关机 | poweroff.target |
单用户模式 | rescue.target |
字符界面的多用户模式 | multi-user.target |
字符界面的多用户模式 | multi-user.target |
字符界面的多用户模式 | multi-user.target |
图形界面的多用户模式 | graphical.target |
重启 | reboot.target |
(3)修改默认运行级别
systemctl set-default multi-user.target | graphical.target #设置默认运行级别(字符界面 多用户模式和图形界面多用户模式)
系统服务控制(服务管理操作)
服务管理操作命令
(1)systemctl 控制系统中的服务
systemctl 控制类型 服务名称
注意:systemctl 要确保在 /usr/lib/systemd/system/ 目录中有相关服务的 XXX.service 文件
(2)service 控制系统中的服务
service 服务名 服务类型
注意:service 要确保在 /etc/init.d/ 目录中有相关服务的管理脚本文件
服务管理控制类型
start | 启动 |
stop | 停止 |
restart | 重新启动 |
reload | 重新加载 |
status | 查看服务状态 |
服务开机自启
(1)使用systemctl设置服务开机自启
systemctl enable|disable [--now] 服务名[.service] #enable代表开启;disable代表关闭; --now选项实现立即开启|关闭服务
systemctl is-enabled 服务名[.service]
(2)图形化管理开机自启
ntsysv
(3)使用chkconfig设置开机自启
chkconfig --add 服务名 #服务名就是 /etc/init.d/ 目录下的脚本文件名
chkconfig --level 运行级别列表 服务名 on|off #开启|关闭服务在哪些运行级别下开机自启
chkconfig --list 服务名 #查看自启状态
排除启动类故障
(一)修复MBR扇区故障
(1)故障发生的原因
- 木马等病毒造成的破坏
- 不正确的分区操作、磁盘读写误操作
(2)故障产生时的现象
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
(3)怎么解决
- 可以提前作好备份文件
- 以安装光盘引导进入急救模式
- 从备份文件中恢复
操作实验
为了实现恢复,先对MBR进行备份,防止破坏导致无法登录系统
(1)新建一块硬盘专门用于备份,新建fdisk分区,格式化,挂载
[root@localhost ~]# fdisk -l
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a0e82
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 83886079 40893440 8e Linux LVM
磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@localhost ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xaf6b2899 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):83
8: unknown command
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# mkfs -t xfs /dev/sdc1
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=1310656 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242624, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mount /dev/sdc1 /opt/mbr-bak
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 13M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 35G 4.4G 31G 13% /
/dev/sda1 xfs 1014M 187M 828M 19% /boot
tmpfs tmpfs 378M 8.0K 378M 1% /run/user/42
tmpfs tmpfs 378M 0 378M 0% /run/user/0
/dev/sdc1 xfs 20G 33M 20G 1% /opt/mbr-bak
(2)在opt目录中新建一个备份目录mbr-bak
(3)使用dd命令备份数据
[root@localhost ~]# dd if=/dev/sda of=/opt/mbr-bak/benfen bs=512 count=1
#从sda一块硬盘中提取第一个扇区的数据512字节到opt目录中
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.00027866 秒,1.8 MB/秒
[root@localhost ~]# cd /opt/mbr-bak
[root@localhost mbr-bak]# ll -h
总用量 4.0K
-rw-r--r--. 1 root root 512 4月 22 01:08 benfen
(4)模拟黑客破坏攻击,使系统无法正常登录
[root@localhost mbr-bak]# dd if=/dev/zero of=/dev/sda bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000138101 秒,3.7 MB/秒
[root@localhost mbr-bak]#init 6
重启之后无法正常进入操作系统
(5)重启进入急救模式,选择Troubleshooting
进入rescue a CentOS system
(6)此时进入了shell环境下,新建一个目录用于还原,将备份的数据导入sda中,重启
(7)可以正常登录了