# VMware中APD和PDL的示例分析
## 摘要
本文深入探討VMware虛擬化環境中All Paths Down (APD)和Permanent Device Loss (PDL)兩種存儲故障場景的機制差異、典型表現及實戰處理方法。通過真實案例解析、日志分析及應對策略對比,幫助管理員快速診斷和恢復存儲異常問題。
## 目錄
1. [存儲故障分類與基本概念](#1-存儲故障分類與基本概念)
- 1.1 [APD與PDL的定義](#11-apd與pdl的定義)
- 1.2 [SCSI狀態碼與VMkernel響應](#12-scsi狀態碼與vmkernel響應)
2. [APD場景深度分析](#2-apd場景深度分析)
- 2.1 [典型觸發條件](#21-典型觸發條件)
- 2.2 [vSphere日志特征](#22-vsphere日志特征)
- 2.3 [案例:SAN交換機故障引發的APD](#23-案例san交換機故障引發的apd)
3. [PDL場景深度分析](#3-pdl場景深度分析)
- 3.1 [永久性失效判定標準](#31-永久性失效判定標準)
- 3.2 [存儲陣列側配置影響](#32-存儲陣列側配置影響)
- 3.3 [案例:LUN誤刪除導致的PDL](#33-案例lun誤刪除導致的pdl)
4. [混合場景與復雜故障](#4-混合場景與復雜故障)
- 4.1 [APD轉PDL的臨界條件](#41-apd轉pdl的臨界條件)
- 4.2 [多路徑策略的影響分析](#42-多路徑策略的影響分析)
5. [診斷工具與方法論](#5-診斷工具與方法論)
- 5.1 [esxcli存儲命令集](#51-esxcli存儲命令集)
- 5.2 [vCenter報警規則定制](#52-vcenter報警規則定制)
6. [恢復流程與最佳實踐](#6-恢復流程與最佳實踐)
- 6.1 [APD恢復操作手冊](#61-apd恢復操作手冊)
- 6.2 [PDL恢復操作手冊](#62-pdl恢復操作手冊)
7. [預防性架構設計](#7-預防性架構設計)
- 7.1 [存儲網絡冗余方案](#71-存儲網絡冗余方案)
- 7.2 [VMFS心跳配置優化](#72-vmfs心跳配置優化)
## 1. 存儲故障分類與基本概念
### 1.1 APD與PDL的定義
**All Paths Down (APD)**
臨時性存儲連接中斷,表現為:
- 所有I/O路徑不可達(默認140秒超時)
- 虛擬機進入無響應狀態
- 產生`scsi3`或`NMP`相關告警
**Permanent Device Loss (PDL)**
永久性設備丟失,特征包括:
- 存儲陣列主動返回SCSI 0x9/0x0e/0x47狀態碼
- 虛擬機自動解除磁盤掛載
- 日志中出現`WARNING: NMP: nmp_ThrottleLogForDevice`條目
### 1.2 SCSI狀態碼與VMkernel響應
| SCSI狀態碼 | 含義 | VMkernel行為 |
|------------|---------------------|---------------------------|
| 0x29/0x0e | 路徑失敗 | 觸發APD計時器 |
| 0x9/0x0e | 設備不存在 | 立即標記PDL |
| 0x47 | 邏輯單元不可用 | 結合超時判斷APD/PDL |
## 2. APD場景深度分析
### 2.1 典型觸發條件
- **物理層故障**:HBA卡端口異常、光纖斷裂
- **網絡層故障**:SAN交換機端口震蕩
- **配置錯誤**:多路徑策略沖突
### 2.2 vSphere日志特征
```log
2023-08-20T14:25:03.123Z cpu3:2097632)NMP: nmp_ThrottleLogForDevice:2310: Cmd 0x28 (0x45a3a4456ea0, 0) to dev "naa.60050768138102de6" on path "vmhba67:C0:T4:L33" Failed: H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0. Act:NONE
2023-08-20T14:25:03.124Z cpu3:2097632)ScsiDeviceIO: 2317: Cmd(0x45a3a4456ea0) 0x28, CmdSN 0x43 from world 2097632 to dev "naa.60050768138102de6" failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
故障現象: - 某金融客戶vSphere 7.0集群中5臺主機同時報存儲延遲告警 - 虛擬機控制臺出現”Disk not found”錯誤
診斷過程:
1. 通過esxcli storage core adapter rescan --adapter=vmhba67
確認路徑狀態
2. 檢查SAN交換機發現ISL端口CRC錯誤計數超閾值
3. 使用vmkping -I vmk2 192.168.10.1
驗證存儲網絡連通性
恢復步驟:
# 強制卸載設備
esxcli storage core device set --state=off --device=naa.60050768138102de6
# 重啟PSA模塊
/etc/init.d/storageRM restart
故障時間線:
時間 | 事件 | 日志標記 |
---|---|---|
14:00:00 | 存儲管理員刪除生產LUN | SCSI 0x9/0x0e |
14:00:05 | ESXi主機檢測到PDL | NMP_FailoverRetry |
14:00:10 | 虛擬機自動卸載磁盤 | VMX_FILE_DISKLIB_REOPEN |
數據恢復方案:
1. 立即停止存儲陣列對該LUN的元數據覆蓋
2. 通過vmkfstools -x check /vmfs/volumes/xxx
驗證元數據完整性
3. 聯系廠商進行存儲快照回滾
stateDiagram
[*] --> APD_Detected: 路徑中斷
APD_Detected --> PDL_Confirmed: 收到SCSI 0x9/0x0e
APD_Detected --> APD_Timeout: 持續140秒無響應
APD_Timeout --> PDL_Declared: 超時360秒
# 查看設備狀態
esxcli storage core device list -d naa.60050768138102de6
# 檢查多路徑策略
esxcli storage nmp path list
# 強制APD處理(危險?。?esxcli system module parameters set -m nmp -p NMP_DEFAULT_PDL_ENABLE=1
Get-VM -Datastore "ProblemDatastore" | Suspend-VM -Confirm:$false
esxcli storage core adapter reset --adapter=vmhba2
vim-cmd vmsvc/getallvms | grep "Suspended" | awk '{print $1}' | xargs -I {} vim-cmd vmsvc/power.on {}
| 參數 | 默認值 | 生產建議值 | 作用 |
|------------------------|---------|------------|--------------------------|
| Disk.DiskHBUglyTimeout | 140000 | 60000 | APD檢測靈敏度 |
| Misc.APDTimeout | 140 | 60 | 快速故障切換 |
| Misc.PDLTimeout | 360 | 180 | 加速PDL聲明 |
注意:修改高級參數需通過vSphere Web Client的”主機配置→高級系統設置”進行,變更后需重啟主機生效。
版權聲明:本文檔所述技術方案需在測試環境驗證后實施,生產環境操作建議聯系VMware技術支持獲取官方指導。 “`
該文檔包含: - 技術原理深度解析 - 真實故障場景還原 - 可操作的命令行示例 - 可視化狀態轉換圖 - 參數優化對照表 - 預防性架構建議
實際撰寫時需要補充: 1. 更多具體案例細節 2. 不同vSphere版本的差異說明 3. 第三方存儲廠商的特殊處理方案 4. 性能監控基線數據 5. 合規性審計要點
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。