简介
本文档介绍如何处理在基于IOS的思科接入点(AP)上报告的闪存损坏问题。
先决条件
要求
思科建议您具备以下基本知识:
- AireOS无线LAN控制器(WLC)
- 轻量AP
- Python 2.7(不高)
使用的组件
本文档中的信息基于以下软件和硬件版本:
- Cisco Aironet 1040、1140、1250、1260、1600、1700、2600、2700、3500、3600、3700、700、ASAP801和AP802系列室内接入点
- Cisco Aironet 1520(1522、1524)、1530、1550(1552)、1570和工业无线3700系列室外和工业无线接入点
注意:由于闪存硬件类型,Wave1 AP型号(如1700/2700/3700和2600/3600)与其他AP类型相比,此问题的流行率要高得多。
背景信息
根据FN70330 - IOS AP由于闪存损坏问题而搁浅,由于AP在正常操作中存在大量软件错误,因此某些IOS AP上的闪存文件系统可能会随着时间的推移而损坏。这在升级到WLC后尤为明显,但不一定限于此场景。
AP可能工作正常,为客户端提供服务等,而在此问题状态下,无法轻易检测。
解决方案
在WLC升级之前工作。
为了识别网络上受影响的AP,并在升级之前对其进行修复。您需要运行WLAN轮询器
警告:升级前,请完成本文档的阅读。
WLAN轮询器逻辑
每次运行脚本时,都会验证是否可以访问AP的闪存。
如果可以访问,则运行命令fsck flash:
- 如果一切正常,请转到下一个AP
- 否则,最多重复4次命令。如果失败,脚本将在最终报告中报告此情况,并且此AP有资格恢复。
如果无法访问
如果可访问,AP将检查关键文件的MD5值。
- 如果所有值都正常,请移至下一个AP
- 否则,脚本将在最终报告中报告此情况,并且此AP有资格恢复。
脚本需要运行三次。
- 运行
- 该脚本会构建MD5数据库,查看AP上每个文件的MD5校验和值。特定文件的最终MD5值是在WLC上同一AP系列中命中次数最多的文件。
- 运行
- 脚本将MD5校验和值与其数据库进行比较。如果值匹配,则文件正常,如果不匹配,则标记AP以在第三次运行时恢复
- 运行
- 脚本仅针对在前两个步骤中标记的那些AP触发命令test capwap image capwap。
注意:此恢复方法会导致AP在下载和安装映像后重新加载。确保在维护窗口中运行。
安装/准备WLAN轮询器
1. 下载WLAN轮询器。
注:如果从上述链接下载最新版本的WLAN轮询器工具,则可以跳过步骤2和步骤3。此版本将自动安装WLAN轮询器工具的所有必需组件。如果您有较旧版本的WLAN轮询器(.rar),请执行以下步骤2和3。
2. 将文件移动到要存储WLAN轮询器文件的特定文件夹
3. 有关如何安装脚本的说明,请点击下一链接:
有关Windows 10计算机上的分步指南,请单击此处
有关MAC OS的分步指南,请点击此处
4. 准备“config.ini”文件
完成安装并生成文件后。我们需要编辑文件“config.ini”
指定WLC/AP连接模式
; config global mode for WLC and AP connection: "ssh" or "telnet"
mode: ssh
ap_mode: ssh
指定WLC/AP凭证
; set global WLC credentials
wlc_user: <wlc_user>
wlc_pasw: <wlc_pasw>
; set global AP credentials
ap_user: <ap_user>
ap_pasw: <ap_pasw>
ap_enable: <ap_enable>
对于闪存检查/恢复,我们有以下选项
要识别受影响的AP,请使用:
; ap file system checks (WARNING: recover will force IOS image download and AP reload)
ap_fs_check: True
ap_fs_recover: False
要恢复AP,请使用:
; ap file system checks (WARNING: recover will force IOS image download and AP reload)
ap_fs_check: True
ap_fs_recover: True
指定WLC信息
在本例中,WLC名称为“2504-WLC”。 您可以在WLC监控页面上找到此信息。

; WLC sections must be named as [WLC-
]
[WLC-2504-Rafis]
active: True
ipaddr:
您可以添加多个WLC,如果是,请使用新的WLC信息复制/粘贴上述同步。
注意:您无需指定任何AP列表。脚本从WLC中提取AP。
运行WLAN轮询器
从创建配置文件的目录(上一节,步骤3)。 使用以下命令: wlanpoller —cli-logging
脚本完成后。它将提供如下摘要:
============================================================
Summary
============================================================
Total APs : 1
Processed APs : 1
Failed APs : 0
============================================================
Errors
============================================================
AP MD5 checksum mismatch : 2
AP FSCK recover : 1
============================================================
注意:请记住,脚本需要运行2次才能准确了解有多少个AP受到影响
WLAN轮询器输出
在运行脚本的路径上。它创建以下文件。
- ap_md5_db.json:MD5数据库
- 文件夹日志
- 文件夹数据
它将报告分解为以下路径:<year> / <month> / <day>
文件:<timestamp>_ap_fs.csv — 在AP上执行的检查及其结果的摘要

列说明
- ap_name:AP的名称。
- ap_type:AP型号。
- ap_uptime:AP的正常运行时间(天)。
- ap_ios_ver:IOS 版本.
- fs_free_bytes:闪存文件系统中的可用字节数。
- flash_issue:如果观察到任何闪存损坏,则为true。
- fs_zero_size:当检测到文件系统显示“ — ”时为true(show file system - command)
- fsck_fail:如果文件系统检查失败,则为True。-(fsck flash:-命令)
- fsck_busy:执行flash fsck时,设备或资源正忙。
- fsck_recovered:fsck上发生错误,但在下一个fsck中已修复时为True。
- fsck_attempts:fsck恢复AP的尝试次数(最多4次)
- md5_fail:当md5中至少有一个文件与存储在 数据库。
- rcv_trigger:当检测到问题并启用恢复时,AP尝试从WLC下载映像时为True。
文件:<timestamp>_ap_md5.csv所有文件(在所有AP上)的MD5校验和值的详细信息

列说明
- ap_name:AP的名称。
- ap_type:AP型号。
- ap_uptime:AP的正常运行时间(天)。
- 文件名:IOS映像文件名。
- md5_hash:文件名的md5值。
- is_good:True md5值与存储在db中的值匹配。此文件观察到False md5不匹配。
- is_zero_bytes:如果基于md5checksum的文件名有0个字节,则为true,因此文件不正确。
- md5_error:如果无法获取文件名的md5,则检索md5值时出错。
注意:可能存在WLAN轮询器恢复脚本无法恢复某些AP且这些AP在报告中仍标记为失败的情况。在这些情况下,建议通过telnet/SSH/控制台手动恢复AP到AP CLI。如果您需要有关此流程的帮助,请打开TAC SR。将WLAN轮询器生成的所有输出连接到案例。
搁浅的AP
如果SSH/telnet连接
您可以按照以下步骤尝试恢复AP:
AP# debug capwap console cli
AP# debug capwap client no-reload
- 格式化闪存,如果成功,则可以继续下一步else quit。
AP# format flash:
archive download-sw /overwrite tftp://<IP address>/<file name>
- 检查已加载的恢复映像上的MD5(如果可以继续下一步)
AP# verify /md5 flash:/<image directory>/<image file>
您可以在思科网页上比较CLI值与值。

AP#show boot
AP(config)#boot system flash:/RCV/RCV-image
如果AP Rommon状态
您可以尝试与上面相同的方法,但可以从boot命令进行尝试。您可以在此处执行以下命令:
ap: tftp_init
ap: ether_init
ap: flash_init
ap: format flash:
ap: set IP_ADDR <IP Address>
ap: set NETMASK <mask>
ap: set DEFAULT_ROUTER < default router >
ap: tar -xtract tftp://<IP address>/<file name> flash:
ap: set BOOT flash:/
ap: boot
无法SSH/telnet
退回交换机端口(几次),验证是否有用。
在Windows 10计算机上安装WLAN轮询器的分步指南 — 64位
注意:如果正在下载WLAN轮询器工具的最新版本,可跳过此部分。
- 从以下链接下载并安装Python 2.7.14。
- 从以下链接下载并安装C++ Compiler for Python for Windows客户端。
- 安装后,转到控制面板上的“System Settings(系统设置)”并选择“Advanced System Settings(高级系统设置)”(确保关闭所有Windows终端):

- 在弹出的窗口中,选择“Environment Variables...”

- 在其中,从“系统变量”中选择“路径”变量,然后点击编辑……

- 在该窗口中,将路径添加到安装Python 2.7.14.0的基目录和C:\<Base directory>\Scripts,以便笔记本电脑的命令行识别python命令:点击New并手动添加路径。

关闭所有设置窗口和打开的终端(命令提示符)(如果有)
- 验证是否安装了pip,打开新终端并输入:pip — 版本

另一个选项是检查文件夹中是否有名为pip、pip2或pip2.7的文件:C:\Python27\Scripts

- 如果一切正常,请转至部分升级PIP。步骤 8
- 如果出现错误或找不到文件夹/文件,请继续阅读。
安装PIP
- 关闭终端并从以下链接安装pip
- 下载并保存文件“get-pip.py”。在网站上查找

- 将“get-pip-py”文件复制到文件夹“C:\Python27”
注意:如果从网站复制并粘贴内容,请确保其没有py.txt扩展名,请在文件夹“C:\Python27”上使用dir进行检查,如果发生这种情况,请从终端重命名文件。

使用以下命令重命名文件:

- 在同一文件夹“C:\Python27”上执行:python get-pip.py

- 使用以下命令将PIP升级到最新版本:pip install — 升级pip

- 上述步骤将安装所需的所有数据包。现在打开Windows的命令行,并转到存储.tar.gz WLAN轮询器文件的目录(使用:cd <目录路径>)
- 使用命令“pip install wlanpoller-0.7.1.dev90_md5rcv.tar.gz”安装脚本

- 创建新目录,以存储所有WLAN轮询器信息。
- 在“命令行”中移至该目录并运行命令“wlanpoller —generate-configs”,以创建运行脚本所需的设置变量和配置文件:

单击此处继续使用config.ini文件
在MacBook 10.11或更高版本上安装WLAN轮询器的分步指南
注意:如果正在下载WLAN轮询器工具的最新版本,可跳过此部分。
MAC OS已安装Python。要安装其余数据包,请执行后续步骤
- 移到您拥有WLAN轮询器文件的文件夹:cd <path>
- 运行以下命令后: sudo pip install wlanpoller-<version>.tar.gz对于此,您需要sudo密码(MACBook Admin密码)
- 创建新目录以组织脚本将创建的所有文件
- mkdir <directory name>
- cd <directory name>
- 执行以下命令,以便脚本准备运行脚本所需的所有目录/文件: wlanpoller —generate-configs
单击此处继续使用config.ini文件
WLAN轮询器限制
- WLAN轮询器仅经过测试,可在Windows 10 64位系统和Apple MacBook 10.11或更高版本上获得支持。
- 如果不使用WLANPoller工具的较新版本,则旧版本仅支持Python 2.7版本。
- 如果AP名称具有特殊字符,如
在脚本执行过程中会出现以下错误。
用户需要手动从AP名称中删除特殊字符来解决此问题。