共用方式為


Windows 記憶體卸載數據傳輸

Windows 卸除資料傳輸 (ODX) 是加速伺服器複製和移動作業的功能。 從 Windows Server 2012 開始,NTFS 磁碟區支援它。

本文說明存儲設備觀點中的 ODX。 如需文件系統和小型篩選的相關信息,請參閱 卸載數據傳輸

概觀

Windows ODX 在文件傳輸期間不複製大量數據,而是引進了令牌化作業,以行動記憶體裝置上的數據。 來源檔案和目的地檔案可以位於下列任何位置:

  • 在同一個磁碟區上。
  • 在相同電腦所裝載的兩個不同磁碟區上。
  • 透過伺服器消息塊(SMB2 或 SMB3)在本機磁碟區和遠端磁碟區上。
  • 透過SMB2或SMB3在兩部不同機器上的兩個磁碟區上。

下圖顯示支援 ODX 之儲存裝置上的卸除複製作業程式。

使用 ODX 複製卸載作業。

  1. 複製應用程式會將卸除讀取要求傳送至來源記憶體裝置的複製管理員。
  2. 來源複製管理員會傳回令牌。 令牌是要複製之數據的表示法。
  3. 應用程式會將具有令牌的卸除寫入要求傳送至目的地存儲設備的複製管理員。
  4. 儲存器陣列複製管理員會將資料從來源裝置移至目的地裝置,並將卸除寫入結果傳回至應用程式。

識別支援 ODX 的來源和目的地

若要支援 ODX,記憶體數位必須針對支援 ODX 的記憶體陣列實作相關的 T10 標準規格,包括卸除具有令牌的讀取和寫入作業。 在 LUN 裝置列舉(系統開機或隨插即用事件)期間,Windows 會透過下列步驟收集或更新存放裝置目標裝置的 ODX 功能資訊。

  1. 查詢複製卸除功能。
  2. 收集複製卸除作業和限制所需的參數。

根據預設,如果來源和目的地 LUN 都支援 ODX,Windows 會先嘗試複製作業的 ODX 路徑。 如果存儲設備失敗的初始 ODX 要求,Windows 會將來源和目的地 LUN 的組合標示為「無法支援 ODX」路徑,並遵循舊版複製檔案程式代碼路徑。

ODX 讀取/寫入作業

同步命令採用和 API

使用下列演算法來分割大型卸除寫入要求,以確保有健全的同步卸除寫入。

  • 如果目標存放裝置未提供最佳傳輸大小,請將最佳傳輸大小設定為 64 MB。
  • 如果目標裝置所設定的最佳傳輸大小大於 256 MB,請將最佳傳輸大小設定為 256 MB。
  • 記憶體目標裝置所指定的最佳傳輸大小大於零,且小於 256 MB。

同步卸除讀取和卸除寫入 SCSI 命令可減少 MPIO 和叢集故障轉移案例的複雜性。 Windows 預期複製管理員會在 4 秒內完成同步卸除讀取/寫入 SCSI 命令。

應用程式可以使用 FSCTLDSM IOCTLSCSI_PASS_THROUGH API 來與記憶體數位互動,並執行複製卸載作業。 為了避免數據損毀或系統不穩定,Windows 會限制應用程式直接寫入檔系統掛接的磁碟區,而不需要先取得磁碟區的獨佔存取權。 由於寫入磁碟區的條件可能會與文件系統寫入發生衝突,因此需要這項限制。 發生這類衝突時,磁碟區的內容可能會處於不一致的狀態。

卸除讀取作業

應用程式的卸除讀取要求可以指定令牌存留期(閑置逾時)。 如果應用程式將令牌存留期設定為零,則會使用預設無活動定時器作為令牌存留期。 記憶體陣列的複製管理員會根據其閒置逾時值和認證來維護及驗證令牌。 Windows 主機也會將檔案片段數目限制為 64。 如果卸除讀取要求包含超過 64 個片段,Windows 會失敗複製卸除要求,並回復到傳統的複製作業。

完成卸除讀取要求之後,複製管理員會準備接收卸除讀取結果命令的數據表示法 (ROD) 令牌。 ROD 令牌欄位會指定使用者數據和保護信息的時間點表示法。 ROD 可以是「獨佔開啟」或「以共用開啟」格式的用戶數據。 複製管理員可以根據其 ROD 原則設定使令牌失效。 如果 ROD 是「以獨佔方式開啟」進行複製卸載作業,當 ROD 修改或移動時,ROD 令牌可能會失效。 如果 ROD 採用「以共享開啟」格式,則 ROD 令牌在修改 ROD 時仍有效。 ROD 令牌是 512 個字節,格式如下:

以位元組為單位的大小 令牌內容
4 ROD 令牌類型
508 ROD 令牌標識碼

由於 ROD 令牌只會被儲存裝置數位授與並取用,因此其格式不透明、唯一且高度安全。 如果令牌已修改、未驗證或過期,複製管理員可以在卸除寫入作業期間使令牌失效。 卸除讀取作業傳回的 ROD 令牌具有非使用中逾時值,指出複製管理員必須保留令牌的有效秒數,以供下一次使用令牌使用方式使用。

卸除寫入作業

應用程式從複製管理員接收 ROD 令牌之後,它會使用 ROD 令牌將卸載寫入要求傳送至記憶體陣列的複製管理員。 當同步卸除寫入命令傳送至目標裝置時,Windows 預期複製管理員會在 4 秒內完成命令。 如果命令因命令逾時或其他錯誤狀況而終止,Windows 會失敗命令。 應用程式會根據傳回的狀態代碼回到舊版複製作業。

卸除寫入要求可以使用一或多個接收卸除寫入結果命令來完成。 如果卸除寫入部分完成,複製管理員會傳回估計延遲和傳輸計數數目,以指出複製進度。 傳輸計數的數目會指定連續邏輯區塊數目,這些區塊是從來源寫入目的地媒體時沒有錯誤寫入的。 複製管理員可以在循序或散佈/收集模式中執行卸除寫入。

發生寫入失敗時,複製進度會計算從第一個邏輯區塊到失敗區塊的連續邏輯區塊。 用戶端應用程式或複製引擎會繼續從寫入失敗區塊卸除寫入。 卸除寫入完成時,複製管理員會使用下列專案完成接收 ROD 令牌資訊命令:

  • 估計狀態更新延遲設定為零。
  • 數據傳輸計數的進度為 100%。

如果接收卸除寫入結果傳回數據傳輸計數的相同進度,Windows 會在四次重試之後,將複製作業失敗回應用程式。

用戶端應用程式也可以使用已知的 ROD 令牌來執行卸載寫入作業,這是具有已知數據模式和令牌格式的預先定義 ROD 令牌。 一個常見的實作稱為零令牌。 用戶端應用程式可以使用零個令牌,以零填入一或多個邏輯區塊範圍, 並加上零。 如果已知令牌不受支援或可辨識,複製管理員會因為「無效令牌」而讓卸除寫入要求失敗。 已知的 ROD 令牌是 512 位元組,格式如下:

以位元組為單位的大小 令牌內容
4 ROD 令牌類型
2 已知模式
506 ROD 令牌標識碼

在具有已知 ROD 令牌的卸除寫入中,用戶端應用程式無法使用卸除讀取來要求已知的令牌。 複製管理員會根據自己的原則來驗證和維護已知的ROD令牌。

ODX 實作的效能微調參數

ODX 的效能不取決於伺服器與儲存數位之間的用戶端-伺服器網路或儲存局域網路 (SAN) 的傳輸連結速度。 記憶體陣列的複製管理員和裝置伺服器會行動資料。

並非所有的複製卸除優點都來自 ODX 技術。 例如,1-Gbit iSCSI 儲存陣列的複製管理員可能會在10秒內完成3 GB的檔案複本,數據傳輸速率將大於每秒300 MB。 數據傳輸速率已經超過 1-Gbit 乙太網路介面的最大理論傳送速率。

此外,特定大小的檔案複製效能可能無法受益於 ODX 技術。 若要將效能優化,使用 ODX 可以限制為允許的最小檔案大小和最大複製長度。 注意:

  • Windows 會設定複製引擎中 256 KB 的複製卸除作業所需的最小檔案大小需求。 如果檔案小於 256 KB,複製引擎會回復為舊版複製程式。

  • Windows 主機會使用令牌傳輸大小上限和最佳傳輸計數來準備卸除讀取或寫入 SCSI 命令的最佳傳輸大小。 區塊數目的總傳輸大小不得超過令牌傳輸大小上限。 如果記憶體數位未報告最佳傳輸計數,Windows 會使用 64 MB 做為預設計數。

最佳和最大傳輸長度參數會指定一個範圍描述元中的最佳和最大區塊數目。 複製卸除應用程式可以符合這些參數,以達到最佳的檔案傳輸效能。

ODX 錯誤處理和高可用性支援

當 ODX 作業失敗檔案複製要求時,複製引擎和 Windows 檔案系統 (NTFS) 會回復為舊版複製作業。 如果卸載作業中間的複製卸除失敗,複製引擎和NTFS會從卸除寫入的第一個失敗點繼續執行舊版複製作業。

ODX 錯誤處理

ODX 會根據記憶體陣列的功能使用強固的錯誤處理演算法。 如果支援 ODX 的路徑中複製卸除失敗,Windows 主機預期應用程式會回復為舊版複製作業。 此時,Windows 複製引擎已實作「傳統複製後援」機制。 複製卸除失敗之後,NTFS 會將來源和目的地 LUN 標示為無法支援 ODX 的三分鐘。 經過這段時間之後,Windows 複製引擎會重試 ODX 作業。 記憶體數位可以使用這項功能,在高度緊張的情況下,在某些路徑中暫時停用 ODX 支援。

MPIO 和叢集伺服器組態中的 ODX 故障轉移

必須從相同的記憶體連結完成或取消卸除讀取和寫入作業(I_T連結)。

當 MPIO 或叢集伺服器故障轉移在同步卸除讀取或寫入作業期間發生時,Windows 會處理故障轉移,如下所示:

  • 如果發生 MPIO 路徑故障轉移,Windows 會重試失敗的 ODX 命令。 如果命令再次失敗,Windows:

    • 在叢集伺服器的一部分時起始叢集伺服器節點故障轉移。
    • 將 LUN 重設為儲存設備,如果叢集伺服器故障轉移不是選項,則會將 I/O 失敗狀態傳回給應用程式。
  • 在叢集伺服器組態中,叢集記憶體服務會故障轉移至下一個慣用叢集節點,然後繼續叢集記憶體服務。 卸除應用程式必須是叢集感知,才能在叢集記憶體服務故障轉移之後重試卸除讀取/寫入命令。

如果卸除讀取或寫入命令在 MPIO 路徑和叢集節點故障轉移之後失敗,Windows 會在故障轉移之後對存儲設備發出 LUN 重設。 存儲設備會終止 LUN 上所有未處理的命令和擱置作業。

目前,Windows 不會從記憶體堆疊發出異步卸除讀取或寫入 SCSI 命令。

ODX 使用模型

跨實體磁碟、虛擬硬碟和SMB共用磁碟的ODX

若要執行 ODX 作業,應用程式伺服器必須具有讀取/寫入許可權的來源 LUN 和目的地 LUN 的存取權。 複製卸除應用程式會發出卸除讀取要求給來源 LUN,並從來源 LUN 的複製管理員接收令牌。 複製卸除應用程式會使用令牌,對目的地 LUN 發出卸除寫入要求。 然後,複製管理員會透過記憶體網路將數據從來源 LUN 移至目的地 LUN。 下圖說明卸除數據傳輸的最基本支援來源和目的地目標。

基本支援的 ODX 來源和目的地目標。

使用一部伺服器進行 ODX 作業

在單一伺服器組態中,複製卸除應用程式會從相同的伺服器系統發出卸除讀取和寫入要求。

來源伺服器(或來源 VM)可以存取來源 LUN(VHD 或實體磁碟)和目的地 LUN(VHD 或實體磁碟)。 複製卸除應用程式會發出卸除讀取要求給來源 LUN,並從來源 LUN 接收令牌。 複製卸除應用程式接著會使用令牌向目的地 LUN 發出卸除寫入要求。 複製管理員會將數據從來源 LUN 移至相同記憶體陣列內的目的地 LUN。

具有兩部伺服器的 ODX 作業

在兩部伺服器組態中,有兩部伺服器和多個記憶體陣列是由相同的複製管理員所管理。

  • 一部伺服器 (或 VM) 是來源 LUN 的主機,另一部伺服器 (或 VM) 則是目的地 LUN 的主機。 來源伺服器會透過SMB通訊協定與應用程式用戶端共用來源LUN,而目的地伺服器也會透過SMB通訊協定與應用程式用戶端共用目的地 LUN。 因此,應用程式用戶端可以存取來源 LUN 和目的地 LUN。
  • 來源和目的地記憶體陣列是由 SAN 組態中的相同複製管理員所管理。
  • 從應用程式用戶端應用程式,複製卸除應用程式會發出從來源 LUN 卸除讀取要求,並從來源 LUN 接收令牌,然後使用令牌卸除寫入要求至目的地 LUN。 複製管理員會將數據從來源 LUN 移至目的地 LUN,橫跨兩個不同位置中的兩個不同記憶體陣列。

大規模數據遷移

大規模數據遷移是將大量數據匯入的程式,例如資料庫記錄、電子表格、文本檔、掃描的檔,以及影像到新的系統。 數據遷移可能是由記憶體系統升級、新的資料庫引擎,或應用程式或商務程式中的變更所造成。 當新系統的複製管理員也可以管理舊版系統時,ODX 可用來將數據從舊版記憶體系統遷移至新的記憶體系統。

  • 一部伺服器是舊版存放裝置系統的主機,另一部伺服器則是新存儲設備系統的主機。 來源伺服器透過SMB通訊協定將來源LUN共用為資料遷移應用程式用戶端,而目的地伺服器透過SMB通訊協定將目的地LUN共用為資料遷移應用程式用戶端。 因此,應用程式用戶端可以存取來源和目的地 LUN。
  • 舊版記憶體系統和新的記憶體系統是由 SAN 組態中的相同複製管理員所管理。
  • 從數據遷移應用程式用戶端應用程式系統,複製卸除應用程式會發出卸載讀取要求給來源 LUN,並從來源 LUN 接收令牌。 然後,應用程式會發出卸除寫入要求,並將令牌傳送至目的地 LUN。 複製管理員會將數據從來源 LUN 移至目的地 LUN,橫跨兩個不同的儲存系統,位於兩個不同的位置。
  • 巨量數據遷移也可以與同一個位置的一部伺服器一起運作。

階層式儲存裝置內的主機控制數據傳輸

分層式儲存裝置會將數據分類為不同類型的儲存媒體,以降低成本、提高效能並解決容量問題。 類別可以根據所需的保護層級、效能需求、使用頻率和其他考慮。

數據遷移策略在階層式儲存策略的最終結果中扮演著重要角色。 ODX 可在階層式儲存裝置內啟用主機控制的數據遷移。 下列範例說明兩層式儲存裝置中的 ODX:

  • 伺服器是階層式儲存系統的主機。 來源 LUN 是 Tier1 儲存裝置,而目的地 LUN 則是 Tier2 儲存裝置。
  • 相同的複製管理員會管理所有階層式存儲設備。
  • 從伺服器系統,數據遷移應用程式會發出從來源 LUN 卸除讀取要求,並從來源 LUN 接收令牌。 接著,此應用程式會發出卸除寫入要求,並將令牌傳送至目的地 LUN。 複製管理員會將數據從來源 LUN 移至目的地 LUN,橫跨兩個不同的層儲存裝置。
  • 當數據遷移工作完成時,應用程式會從 Tier1 儲存裝置刪除數據,並回收儲存空間。