共用方式為


拿掉複寫檔案篩選之後,DFSR 唯讀成員會回報待辦專案

本文提供在移除複寫檔案篩選之後,針對唯讀成員回報待辦專案的問題的解決方案。

原始 KB 編號: 4021676

徵兆

試想以下情況:

  • 您正在執行 Windows Server 2019、Windows Server 2016 或 Windows Server 2012 R2。
  • 系統使用分散式文件系統複寫 (DFSR),並包含唯讀複寫的資料夾。
  • 不論從 DFSR 讀取/寫入到唯讀成員候選項目的複寫篩選為何,您都會預先設置數據。 因此,篩選集中的檔案現在存在於所有成員上。
  • 初始複寫之後,您會移除複寫檔案篩選。
  • 當 DFSR 成員偵測到篩選變更時,他們都會執行 DirWalkerTask 查閱內容。
  • 在唯讀成員上,此程式會建立檔案物件的 UID,並遞增版本向量全域版本序號 (GVSN)。 不過,不會傳播本機變更。
  • 讀取/寫入夥伴會為相同的檔案建立自己的UID,而唯讀成員會偵測名稱衝突。
  • 根據標準衝突解決,會選取較新的本機版本檔案。 唯讀成員會報告 本機版本主宰 ,並細分讀取/寫入合作夥伴的更新。
  • 只讀成員會遞增其 GVSN,並從讀取/寫入夥伴產生 UID 的墓碑。 不過,不會傳播兩個變更。

在此案例中,待辦專案會從唯讀成員回報給讀取/寫入夥伴,因為 DFSR 服務有兩個未復寫到其夥伴的本機變更。 當 DFSR 將檔案引入為新物件時,第一個報表專案適用於本機變更。 當 DFSR 從遺失衝突解決的讀取/寫入夥伴產生檔案版本的墓碑時,就會建立第二個專案。 它會藉由刪除該檔案版本來執行此動作。

注意

當同一個檔案在讀取/寫入成員上變更時,只讀成員會藉由將它回報為「遠端版本主宰」,然後提供自己的 UID 版本,重複使用其資料庫中的墓碑記錄。 此動作會產生衝突事件 4412。 此外,唯讀成員會清除其待辦專案。

原因

這是依照設計的行為。 如果移除篩選,且現有內容必須整合到 DFSR 中,只讀成員會將標準衝突解決機制套用至新的復寫內容。

解決方法

在大部分情況下,您可以放心地忽略在 DFSR 只讀成員中報告的待辦專案,以讀取/寫入夥伴方向。 這是因為唯讀成員不打算有真正的變更。

如果只有少數檔案受到影響,請考慮對讀取/寫入成員上的檔案進行一般變更。

一般而言,只讀成員需要初始同步處理,才能移除這類待辦專案。

其他相關資訊

當您使用 Windows PowerShell 腳本和 Get-DfsrBacklog Cmdlet 來建立多個 DFSR 設定的概觀時,您可能會想要考慮下列邏輯,將待辦項目輸出從只讀成員排除至其合作夥伴:

#variables for checking multiple DFSR setups, may be different in your existing script
$RGName="ReplicationGroupName"
$RFName="ReplicatedFolderName"
$SMem="SendingMember"
$RMem="ReceivingMember"

#new variable for the DFSR subcription for the RF, containing the value/attribute "ReadOnly"; obtained by Get-DfsrMembership

$DfsrSubscription=Get-DfsrMembership -Groupname $RGName -Computername $SMem | Where-object {$_.foldername -eq $RFName}

#now gather only the Backlog output, when the senders configuration for this RF is not Read-only

if ($DfsrSubscription.ReadOnly -eq 0)
{
    Get-DfsrBacklog -Groupname $RGName -Foldername $RFName -SourceComputerName $SMem -DestinationComputerName $RMem -verbose
}
else
{
    Write-Host "Backlog detection skipped because Sending Member ($SMem) is Read-only for this RF ($RFName)"
}

結果:您現在會看到下列報表專案, 而不是只讀成員的待辦項目輸出:

已略過待處理專案偵測,因為傳送成員 (SendingMember) 是此 RF 的唯讀 (ReplicatedFolderName)

注意

即使在初始待辦專案清除之後,只讀成員可能會在一段時間后再次顯示待處理更新。 如果這些更新是版本向量墓碑(也稱為 VersionVectorTombstones),您可以忽略它們。 這類更新不包含實際變更。 唯讀成員會在下列情況下產生版本向量標記更新:

  • 偵測並標記過時的資料庫 GUID 時(GcTask::GcStaleDbGuids
  • 當它向復寫夥伴發出訊號時,表示它正在運作並等待更新 (GcTask::GcSendDbKeepAlive

如需這些函式的詳細資訊,請參閱處理更新中版本向量墓碑UID。

這些泛型更新會增加唯讀成員上的版本序號(因此變更 GVSN 版本鏈結向量)。 不過,只讀成員絕不會與其復寫夥伴共用這些更新,因此在其他成員上使用全域版本向量來追蹤更新。 因此,待辦專案計數會顯示只讀成員與其複寫夥伴之間的可見差異。

為了防止這類更新產生令人困惑的數據,收集待辦項目數據的腳本應該排除唯讀成員。