PowerFlex 3.x:遷移 vTree 可能會導致 SDS 死機或當機
요약: 在 vTree 遷移期間,執行 PowerFlex 3.6.7 的 SDS 節點可能會當機,導致資料不可用性 (DU) 事件。在較早的 PowerFlex 版本中,遷移程序可能會無限期停滯,無法完成。
증상
在 PowerFlex 3.6.7 版中,在排定的 vTree 遷移期間,多個 SDS 發生錯誤,導致系統進入資料無法使用狀態。
由於遷移延遲,存儲池 (SP) 容量消耗會快速增加,並可在短時間內達到完全利用率。
MDM 事件:
2026-06-30 07:27:19.340 SDS_DECOUPLED ERROR SDS: SDS11 (id: 64cb920800000006) decoupled. 2026-06-30 07:27:19.465 MDM_DATA_DEGRADED ERROR The system is now in DEGRADED state .... 2026-06-30 07:32:20.638 SDS_DECOUPLED ERROR SDS: SDS9 (id: 64cb920b00000009) decoupled. 2026-06-30 07:32:20.638 SDS_DECOUPLED ERROR SDS: SDS12 (id: 64cb920a00000008) decoupled. 2026-06-30 07:32:21.842 MDM_DATA_FAILED CRITICAL The system is now in DATA FAILURE state. Some data is unavailable ... 2026-06-30 07:32:23.538 DEV_CAPACITY_USAGE_CRITICAL ERROR Capacity usage on Protection Domain PD1, Storage Pool FGSP_01 is CRITICAL. 2026-06-30 07:32:23.605 DEV_CAPACITY_USAGE_FULL ERROR Capacity usage on Protection Domain PD1, Storage Pool FGSP_02 is FULL.
所有受影響的 SDS 節點上的追蹤記錄會產生相同的錯誤堆疊追蹤:
2026/07/01 17:45:33.506630 Panic in file /data/build/workspace/ScaleIO-Common-Job/src/mos/mos_timer.c, line 437, function mosTimerReq_AddByQ, PID 1291427.Panic Expression pReq->state == MOS_TIMER_REQ_STATE__IDLE . /opt/emc/scaleio/sds/bin/sds-3.6.7000.123(mosDbg_PanicPrepare+0xe5) [0x932ce5] /opt/emc/scaleio/sds/bin/sds-3.6.7000.123(mosTimerReq_AddByQ+0x143) [0x917043] /opt/emc/scaleio/sds/bin/sds-3.6.7000.123(vaeCleaner_CleanVae+0x64) [0x668904] /opt/emc/scaleio/sds/bin/sds-3.6.7000.123(head_removeVae+0x170) [0x545e00] /opt/emc/scaleio/sds/bin/sds-3.6.7000.123(head_Update+0x373) [0x546363] /opt/emc/scaleio/sds/bin/sds-3.6.7000.123(contHead_UpdateFull+0x69) [0x4db689] /opt/emc/scaleio/sds/bin/sds-3.6.7000.123(contCmd_AddHead+0x18a) [0x60d85a] /opt/emc/scaleio/sds/bin/sds-3.6.7000.123(contCmd_AddHeadGroup+0x100) [0x61b630] /opt/emc/scaleio/sds/bin/sds-3.6.7000.123(contCmd_NewRequest+0x15fd) [0x62b96d] /opt/emc/scaleio/sds/bin/sds-3.6.7000.123(contNet_RecvRequest+0xd0) [0x4ce880]
若 PowerFlex 版本早於 3.6.7,則在排定的 vTree 遷移期間,遷移進度會無回應且無法完成。
在執行儲存工作的 PowerFlex Manager UI > 中,會顯示「正在無休止地載入」:

query_vtree_migration 輸出顯示進度百分比不變:
scli --query_vtree_migration --volume_id 53b80e00000000d1
VTree ID: ba46bf57000000d1 Name: PDC-GC-LNX-N-01-PFSP01-01-V043
Storage Pool 5f2f4acc00000000 Name: PDC-FLEX-LNX-SP01
Protection Domain 908ff43700000000 Name: PDC-FLEX-LNX-PD01
Data layout: Medium granularity
Provisioning: Thin
Total capacity in use: 504.7 GB (516787 MB)
Total user data: 504.7 GB (516787 MB)
Total base user data: 504.7 GB (516787 MB)
Total snapshots user data: 0 Bytes
VTree migration info:
Migration status: Migrating
Source: Storage Pool: PDC-FLEX-LNX-SP01 ID: 5f2f4acc00000000 Protection Domain: PDC-FLEX-LNX-PD01 ID: 908ff43700000000
Destination: Storage Pool: PDC-FLEX-LNX-SP03 ID: 5f2fe70d00000004 Protection Domain: PDC-FLEX-LNX-PD03 ID: 9090907800000003
Conversion type: No conversion
Queue position: 1
Progress percentage : 34%
影響
在 3.6.7 之前的版本上,磁碟區遷移永不結束,SP 容量使用率達到極低或更高,而且應用程式可能會遇到 I/O 錯誤。
版本 3.6.7 上,資料不可用。
원인
此問題是由多線程爭用條件引起的,涉及卷遷移操作期間卷分配元素 (VAE) 清理程式元件內的共用計時器機制。
在 3.6.7 之前的 PowerFlex 版本中,會使用異步清理程序在遷移後從舊 SP 位置刪除資料。在極少數情況下,例如併發卷管理操作、同時刪除卷、高 I/O 負載或網路不穩定,此過程可能會遇到爭用條件,從而導致遷移無限期停滯。
為了解決這個問題,在版本 3.6.7 中引入了增強的監視機制。這種安全機制具有一個計時器,旨在檢測停滯的VAE清理器線程,並主動使SDS服務崩潰,以防止數據損壞或長時間停滯,類似於系統處理卡住的I / O或MDM命令的方式。
但是,在此修復程式的初始實現中,監控計時器在遷移數據構建期間僅初始化一次,並在所有後續的VAE清理器調用中全域共用。當多個後台線程嘗試在繁重的遷移工作負載期間同時訪問此單個共用計時器時,將觸發新的爭用條件。這種併發訪問會導致跟蹤機制錯誤地將VAE清理器標記為卡住,從而導致意外的SDS服務崩潰和數據可用性的局部中斷,從而導致數據不可用。
해결
永久修正 (建議)
將叢集升級至 PowerFlex 3.6.7.1 或更新版本。包括對VAE清理器和計時器爭用條件的修復。
因應措施 (如果無法立即執行升級)
在 3.6.7 之前的版本
- 在主要 MDM 上,前往位於 的追蹤記錄目錄
/opt/emc/scaleio/mdm/logs/。若要尋找目前的追蹤紀錄,請執行ls -ltr,所以最新的trc.z.*日誌列在清單底部。 - 由於紀錄已壓縮,請使用
trace_decompress公用程式位於/opt/emc/scaleio/mdm/bin/
tail -f <current_trace_log> | /opt/emc/scaleio/mdm/bin/trace_decompress
- 篩選 SDS ID (例如
TGT) 條目。使用grep要尋找的命令:
tail -f <current_trace_log> | /opt/emc/scaleio/mdm/bin/trace_decompress | grep volumeBlock_HandleQueryCleanVaeResponse
- 識別
TGT。在篩選的輸出中尋找類似於以下內容的行:
TGT 41a903f100000036 not done yet
如果 TGT ID 會隨著時間的推移保持一致,它可能對應至所涉及的 SDS 節點。重新執行步驟 3 以確認維持一致。
- 執行下列命令以列出所有 SDS 節點,並符合
TGT具有 SDS 名稱/IP 位址的 ID:
scli --query_all_sds
- 獲得所需資訊后,您可以
SSH至該 SDS,然後執行以下命令重新啟動 SDS 服務:
pkill sds
在版本 3.6.7 上
- 序列化卷管理操作 - 一次僅運行一個刪除、調整大小或遷移。
- 遷移執行時,減少受影響保護網域上的 I/O 負載。
- 避免大量 vTree 遷移;將它們分成小組進行批處理。
- 當網路顯示不穩定時,請勿暫停或取消遷移。
這些操作降低了併發計時器使用的可能性,從而減少了緊急情況的發生。
受影響的版本
PowerFlex Core 3.x.x.x
已修正問題的版本
PowerFlex Core 3.6.7.1