簡介
本檔案介紹如何處理Cisco IOS存取點(AP)上報告的快閃記憶體損毀問題。
必要條件
需求
思科建議您瞭解以下基本知識:
- AireOS無線LAN控制器(WLC)
- 輕量AP
- Python 2.7 (沒有更高版本)
採用元件
本文中的資訊係根據以下軟體和硬體版本:
- Cisco Aironet 1040、1140、1250、1260、1600、1700、2600、2700、3500、3600、3700、700、AP801和AP802系列室內存取點
- Cisco Aironet 1520 (1522、1524)、1530、1550 (1552)、1570和工業無線3700系列室外和工業無線存取點
註:與快閃記憶體硬體型別導致的其他AP型別相比,在此問題上的Wave1 AP型號(如1700/2700/3700和2600/3600)的流行率要高得多。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
根據FN70330 - Cisco IOS AP由於快閃記憶體損壞問題而擱置,由於多個軟體Bug和AP正常操作,某些Cisco IOS AP上的快閃記憶體檔案系統可能會隨時間而損壞。特別是對WLC執行升級但不一定限於此情況後,會看到這種情況。
AP在處於不易檢測的此問題狀態時工作並為客戶端提供服務。
解決方案
在WLC升級前修復
為了確定網路中受影響的AP,並在升級前修復它們。 您需要運行WLAN輪詢器。
注意:在升級之前,請閱讀此整份文檔。
WLAN輪詢邏輯
每次運行該指令碼時,它都會驗證AP快閃記憶體是否可以訪問。
如果可以訪問,則運行fsck flash命令:
如果一切正常,則轉到下一個AP。
- 否則,重複該命令最多4次。如果發生故障,指令碼可以在最終報告中報告此情況,並且此AP符合恢復條件。
如果無法存取
- 該指令碼在其最終報告中標籤AP,並且此AP符合恢復條件。
如果可以訪問,AP可以檢查關鍵檔案的MD5值。
如果所有值都正常,則移至下一個AP。
- 否則,指令碼可以在最終報告中提供此資訊,並且此AP有資格恢復。
指令碼需要運行三次。
- 執行
- 該指令碼根據AP上每個檔案的MD5校驗和值構建MD5資料庫。特定檔案的最終MD5值是WLC上同一AP系列中命中率較高的值。
- 執行
- 該指令碼將MD5校驗和值與資料庫進行比較。如果值匹配,則檔案為ok;如果值不匹配,則會標籤AP以便在第三次運行中恢復。
- 執行
- 該指令碼僅針對之前兩個步驟中標籤的AP觸發命令test capwap image capwap。
注意:此恢復方法會在下載並安裝映像後導致AP重新載入。確保在維護窗口中運行它。
安裝/準備WLAN輪詢器
1. 下載WLAN輪詢器工具。
注意:如果從上一個連結下載最新版本的WLAN輪詢器工具,則可以跳過步驟2和步驟3。此版本可以自動安裝您的WLAN輪詢器工具所需的所有元件。如果您有較舊版本的WLAN Poller(.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 can force Cisco IOS image download and AP reload)
ap_fs_check: True
ap_fs_recover: False
要恢復AP,請使用:
; ap file system checks (WARNING: recover can force Cisco IOS image download and AP reload)
ap_fs_check: True
ap_fs_recover: True
指定WLC資訊
在本例中,WLC名稱為2504-WLC。您可以在WLC Monitor頁面找到此資訊。
; WLC sections must be named as [WLC-<wlcname>]
[WLC-2504-Rafis]
active: True
ipaddr: <wlc-ip-addr>
您可以新增多個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數量的準確資訊。
無線區域網輪詢器輸出
在運行指令碼的路徑上。它會建立這些檔案。
- ap_md5_db.json: MD5資料庫
- 資料夾記錄
- 它將WLAN輪詢器顯示的所有輸出資訊儲存在終端上。
- 資料夾資料
- 它將報告分為以下路徑:<年> / <月> / <日>
檔案: <timestamp>_ap_fs.csv -對AP執行的檢查及其結果的摘要。
欄說明
- ap_name:AP的名稱。
- ap_type:AP模型。
- ap_uptime:AP的正常運行時間(天)。
- ap_ios_ver:Cisco IOS版本。
- fs_free_bytes:快閃記憶體檔案系統中的可用位元組數。
- flash_issue:如果發現任何快閃記憶體損壞,則為True。
- fs_zero_size:當檢測到快閃記憶體掛起時,為True,檔案系統顯示「-」- (show file system -命令)。
- fsck_fail:如果檔案系統檢查失敗,則為True。- (fsck flash: -命令)。
- fsck_busy:當快閃記憶體fsck時,裝置或資源為true忙碌。
- fsck_recovered:當fsck發生錯誤但已在下一個fsck中修復時,則為True。
- fsck_attempts:嘗試恢復AP的fsck次數(最多4次)。
- md5_fail:當md5至少有一個檔案與儲存在資料庫中的檔案不同時,則為True。
- rcv_trigger:當檢測到問題且已啟用恢復時,AP嘗試從WLC下載映像時為True。
檔案: <timestamp>_ap_md5.csv所有檔案(在所有AP上)的MD5校驗和值的詳細資訊。
欄說明
- ap_name:AP的名稱。
- ap_type:AP模型。
- ap_uptime:AP的正常運行時間(天)。
- 檔名:Cisco IOS映像檔名。
- md5_hash:檔名的md5值。
- is_good:true md5值與儲存在db中的值相符。發現此檔案的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
- 如果成功則格式化flash,然後您可以繼續下一步,否則結束。
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:/<file name>
ap: boot
無法SSH/Telnet
退回交換機埠,多次驗證此操作是否有用。
在Windows 10上安裝WLAN輪詢器的分步指南
注意:如果下載最新版本的WLAN輪詢器工具,則可以跳過此部分。
- 從此連結下載並安裝Python 2.7.14。
- 從此連結下載並安裝C++ Compiler for Python for Windows客戶端。
- 安裝完成後,請到「控制檯」上的「系統設定」,然後選取「進階系統設定」(請確定所有視窗終端機都已關閉):
- 在彈出窗口中,選擇Environment Variables。
- 在該示例中,請從System variables中選擇Path變數,然後按一下Edit。
- 在該窗口中,將路徑增加到安裝Python 2.7.14.0的基礎目錄和C:\<Base directory>\Scripts,以便筆記型電腦的命令列可辨識python命令。按一下新建並手動增加路徑。
關閉所有設定窗口,打開終端(命令提示符)(如果有)。
- 驗證是否已安裝pip,打開一個新終端並輸入pip —version:
另一個選項是檢查資料夾C:\Python27\Scripts 上是否存在名為pip或pip2或pip2.7的檔案:
- 如果一切正常,請轉至upgrade pip部分,第8步。
- 如果發生錯誤或找不到資料夾/檔案,請繼續閱讀。
安裝pip
- 關閉終端並從下一連結安裝pip。
- 下載並儲存檔案get-pip.py。 在網站上尋找:
- 將get-pip-py檔案複製到資料夾C:\Python27。
注意:如果從網站複製並貼上內容,請確保其副檔名不是py.txt,請使用C:\Python27資料夾中的目錄進行檢查。如果發生這種情況,請從終端重新命名該檔案。
使用下一個指令重新命名檔案:
- 在同一資料夾C:\Python27上,執行python get-pip.py。
- 使用下一個命令將PIP升級到最新版本:pip install —upgrade pip。
- 以上步驟可以安裝所需的所有資料包。現在請開啟Windows的命令列,並移至您儲存.tar.gz WLAN輪詢器檔案的目錄(使用: cd <目錄路徑>)。
- 使用命令pip install wlanpoller-0.7.1.dev90_md5rcv.tar.gz安裝指令碼。
- 建立一個要儲存所有WLAN輪詢器資訊的新目錄。
- 在命令列中,轉到該目錄並運行命令wlanpoller —generate-configs,以建立運行指令碼所需的設定變數和配置檔案:
按一下此處以繼續config.ini檔案。
在MacBook上安裝WLAN輪詢器的分步指南
注意:如果下載最新版本的WLAN輪詢器工具,則可以跳過此部分。
MAC OS已安裝python。要安裝剩餘的資料包,請執行以下步驟:
- 移至您有WLAN輪詢器file: cd <path>的資料夾。
- 執行此命令後:sudo pip install wlanpoller-<version>.tar.gz。為此,您需要使用sudo密碼(MACBook管理員密碼)。
- 建立新目錄以組織命令檔可以建立的所有檔案。
- 執行下一個命令,以便指令碼準備運行指令碼所需的所有目錄/檔案:wlanpoller —generate-configs。
按一下此處以繼續config.ini檔案。
WLAN輪詢器限制
- WLAN Poller只在Windows 10 64位系統和Apple MacBook 10.11或更高版本上測試支援。
- 如果未使用新版本的WLANPoller工具,則舊版本僅支援Python 2.7版本。
- 如果AP名稱包含特殊字元(如),則會在指令碼執行過程中看到下一個錯誤。
- 使用者需要手動從AP名稱中刪除特殊字元才能解決此問題。
相關資訊