当前位置: 首页 > news >正文

Linux设备down机,如何识别是 断电还是软件复位

通信系统对稳定性要求非常高,系统可用性要求达99.999%(即每年中断不超过 5 分钟)。因为在测试验证中需要投入大量精力对稳定性进行验证。本文中针对通信系统Linux平台的一例异常重启进行了各方面分析,提供故障判断的手段和操作。

排除外部电源异常

首先要排除设备供电异常,如断电,电流不稳定或欠压导致的系统异常。这可以通过系统是冷重启还是热重启来判断。

Linux 系统中冷重启和热重启主要有以下区别:

  • 重启方式:冷重启是通过物理手段切断电源再重新通电,如直接拔掉电源插头、按下机箱上的电源开关关闭后再开启,或通过服务器的 BMC/IPMI 远程指令强制断电再上电。热重启则是在不关闭硬件电源的情况下,通过软件命令触发,如使用rebootshutdown -r命令。
  • 进程处理:冷重启会强制终止所有进程,不会给进程保存数据的机会。热重启时,操作系统会向所有运行中的进程发送信号,让它们保存当前状态并正常关闭,但如果进程未及时响应或系统强制重启,也可能导致数据丢失。
  • 数据保存:冷重启由于直接断电,磁盘缓存中的数据可能未及时写入磁盘,容易导致数据丢失或文件系统损坏。热重启通常会执行磁盘数据同步操作(如 fsync),正常情况下能保证数据写入磁盘,减少数据丢失和文件系统损坏的风险。
  • 硬件状态:冷重启会清除所有硬件缓存,包括 CPU 寄存器、内存数据等,硬件需要重新进行自检等初始化过程。热重启时硬件保持通电,无需进行完整的硬件自检,仅会重新初始化部分关键硬件组件,重启速度相对较快。

可以通过以下方法从系统日志识别重启类型:

  • 查看系统日志文件:在 CentOS/RHEL 系统中,相关日志通常位于/var/log/messages,Ubuntu/Debian 系统则在/var/log/syslog。可使用tail命令或文本编辑器查看日志内容,搜索与重启相关的关键词,如 “reboot”“shutdown” 等。
  • 分析日志关键词:如果日志中存在 “reboot” 相关记录,且有明确的命令执行信息,如 “reboot: Restarting system”,通常表明是通过软件命令触发的热重启。若日志中出现与电源相关的关键词,如 “power off”“power on”,或有类似 “Kernel panic - not syncing”(内核崩溃)等异常信息,且没有明显的软件重启命令记录,则可能是冷重启,可能是由于电源故障、硬件问题等导致。
  • 利用 auditd 日志:对于启用了 auditd 的系统,可使用ausearch工具查看审计日志。执行ausearch -k system_shutdown -r recent命令可查看最近的关机事件,ausearch -k system_boot -r recent可查看启动事件。若连续出现两条系统启动日志,中间没有关机日志,很可能是未正常关机的冷重启情况。
  • 查看 last 命令输出last命令可显示系统登录和重启的历史记录。正常热重启会有明确的关机和重启记录顺序,而冷重启可能会缺失正常关机记录,或显示异常的重启时间间隔等,可结合具体日志内容判断重启类型。

常用分析 手段

通过lastlastreboot命令分析

last命令会记录系统的启动、关机和用户登录历史,其数据来源于/var/log/wtmp文件(记录系统会话信息)。

  • 热重启:正常情况下,热重启会先记录shutdownreboot事件,再记录下一次reboot启动事件,时间线连续(例如:reboot system boot 5.4.0-100-generi Thu Jul 24 10:00 still running 前有对应的关机记录)。
  • 冷重启:由于突然断电,wtmp文件可能没有正常记录关机事件,会出现启动记录直接跟随上一次启动记录的情况,中间无关机日志,或显示crash(崩溃)相关标记。

示例:系统在18:05 reboot

last | grep reboot  # 过滤重启记录
last            # 直接显示最近一次重启信息
root@localhost:~# last  
root     pts/0        xx.17.10.xx    Fri Sep  5 18:06   still logged in
reboot   system boot  5.10.xx-xx-dir Fri Sep  5 18:05   still running
root     pts/2        xx.xx.10.xx    Fri Sep  5 18:01 - down   (00:03)
root     pts/1        xx.17.10.xx     Fri Sep  5 10:56 - 18:04  (07:08)

检查文件系统一致性与磁盘缓存状态

冷重启(突然断电)可能导致磁盘缓存未同步到磁盘,文件系统可能出现不一致,而热重启通常会触发sync(同步缓存到磁盘)操作。

  • 通过dmesg

    命令查看启动时的文件系统检查信息:

    • 冷重启后,系统启动时可能会出现fsck(文件系统检查)修复日志,例如:EXT4-fs (sda1): recovery complete(EXT4 文件系统修复完成),或UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY(需要手动修复)。
    • 热重启后,文件系统通常无需修复,启动日志中不会有此类错误信息。

命令示例:

dmesg | grep -i "fsck\|recovery\|ext4\|xfs"  # 检查文件系统修复记录

查看硬件管理工具(如 IPMI/BMC 日志)

对于服务器或带外管理设备(如 BMC/IPMI),冷重启(电源断开)会被硬件层面记录,而热重启(软件触发)通常不会触发硬件电源事件。

  • 通过 IPMI 工具ipmitool查看硬件日志:

    ipmitool sel list  # 查看系统事件日志(SEL)
    

    若日志中出现Power Loss(电源丢失)、Chassis Power Off(机箱断电)后紧跟Chassis Power On

    (上电),则可确认是冷重启;而热重启通常无此类硬件电源事件,仅记录System Reset(系统重置)。

分析/proc/uptime与启动时间戳

/proc/uptime文件记录系统启动后的运行时间(第一列是总秒数),结合/proc/stat中的btime(系统启动的 Unix 时间戳),可计算启动时间。

  • 冷重启后,若系统之前运行时间较长(如几天),但突然重启且无正常关机记录,结合硬件日志(如电源事件),可推断为非自愿重启(冷重启)。
  • 热重启通常是计划性的,启动时间戳可能与管理员操作时间匹配(如手动执行reboot的时间)。

命令示例:

cat /proc/uptime  # 查看系统运行时间
185.97 2269.63date -d @$(grep btime /proc/stat | awk '{print $2}')  # 转换启动时间为可读格式
Fri Sep  5 18:09:59 CST 2025

检查内核崩溃日志(/var/log/dmesg/var/crash

若冷重启是由于内核崩溃(如硬件故障导致断电),内核可能会在崩溃前记录日志到dmesg(内存中的内核环形缓冲区),或写入/var/crash目录(若启用了kdump)。

  • 热重启通常不会产生内核崩溃日志,而冷重启若伴随硬件错误,dmesg中可能出现Kernel panic - not syncing(内核恐慌)、Hardware Error(硬件错误)等信息。
dmesg | grep -i "panic\|error\|fail"  # 查找内核错误信息
[    2.208313] spi-nor: probe of spi1.1 failed with error -2
[    2.267733] optee: probe of firmware:optee failed with error -22
[    5.733034] EXT4-fs (mmcblk1p4): re-mounted. Opts: errors=remount-ro
[   33.058557] vfio-fsl-mc dprc.2: device_add() failed for device dpdmux.0: -17
ls /var/crash  # 检查是否有崩溃日志文件

总结

  • 热重启:通常有明确的软件触发记录(reboot命令、shutdown日志)、文件系统一致、无硬件电源事件、wtmp记录完整。
  • 冷重启:多伴随wtmp记录不完整(无关机日志)、文件系统修复信息、硬件电源丢失日志(IPMI)或内核崩溃信息。

结合多种方法(日志 + 硬件记录 + 系统状态)可更准确判断重启类型。

http://www.xdnf.cn/news/1472455.html

相关文章:

  • Java笔记20240726
  • 【Day 22】94.二叉树的中序遍历 104.二叉树的最大深度 226.翻转二叉树 101.对称二叉树
  • linux上nexus安装教程
  • 从“下山”到AI引擎:全面理解梯度下降(下)
  • 学习心得分享
  • 【OJ】C++ vector类OJ题
  • 使用国内镜像源解决 Electron 安装卡在 postinstall 的问题
  • 【Python - 类库 - BeautifulSoup】(01)“BeautifulSoup“使用示例
  • ESP-idf注册双服务器配置
  • SemiSAM+:在基础模型时代重新思考半监督医学图像分割|文献速递-深度学习人工智能医疗图像
  • 笔记:现代操作系统:原理与实现(2)
  • CLIP学习
  • 【C++】Vector完全指南:动态数组高效使用
  • Transformer核心—自注意力机制
  • 大批项目经理被迫上前线,酸爽
  • 图片在vue2中引用的方式和优缺点
  • 【数字孪生核心技术】什么是倾斜摄影?
  • 遇到 Git 提示大文件无法上传确实让人头疼
  • SVT-AV1编码器中实现WPP依赖管理核心调度
  • 门控MLP(Qwen3MLP)与稀疏混合专家(Qwen3MoeSparseMoeBlock)模块解析
  • 【开题答辩全过程】以 基于JSP的宠物医院管理系统设计为例,包含答辩的问题和答案
  • LTV-1008-TP1-G 电子元器件 LiteOn光宝 发光二极管 核心解析
  • 字符串(2)
  • 一文读懂 RAG 与 KAG:原理、工程落地与开源实战
  • scrypt 密钥派生算法(RFC7914)技术解析及源码示例
  • 流固耦合|08-1外部数据导入
  • 基于Django+Vue3+YOLO的智能气象检测系统
  • 【Python - 类库 - requests】(02)使用“requests“发起GET请求的详细教程
  • Markdown Editor开发文档(附下载地址)
  • AmbiSSL