Windows 離線資料傳輸 (ODX) 是一項用於加速伺服器複製和移動操作的功能。 從 Windows Server 2012 開始,NTFS 磁碟區支援它。
本文說明存儲設備觀點中的 ODX。 有關檔案系統和迷你篩選器的相關資訊,請參閱 卸載資料傳輸。
概觀
Windows ODX 在檔案傳輸過程中,並非複製大量數據,而是引入令牌化作業,以便在儲存裝置上移動數據。 來源檔案和目的地檔案可以位於下列任何位置:
- 在同一個磁碟區上。
- 在相同電腦所裝載的兩個不同磁碟區上。
- 透過伺服器訊息區塊(SMB2 或 SMB3)在本機磁碟區和遠端磁碟區上。
- 在兩部不同機器的兩個磁碟區中透過 SMB2 或 SMB3 進行操作。
下圖顯示支援 ODX 之儲存裝置上的卸除複製作業程式。
使用 ODX 複製卸載作業。
- 複製應用程式會將卸除讀取要求傳送至來源記憶體裝置的複製管理員。
- 來源複製管理員會傳回令牌。 令牌是要複製的數據代表。
- 應用程式會將具有令牌的卸除寫入要求傳送至目的地存儲設備的複製管理員。
- 儲存器陣列複製管理員會將資料從來源裝置移至目的地裝置,並將卸除寫入結果傳回至應用程式。
識別支援 ODX 的來源和目的地
若要支援 ODX,儲存陣列必須實作支援 ODX 的儲存陣列相關的 T10 標準規格,包括使用令牌的卸載讀取和寫入作業。 在 LUN 裝置列舉(系統開機或隨插即用事件)期間,Windows 會透過下列步驟收集或更新存放裝置目標裝置的 ODX 功能資訊。
- 查詢複製卸載功能。
- 收集執行複製卸載作業及限制所需的參數。
根據預設,如果來源和目的地 LUN 都支援 ODX,Windows 會先嘗試複製作業的 ODX 路徑。 如果存儲設備在處理初始 ODX 要求時失敗,Windows 會將來源和目的地 LUN 的組合標示為「不 ODX 能力」的路徑,然後遵循傳統的複製檔案路徑。
ODX 讀取/寫入作業
同步命令採用和 API
使用以下演算法將大型卸載寫入請求進行分割,以確保同步卸載寫入的可靠性。
- 如果目標存放裝置未提供最佳傳輸大小,請將最佳傳輸大小設定為 64 MB。
- 如果目標裝置所設定的最佳傳輸大小大於 256 MB,請將最佳傳輸大小設定為 256 MB。
- 記憶體目標裝置所指定的最佳傳輸大小大於零,且小於 256 MB。
同步卸載讀取和卸載寫入 SCSI 命令可減少 MPIO 和叢集故障轉移情境的複雜性。 Windows 預期複製管理員會在 4 秒內完成同步卸除讀取/寫入 SCSI 命令。
應用程式可以使用 FSCTL、DSM IOCTL 或 SCSI_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 儲存裝置刪除數據,並回收儲存空間。