运维笔记

Cisco IOS-XE 报错修复实战:从踩坑到根治的完整记录

Infrastructure 技术可视化

上周五凌晨两点,我们的监控突然炸了。核心汇聚交换机开始疯狂报错,端口一个接一个进入 err-disabled 状态。整个园区网直接瘫痪了半小时。

说实话,这种 IOS-XE 的诡异报错我这些年没少碰。但每次碰到新花样,还是得老老实实翻文档、抓包、一步步排查。今天就把我这些年踩过的坑和修复经验整理出来,希望能帮兄弟们少走弯路。

常见 IOS-XE 报错类型与根因分析

先给个总览表,后面一个个拆开讲:

报错类型典型症状根因修复难度
%PM-4-ERR_DISABLE端口状态显示 err-disabledBPDU 防护/端口安全触发⭐⭐
%SYS-2-MALLOCFAIL设备响应缓慢,SSH 断开内存泄漏/路由表过大⭐⭐⭐⭐
%OSPF-5-ADJCHGOSPF 邻居反复震荡链路抖动/MTU 不匹配⭐⭐⭐
%SEC-6-IPACCESSLOGP大量 ACL 日志刷屏配置不当/攻击流量
%CRYPTO-4-RECV_PKTIPsec VPN 中断密钥不匹配/SA 超时⭐⭐⭐

实战修复:ERR-DISABLE 端口恢复

这是最常遇到的坑。我见过太多人一看到 err-disabled 就慌,直接拔线重启。

症状

端口状态显示 err-disabled,show interface 输出里能看到具体原因:

GigabitEthernet1/0/24 is down, line protocol is down (err-disabled)
Reason: psecure-violation

根因分析

说白了就是 IOS-XE 的安全机制太敏感。BPDU guard、port security、UDLD 这些功能一旦触发,直接就把端口给你关了。设计初衷是好的——防止环路和攻击,但有时候就是误杀。

修复步骤

  1. 先看具体原因

    show interfaces status err-disabled
    show errdisable detect
    
  2. 手动恢复端口

    interface GigabitEthernet1/0/24
    shutdown
    no shutdown
    

    但这只是临时救火,不解决根本问题。

  3. 配置自动恢复(推荐) 我一般直接配自动恢复,省得半夜爬起来手动搞:

    errdisable recovery cause all
    errdisable recovery interval 300
    
  4. 如果是 BPDU guard 误触 检查端口连接的到底是交换机还是终端设备:

    show spanning-tree interface GigabitEthernet1/0/24 detail
    

    如果是接 PC 的端口误开了 PortFast + BPDU guard,调整配置:

    interface GigabitEthernet1/0/24
    no spanning-tree bpduguard enable
    

内存泄漏修复:MALLOCFAIL 的噩梦

这个坑我上个月刚踩过。一台 Catalyst 9300 跑了 200 多天,突然 SSH 都连不上,show log 里全是 %SYS-2-MALLOCFAIL

症状

%SYS-2-MALLOCFAIL: Memory allocation of 65536 bytes failed from 0x12345678, alignment 0
Pool: Processor Free: 4824 Cause: Memory fragmentation

根因分析

IOS-XE 的内存管理其实挺蛋疼的。跑久了之后,内存碎片化严重,即使总空闲内存还有,但找不到连续的大块内存。常见原因:

  • OSPF/BGP 路由表太大
  • NetFlow 缓存没及时清理
  • 某些 SMU 补丁有内存泄漏

修复步骤

  1. 紧急止血:释放内存

    clear ip route *
    clear ip ospf process
    

    注意:这会导致路由震荡,最好在维护窗口操作。

  2. 定位内存泄漏源

    show processes memory sorted
    show memory allocating-process top
    

    看看哪个进程在疯狂吃内存。我那次发现是 linux_iosd-imand 进程占了 80%。

  3. 重启相关进程(非整机重载) 这是 IOS-XE 比传统 IOS 好的地方:

    hw-module subslot 1/0 reload
    

    只重启线卡模块,不影响控制平面。

  4. 终极方案:升级版本 查了一下 BugID,发现 CSCwf83684 这个坑。Cisco 在 17.6.3 之后才修了。果断升级:

    request platform software package install file flash:cat9k_iosxe.17.09.01.SPA.bin
    

OSPF 邻居震荡:MTU 问题

这个坑我印象太深了。有一次新加了一台交换机,OSPF 邻居死活建不起来,show log 里疯狂刷 ADJCHG。

症状

%OSPF-5-ADJCHG: Process 1, Nbr 10.0.0.2 on GigabitEthernet1/0/1 from LOADING to FULL, Loading Done
%OSPF-5-ADJCHG: Process 1, Nbr 10.0.0.2 on GigabitEthernet1/0/1 from FULL to DOWN, Neighbor Down: Dead timer expired

根因分析

查了半天发现是 MTU 不一致。对端设备 MTU 设了 1500,我们这边是 9000。OSPF 的 DD 包在传输过程中被分片,导致邻居状态反复横跳。

修复步骤

  1. 检查两端 MTU

    show interface GigabitEthernet1/0/1 | include MTU
    
  2. 统一 MTU 配置

    interface GigabitEthernet1/0/1
    mtu 1500
    ip ospf mtu-ignore
    

    注意:mtu-ignore 是临时方案,生产环境最好还是统一 MTU。

FAQ 环节

如何恢复 err-disabled 端口?

最快的方法是 shutdownno shutdown。但建议配置自动恢复:

errdisable recovery cause all
errdisable recovery interval 300

这样 5 分钟后端口会自动恢复,不用人工干预。

当前 Cisco IOS-XE 推荐版本?

截至 2025 年中,17.9.x 和 17.12.x 比较稳。17.15.x 虽然新但坑还不少。我建议:

  • 生产环境:17.9.5 或 17.12.2
  • 测试环境:可以上 17.15.x 尝鲜

ERR-DISABLE 的常见触发原因?

原因触发条件解决方向
psecure-violationMAC 地址冲突调整 port-security 配置
bpduguard收到 BPDU 包确认端口角色
udld光纤单向链路检查光模块/光纤
link-flap端口频繁 UP/DOWN检查物理链路
pppoe-iaPPPoE 认证失败检查 AAA 配置

confreg 0x2142 的作用?

这是一个经典的密码恢复方法。设置配置寄存器为 0x2142 后,设备启动时会跳过 startup-config 加载,直接进到初始配置模式。具体操作:

  1. 重启设备,按 Ctrl+Break 进 ROMmon
  2. 输入 confreg 0x2142
  3. 输入 reset 重启
  4. 启动后 copy startup-config running-config 恢复配置
  5. 改密码后记得 config-register 0x2102 恢复默认

最后说两句

IOS-XE 的报错修复,说白了就是三个字:看日志。别急着百度,先 show logshow tech-support 把现场信息抓全了再动手。

还有,我强烈建议大家在每台设备上配一个日志服务器。不然等出问题的时候再翻缓冲区的日志,可能已经被覆盖了。我们用的是 ELK,你们随意。

遇到搞不定的报错,欢迎在评论区留言。我尽量回复,但别指望秒回——毕竟我也要搬砖。