ich bin heute auf ein seltsames Verhalten der DFS Replikation gestossen. Zwei replizierende Ordner weisen den selben Inhalt auf, bis auf ein einziges File, das nur auf einer Seite existiert. Die Replikation funktioniert ohne Probleme, und es findet beim Erstellen von Testdaten ein zügiger Abgleich statt. Das Backlog weisst zu meiner Verwunderung keinerlei Rückstandsdaten auf. Das File ist weder gelockt noch versteckt, keine Einträge im Eventlog.
Ursache
Ein Besuch im DFSR Debug Log (%systemroot%\debug) gibt nähren Aufschluss
20160112 18:21:33.059 1740 USNC 1359 UsnConsumer::ProcessUsnRecord Skipping USN_RECORD with FILE_ATTRIBUTE_TEMPORARY flag:
+ USN_RECORD:
+ RecordLength: 96
+ MajorVersion: 2
+ MinorVersion: 0
+ FileRefNumber: 0x1000000006AB1
+ ParentFileRefNumber: 0x1000000006AB0
+ USN: 0x1298b1d0
+ TimeStamp: 20160112 18:21:33.059 W. Europe Standard Time
+ Reason: Close Rename New Name
+ SourceInfo: 0x0
+ SecurityId: 0x0
+ FileAttributes: 0x120 <– Archive and Temporary Bit set
+ FileNameLength: 30
+ FileNameOffset: 60
+ FileName: problemfile.txt
Das File bzw. die Änderung am File wird erkannt, nur wird durch das gesetzte Temporary Attribut die Replikation unterbunden.
Check and Fix
Attributwerte:
READONLY 0x1
HIDDEN 0x2
SYSTEM 0x4
DIRECTORY 0x10
ARCHIVE 0x20
DEVICE 0x40
NORMAL 0x80
TEMPORARY 0x100
SPARSE_FILE 0x200
REPARSE_POINT 0x400
COMPRESSED 0x800
OFFLINE 0x1000
NOT_CONTENT_INDEXED 0x2000
ENCRYPTED 0x4000
Das Attribut kann mittels Powershell entfernt werden (siehe untern). Sobald das Temporary Attribut entfernt ist, triggered DFSR eine Replikation an.
20160112 19:35:14.265 1740 USNC 2859 UsnConsumer::CreateNewRecord ID record created from USN_RECORD:
+ USN_RECORD:
+ RecordLength: 96
+ MajorVersion: 2
+ MinorVersion: 0
+ FileRefNumber: 0x1000000006ABC
+ ParentFileRefNumber: 0x1000000006AB0
+ USN: 0x129912a0
+ TimeStamp: 20160112 19:35:14.265 W. Europe Standard Time
+ Reason: Basic Info Change Close
+ SourceInfo: 0x0
+ SecurityId: 0x0
+ FileAttributes: 0x20 <– Archive Bit set
+ FileNameLength: 30
+ FileNameOffset: 60
+ FileName: problemfile.txt
Powershell Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$path = "D:\Daten"
$files = Get-ChildItem -Path $path -Recurse
$attribute = [io.fileattributes]::temporary
Foreach($file in $files)
{
If((Get-ItemProperty -Path $file.fullname).attributes -band $attribute)
{
Write-Host -BackgroundColor red "$file.fullname has the $attribute bit set"
$File.Attributes = $File.Attributes -band 0xfeff
}
}
|
Links
http://blogs.technet.com/b/heyscriptingguy/archive/2011/01/26/use-a-powershell-cmdlet-to-work-with-file-attributes.aspx
http://blogs.technet.com/b/askds/archive/2008/11/11/dfsr-does-not-replicate-temporary-files.aspx
https://technet.microsoft.com/en-us/library/cc773238(v=ws.10).aspx#BKMK_038