type
status
date
slug
summary
tags
category
icon
password
1、Linux的运行级别和启动流程
在介绍这三种模式之前,先简单了解下 Linux 的运行级别。指的是 Linux 的不同状态,比如命令行模式,图形化界面等。
运行级别 | 含义 | 含义 |
0 | 关机 | 关机 |
1 | 救援模式 secure | 单用户模式,找回root密码 |
2 | 多用户模式 | 无网络的多用户模式 |
3 | 多用户模式 multiuser | 命令行模式,文本模式,工作默认模式 |
4 | 多用户模式 | 未使用,待开发待使用 |
5 | 图形化界面模式,桌面模式. X11 graphical | 图形化界面模式,桌面模式. X11 |
6 | 重启 | 重启 |
我们可以通过下面命令来查看并修改系统的运行级别
下面是 Linux 的启动流程
1、开机自检。
2、从硬盘的 MBR 中读取引导程序 GRUB2。
3、引导程序(GRUB2)根据配置文件
/boot/grub2/grub.cfg
加载配置并显示引导菜单。4、引导程序加载 Linux 内核文件。
5、当内核全部载入内存后,GRUB 的任务完成,此时全部控制权限就交给 Linux 内核,CPU 开始执行 Linux 内核代码,比如初始化任务调度、内存分配、加载驱动等。就是将建立一个内核的运行环境。
6、内核代码执行完成后,开始执行 Linux 系统的第一个进程 systemd。进程号为1。
7、systemd 进程启动后就会读取
/etc/systemd/system/default.target
文件(该文件的作用是设置系统的运行级别)。systemd 会根据此文件设置系统的运行级别并启动相应的服务。8、服务启动完成后,将引导 login 弹出的登录界面。
由上面可以得出结论,我们可以在系统启动的时候调整系统启动的运行级别,进入较低的运行级别,从而修改系统配置或者内核参数。
2、什么是单用户模式、救援模式和紧急模式
当我们把 Linux 的系统文件删了,导致无法开机或者某些程序无法使用,或者我们忘了 Root 的密码,需要重置 Root 密码,这些情况下都需要进行故障修复。
一般的故障修复,都是通过进入一个微型系统,并在微型系统中关联正常系统,来实现对正常系统进行修复操作的。常见的微型系统大体分为两类:
- 存在于内核中的微型系统,通过内核来启动。例如部分 Linux 发行版的安装 iso 中会自带一个微型系统(比如 CentOS)。
- 通过外部挂载(光盘、usb 等)的方式来启动。
Linux 提供了单用户模式、救援模式和紧急模式用于修复系统故障。
2.1 单用户模式
开机进入运行级别 1,它只加载一个用户级别的操作系统,而不是完整的系统。在单用户模式下,系统会加载最小的系统资源和驱动程序,并且只启动一个 root 用户 shell。
单用户模式通常用于以下情况:
- 对文件系统或磁盘进行修复或检查。
- 修改 root 用户密码。
- 修改因配置不正确而导致系统启动失败的配置文件。
2.2 救援模式
救援模式类似于单用户模式,但是它是从其他介质(光盘、u盘)启动的,相当于通过外挂的系统镜像来启动一个独立系统,来诊断并修复当前系统。救援模式按照启动流程会进入运行级别 1 的单用户模式,它包含了单用户模式的功能,而且功能更强大:
- 系统无法正常启动,例如出现启动错误或主要文件损坏的情况,单用户模式也无法进入。
- 因为不需要从原来的硬盘启动,但是可以将原来的硬盘中的系统以及文件挂载,所以可以从安装介质中获取原来硬盘系统中受损或丢失的文件或者将重要数据拷贝出来。
- 如果紧急模式不可用时,说明内核或者内核相关出现问题,只能使用救援模式来进行救援。
2.3 紧急模式
紧急模式,类似 Windows 安全模式,该模式镶嵌在内核中。可以在最小环境中(仅仅运行系统所需的必要程序)进行系统维护。在紧急模式中,Linux 引导进入根 shell,不会启动服务、不会挂载挂载点、不会建立套接字(网络被禁用)、什么都不会启动,只有少数进程运行。紧急模式可以用来修改文件系统损坏、还原配置文件、移动用户数据等。
进入紧急模式的原因通常是:
- /etc/fstab 文件存在错误导致挂载文件系统时失败。
- 文件系统存在错误导致。
CentOS 7 之后取消了使用多年的 SystemV 的服务管理方式,CentOS 7 中的紧急模式和救援模式已经取代了运行级别的概念。在 CentOS 7 中,Rescue 模式相当于单用户模式,而紧急启动模式提供了一个最小的环境来修复您的系统。
简单来说,就是 CentOS 7 之后只存在救援模式和紧急模式,下面分别介绍如何进入这两种模式。
3、Centos7进入救援模式
1、重启 Linux 启动。
2、进入 Grub 菜单(在进入 Grub 菜单的时候快速按键盘的
↑
/ ↓
方向键,否则这个界面会一跳而过,就没办法执行后面的操作了),选择第 1 个(目前使用中的Linux内核),按 e
,编辑内核配置。3、找到
linux16
开头的行,按 Ctrl + e
组合键,或者你键盘上的 END
按键或 ←
/→
按键,移动到行尾,在最后加入 systemd.unit=rescue.target
(这里增加的参数是临时的,reboot 后就没有了)。修改内核参数的时候,网上有很多资料各不相同,基本可以归类为以下几种:
- 把这一行的内容
ro
改为rw init=/bin/bash
或者rw init=/sysroot/bin/sh
- 在行尾加入
systemd.unit=rescue.target
- 在行尾加入
single
修改方式可能跟 Linux 版本有关,可以执行cat /etc/os-release
查看系统版本,文章中的配置基于版本Rhel Fedora CentOS 7
。
4、添加上面的代码行后,按下
Ctrl + x
组合键或按下 F10
按键来引导到救援模,如下图所示(有的 Linux 版本会在这里要求提供 root 密码)。5、进入救援模式后就可以修复系统故障了,例如修复磁盘
或者找回 root 密码,编辑
/etc/passwd
文件,去掉 root 的 x 标记(相当于没有密码了)6、在完成后,按下
Ctrl + d
组合键来引导到正常模式。也可以输入下面的命令来引导到正常模式或者重启系统。4、Centos7进入紧急模式
大部分步骤和救援模式相同,主要是第 3 步修改内核参数的内容有差异。
第 3 步,找到
linux16
开头的行,按 Ctrl + e
组合键,或者你键盘上的 END
按键或 ←
/→
按键,移动到行尾,在最后加入 systemd.unit=emergency.target
。有的 Linux 版本是行尾加入 rd.break console=tty0
。按下
Ctrl + x
组合键,或按下 F10
按键来引导到紧急模式,如下图所示:5、常用修复步骤
- 进入救援模式或者紧急模式。
- 在紧急模式下根分区是以只读方式挂载,要修改根目录下的文件需要执行以下命令,以读写方式重新挂载根分区。
- 请执行以下命令首先检查fstab文件是否存在错误,尝试挂载所有未挂载的文件系统。
- 如果出现mount point does not exist为挂载点不存在,请创建对应的挂载点。
- 如果出现no such device为不存在该文件系统设备,请注释或者删除该挂载行。
- 如果出现an incorrect mount option was specified为挂载参数错误,请修改为正确的参数。
- 如果没有出现任何错误且提示UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY,通常为文件系统错误导致,请跳至步骤7。
- 执行以下命令,打开/etc/fstab修改相应的错误。
/etc/fstab文件包含了如下字段,通过空格分隔:
[file system] [dir] [type] [options] [dump] [fsck]
参数 | 说明 |
[file systems] | 要挂载的分区或存储设备。
[file system]列建议使用UUID的方式书写,执行blkid命令查询设备文件系统UUID。
参考格式如下:
# <device> <dir> <type> <options> <dump> <fsck>
UUID=b411dc99-f0a0-4c87-9e05-184977be8539 /home ext4 defaults 0 2
使用UUID的好处在于它们与磁盘顺序无关。如果你在BIOS中改变了你的存储设备顺序,或是重新拔插了存储设备,或是因为一些BIOS可能会随机地改变存储设备的顺序,那么用UUID来表示将更有效。 |
[dir] | [file systems]的挂载位置。 |
[type] | 挂载设备或分区的文件系统类型,支持许多种不同的文件系统:ext2,ext3,ext4,reiserfs,xfs,jfs,smbfs,iso9660,vfat,ntfs,swap及auto。
设置成auto类型,mount命令会猜测使用的文件系统类型,对CDROM和DVD等移动设备是非常有用的。 |
[options] | 挂载时使用的参数,有些参数是特定文件系统才有的。例如:defaults参数使用文件系统的默认挂载参数,ext4的默认参数为:rw,suid,dev,exec,auto,nouser,async。
更多参数请执行以下命令查看man手册:man mount |
[dump] | dump工具通过它决定何时作备份。 dump会检查其内容,并用数字来决定是否对这个文件系统进行备份。
取值为0和1 。0表示忽略,1则进行备份。大部分的用户是没有安装dump的,[dump]应设为0。 |
[fsck] | fsck读取[fsck]的数值来决定需要检查的文件系统的检查顺序。
取值为0,1,和2。 根目录应当获得最高的优先权1, 其它所有需要被检查的设备设置为2,0表示设备不会被fsck所检查。 |
- 修改完成后,确认修改是否正确,再次执行以下命令首先检查fstab文件。
- 执行以下命令,重启服务器。
- 如果步骤3中没有任何错误,则可能为文件系统错误导致,执行:说明:
- 输出结果中如果有I/O error ... inode的错误信息则根因为文件系统错误导致。
- 如果上述命令没有发现日志记录文件系统文件错误则通常为超级块损坏。超级块是文件系统的“头部”。它包含文件系统的状态、尺寸和空闲磁盘块等信息。
- 如果损坏了一个文件系统的超级块(例如不小心直接将数据写到了文件系统的超级块分区中),那么系统可能会完全不识别该文件系统,系统启动时没有识别到文件系统导致进入紧急模式。ext2fs类型的文件系统将超级块的内容进行了备份,并存放于驱动程序的块组(blockgroup)边界。
说明:
- 请执行以下命令,卸载文件系统出错的目录,
- 检查并修复已损坏的文件系统。
- ext文件系统,执行以下命令,检查文件系统是否存在错误。说明:
- xfs文件系统,执行以下命令,检查文件系统是否存在错误。
修复文件系统可能会导致数据丢失请先进行数据备份。
如果出现The super block Cloud no be read or does not describe a correct ext2 filesystem的提示请跳转至10。
如果需要修复,执行以下命令,修复文件系统。
如果需要修复,执行以下命令,修复文件系统。
- (可选)出现The super block Cloud no be read or does not describe a correct ext2 filesystem通常为超级块损坏,如图2所示,请按照提示使用备份的超级块更新超级块。图2 超级块损坏图3 更新超级块说明:
- b 8193选项用于显示使用存放在文件系统中的8193块的超级块的备份数据。通常在主超级块已损坏时使用。备份超级块的位置是依赖的在文件系统的blocksize上。
- <设备名>为磁盘名称而非分区。
执行以下命令,使用备份的超级块信息更新超级块。
如图3所示更新超级块完成:
说明:
对于具有1k块大小的文件系统,可以在块处找到备份超级块8193。对于具有2k块大小的文件系统,在块16384;对于4k块,在块32768。
- 修复完成后执行以下命令,重启服务器。
- Author:mcbilla
- URL:http://mcbilla.com/article/30b7c406-fc41-4c0f-8894-fd85107c44d2
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts