[排错] 解决系统启动后卡在 “A start job is running for /dev/mapper/…… (…… / no limit)”

报错代码案例

当系统启动时,系统会一直卡住,并在 console 口显示以下内容:

A start job is running for /dev/mapper/vg-lv_swap (...... / no limit)

案例原因分析

GRUB 参数 resume=/dev/mapper/vg-lv_swap 阻止了系统启动

解决方法

步骤一:重启系统

(步骤略)

步骤二:进入系统启动时的 GRUB 参数临时设置界面

当系统启动时出现内核列表时按下 “e” 键

步骤三:临时删除阻止系统启动的 GRUB 参数

在以 Linux 开头的这一行里删除以下内容:

...... resume=/dev/mapper/vg-lv_swap ......

(补充:这里以删除 GRUB 参数 resume=/dev/mapper/vg-lv_swap 为例)

步骤四:在临时删除阻止系统启动的 GRUB 参数后进入系统

同时按下 “ctrl” 键和 “x” 键

步骤五:使用 root 账号登陆系统

(步骤略)

步骤六:在系统里永久删除阻止系统启动的 GRUB 参数

# grubby --update-kernel ALL --remove-args "resume=/dev/mapper/vg-lv_swap"

(补充:这里以删除 GRUB 参数 resume=/dev/mapper/vg-lv_swap 为例)

[命令] e2fsck 命令的使用 (紧急修复 EXT 格式的文件系统)

正文:

步骤一:进入救援模式

(注意:当进入 RHEL 的救援模式时,如果遇到了有 ”Skip to shell“ 的选项,则选择此选项)

步骤二:开启软件级 RAID 或者 LVM

2.1 开启软件级 RAID

sh-4.2# mdadm --assemble --scan

2.2 开启 LVM

sh-4.2# lvm vgchange -ay

步骤三:修复 XFS 格式的文件系统

3.1 如果是修复逻辑卷

sh-4.2# e2fsck -fvy /dev/mapper/<volume group>-<logical volume>

(注意:在进行此操作前建议先备份数据)

3.2 如果是修复硬盘

sh-4.2# e2fsck -fvy /dev/<disk device>

(注意:在进行此操作前建议先备份数据)

3.3 如果是修复硬盘分区

sh-4.2# e2fsck -fvy /dev/<disk device partition>

(注意:在进行此操作前建议先备份数据)

3.4 如果是修复挂在的设备

sh-4.2# e2fsck -fvy /dev/<md device>

(注意:在进行此操作前建议先备份数据)

步骤四:退出救援模式

sh-4.2# exit

补充:

如果是修复 EXT 格式的文件系统的话,将步骤三种的以下命令:

sh-4.2# e2fsck -fvy /dev/mapper/<volume group>-<logical volume>
sh-4.2# e2fsck -fvy /dev/<disk device>
sh-4.2# e2fsck -fvy /dev/<disk device partition>
sh-4.2# e2fsck -fvy /dev/<md device>

修改成:

sh-4.2# xfs_repair /dev/mapper/<volume group>-<logical volume>
sh-4.2# xfs_repair /dev/<disk device>
sh-4.2# xfs_repair /dev/<disk device partition>
sh-4.2# xfs_repair /dev/<md device>

(
注意:
1) 在进行此操作前建议先备份数据
2) 如果直接使用 xfs_reqaire 命令无效,可以加上 -L 参数,但是使用 -L 参数前一定要提前备份数据:

sh-4.2# xfs_repair -L /dev/mapper/<volume group>-<logical volume>
sh-4.2# xfs_repair -L /dev/<disk device>
sh-4.2# xfs_repair -L /dev/<disk device partition>
sh-4.2# xfs_repair -L /dev/<md device>

)

参考文献:

https://access.redhat.com/solutions/9541
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/managing_file_systems/checking-and-repairing-a-file-system_
https://docs.redhat.com/zh-cn/documentation/red_hat_enterprise_linux/8/html/managing_file_systems/checking-an-xfs-file-system-with-xfs-repair_checking-and-repairing-a-file-system

[命令] xfs_repair 命令的使用 (紧急修复 XFS 格式的文件系统)

正文:

步骤一:进入救援模式

(注意:当进入 RHEL 的救援模式时,如果遇到了有 ”Skip to shell“ 的选项,则选择此选项)

步骤二:开启软件级 RAID 或者 LVM

2.1 开启软件级 RAID

sh-4.2# mdadm --assemble --scan

2.2 开启 LVM

sh-4.2# lvm vgchange -ay

步骤三:修复 XFS 格式的文件系统

3.1 如果是修复逻辑卷

sh-4.2# xfs_repair /dev/mapper/<volume group>-<logical volume>

(
注意:
1) 在进行此操作前建议先备份数据
2) 如果直接使用 xfs_reqaire 命令无效,可以加上 -L 参数,但是使用 -L 参数前一定要提前备份数据:

sh-4.2# xfs_repair -L /dev/mapper/<volume group>-<logical volume>

)

3.2 如果是修复硬盘

sh-4.2# xfs_repair /dev/<disk device>

(
注意:
1) 在进行此操作前建议先备份数据
2) 如果直接使用 xfs_reqaire 命令无效,可以加上 -L 参数,但是使用 -L 参数前一定要提前备份数据:

sh-4.2# xfs_repair -L /dev/<disk device>

)

3.3 如果是修复硬盘分区

sh-4.2# xfs_repair /dev/<disk device partition>

(
注意:
1) 在进行此操作前建议先备份数据
2) 如果直接使用 xfs_reqaire 命令无效,可以加上 -L 参数,但是使用 -L 参数前一定要提前备份数据:

sh-4.2# xfs_repair -L /dev/<disk device partition>

)

3.4 如果是修复挂在的设备

sh-4.2# xfs_repair /dev/<md device>

(
注意:
1) 在进行此操作前建议先备份数据
2) 如果直接使用 xfs_reqaire 命令无效,可以加上 -L 参数,但是使用 -L 参数前一定要提前备份数据:

sh-4.2# xfs_repair -L /dev/<md device>

)

步骤四:退出救援模式

sh-4.2# exit

补充:

如果是修复 EXT 格式的文件系统的话,将步骤三种的以下命令:

sh-4.2# xfs_repair /dev/mapper/<volume group>-<logical volume>
sh-4.2# xfs_repair /dev/<disk device>
sh-4.2# xfs_repair /dev/<disk device partition>
sh-4.2# xfs_repair /dev/<md device>

修改成:

sh-4.2# e2fsck -fvy /dev/mapper/<volume group>-<logical volume>
sh-4.2# e2fsck -fvy /dev/<disk device>
sh-4.2# e2fsck -fvy /dev/<disk device partition>
sh-4.2# e2fsck -fvy /dev/<md device>

参考文献:

https://access.redhat.com/solutions/9541
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/managing_file_systems/checking-and-repairing-a-file-system_
https://docs.redhat.com/zh-cn/documentation/red_hat_enterprise_linux/8/html/managing_file_systems/checking-an-xfs-file-system-with-xfs-repair_checking-and-repairing-a-file-system

[内容] Linux console 口输出信息简介

正文:

内容一:Linux console 口输出信息的案例

......
[233901.562021] systemd[1]: Failed to start Journal Service.
[234212.762021] systemd[1]: Failed to start Journal Service.
[234477.728002] systemd[1]: Failed to start Journal Service.
[234599.842019] systemd[1]: Failed to start Journal Service.
[235000.845000] systemd[1]: Failed to start Journal Service.
......

内容二:Linux console 口输出信息的性质

Linux console 口的输出信息不存储在系统日志里,而是在 Linux 内存,重启后则清除

内容三:Linux console 口输出信息的内容

3.1 输出信息的时间部分

其中 [235000.845000] 是自上次开机以后系统运行的秒数

3.2 输出信息的内容部分

systemd[1]: Failed to start Journal Service. 是输出信息的内容

补充:

[排错] 解决 Linux 启动时某些服务没有开机自启 (日志里报错: “deleted to break ordering cycle starting”)

报错代码

某些服务没有开机自启例如 NetworkManager.service

原因分析

在系统日志里可以类似 …… Job network.target/start deleted to break ordering cycle starting with …… 报错例如:

# cat /var/log/messages
Jan 1 10:09:24 server systemd[1]: network-online.target: Found ordering cycle on network.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on NetworkManager.service/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on basic.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on slices.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on mysql.slice/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on remote-fs.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on remote-fs-pre.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on iscsi.service/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on network-online.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Job network.target/start deleted to break ordering cycle starting with network-online.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found ordering cycle on NetworkManager.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on basic.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on slices.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on mysql.slice/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on remote-fs.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on remote-fs-pre.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on iscsi.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on network-online.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on NetworkManager-wait-online.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Job NetworkManager.service/start deleted to break ordering cycle starting with NetworkManager-wait-online.service/start

从案例中日志里的内容可以判断:
1) network.target/NetworkManager.service 启动
2) NetworkManager.service 作为基础服务依赖 basic.target
3) basic.target 依赖所有 slice 包括 mysql.slice
4) mysql.slice 依赖 iscsi.service/remote-fs.target/remote-fs-pre.target
5) iscsi.service/remote-fs.target/remote-fs-pre.target 依赖 network.target/NetworkManager.service
6) 系统为了防止启动时陷入死循环,systemd 报错 Job NetworkManager.service/start deleted to break ordering cycle 并放弃启动 NetworkManager.service

解决方法

取消不太重要的服务的依赖要求

# vi /etc/systemd/system/mysql.slice

将以下内容:

......
Before=slices.target
Wants=-.slice
After=-.slice remote-fs.target
......

修改为:

......
Before=slices.target
Wants=-.slice
After=-.slice #remote-fs.target
......

(
补充:
1) 这里以取消使用 /etc/systemd/system/mysql.slice 文件的服务的依赖要求为例
2) 这里以注释掉 After=-.slice remote-fs.target 中的 remote-fs.target 为例
)