डीएफएसआर कुछ फाइलों की नकल क्यों नहीं करता है और इससे कैसे निपटना है


जैसा कि बहुत से लोग जानते हैं, आप प्रतिकृति फ़ोल्डर के गुणों में फ़ाइल मास्क के रूप में अपवादों को कॉन्फ़िगर कर सकते हैं - और फिर सेवा निर्दिष्ट मास्क से मेल खाने वाली फ़ाइलों को दोहराएगी नहीं। लेकिन हर कोई नहीं जानता कि फाइलों में "अस्थायी" विशेषता होती है, और डीएफएसआर ऐसी फाइलों को डिजाइन द्वारा संसाधित नहीं करता है। और अगर इस पर ध्यान नहीं दिया जाता है, तो ऐसा हो सकता है कि आपके DFSR फोल्डर की सामग्री सिंक से बाहर हो जाए, हालांकि सर्विस लॉग में सब कुछ साफ और सुंदर होगा, और यह सबसे अधिक समय पर आ सकता है। इस समस्या का स्वयं और इसके समाधान का एक से अधिक बार इंटरनेट पर विश्लेषण किया गया है, इस लेख का उद्देश्य पहले बनाए गए समाधान को अंतिम रूप देना है, इसमें लचीलापन और सुविधा जोड़ना है। जिनके लिए यह प्रासंगिक है - मैं बिल्ली के नीचे पूछता हूं।

विषय को इंटरनेट पर एक से अधिक बार कवर किया गया है, उदाहरण के लिए, आधिकारिक ब्लॉग में , यहां और हेबेरा पर ही । इसलिए, मैं खुद को नहीं दोहराऊंगा, लेकिन मैं सीधे मुद्दे पर जाऊंगा। मूल समाधान एक PowerShell स्क्रिप्ट है जो किसी दिए गए फ़ोल्डर में सभी फ़ाइलों के लिए "अस्थायी" विशेषता को रीसेट करता है। इसे एक आधार के रूप में लेते हुए, मैंने अपना स्वयं का संस्करण लिखा, जो लक्षित सर्वर पर प्रतिकृति फ़ोल्डर ढूंढता है और उनमें से प्रत्येक के माध्यम से चलता है, समस्या विशेषता को रीसेट करता है, और फिर ईमेल करने के लिए मिली फाइलों पर एक रिपोर्ट भेजता है। लंबे रास्तों के लिए भी जोड़ा समर्थन (PowerShell के 5 वें संस्करण की आवश्यकता है)।

स्क्रिप्ट को काम करने के लिए डीएफएस सेवा प्रबंधन उपकरण की आवश्यकता होती है (डिफ़ॉल्ट रूप से, वे डीएफएस प्रतिकृति भूमिका के अतिरिक्त के साथ स्थापित होते हैं)। यदि वे गंतव्य सर्वर पर उपलब्ध नहीं हैं, तो इस cmdlet को चलाएं:

Install-WindowsFeature RSAT-DFS-Mgmt-Con 

और यहाँ स्क्रिप्ट ही है:

TempAttrFixer.ps1
 Param( #   [parameter(Mandatory=$false)][String]$OutDir ) $SMTPServer = "mail.mydomain.com" $MailFrom = "sender@mydomain.com" $MailTo = "recipient@mydomain.com" Function ConvertTo-LiteralPath { #      LiteralPath Param( [parameter(Mandatory=$true)][String]$Path ) #    UNC If ($Path.Substring(0,2) -eq "\\") { Return ("\\?\UNC" + $Path.Remove(0,1)) } Else { Return "\\?\$Path" } } $StartTime = Get-Date $Error.Clear() If (!$OutDir) { $OutDir = (Get-WmiObject Win32_OperatingSystem).SystemDrive +"\TempAttrFixer_Report" } #   ,    $FoldersToScan = @(Get-DfsrMembership -ComputerName $env:COMPUTERNAME | Sort-Object GroupName, FolderName).ContentPath $LogFileName = "$env:COMPUTERNAME" + "_TempFiles_" + (Get-Date -Format "yyyy-MM-dd-HH-mm-ss") + ".csv" $LogFilePath = "$OutDir\$LogFileName" $Delimiter = "`t" $FilesCount = 0 If (!(Test-Path $OutDir -PathType Container)) { New-Item -ItemType Directory -Force -Path $OutDir | Out-Null } ForEach ($Folder in $FoldersToScan) { # PowerShell 5.1,      LireralPath Write-Output "Scanning `"$Folder`"..." Get-ChildItem -LiteralPath (ConvertTo-LiteralPath $Folder) -Recurse | ForEach-Object -Process { if (($_.Attributes -band 0x100) -eq 0x100) { $FilesCount += 1 $Entry = $_.FullName + $Delimiter + $_.GetAccessControl().Owner + "`r`n" $Entry $Entry | Out-File -FilePath $LogFilePath -Encoding unicode -Append -NoNewline $_.Attributes = ($_.Attributes -band 0xFEFF) } } } $FinishTime = Get-Date $TimeSpan = $FinishTime - $StartTime Write-Output ("Done, errors: " + $Error.Count) $Encoding = [System.Text.Encoding]::Unicode If ($FilesCount -gt 0) { $MessageBody = $null $Subject = "     " $MessageBody += " : $env:COMPUTERNAME`r`n" $MessageBody += "  : " + $TimeSpan.ToString() + "`r`n" $MessageBody += "   `"$LogFilePath`"`r`n" Send-MailMessage -SmtpServer $SMTPServer -From $MailFrom -Subject $Subject -Encoding $Encoding -To $MailTo -Body $MessageBody -Attachments $LogFilePath } Else { $MessageBody = $null $Subject = "      " $MessageBody += " : $env:COMPUTERNAME`r`n" $MessageBody += "  : " + $TimeSpan.ToString() + "`r`n" Send-MailMessage -SmtpServer $SMTPServer -From $MailFrom -Subject $Subject -Encoding $Encoding -To $MailTo -Body $MessageBody } #,  -    If ($Error.Count -gt 0) { $MessageBody = $null $Subject = "     " $MessageBody += " : $env:COMPUTERNAME`r`n" $MessageBody += " : $env:UserName`r`n" $MessageBody += " :`r`n" $MessageBody += $Error[0] Send-MailMessage -SmtpServer $SMTPServer -From $MailFrom -Subject $Subject -Encoding $Encoding -To $MailTo -Body $MessageBody } 


हम उन चरों के मूल्यों को सही करते हैं जो ईमेल अलर्ट के लिए ज़िम्मेदार हैं, और स्क्रिप्ट को शेड्यूलर में जोड़ते हैं:

 powershell.exe -NoLogo -ExecutionPolicy Bypass -NoProfile -File "<  >\TempAttrFixer.ps1" 

सिस्टम के भीतर से कार्य को चलाना सबसे आसान है, लेकिन अगर आपके पास व्यामोह का एक बढ़ा हुआ स्तर है और सूचना सुरक्षा के लिए एक गंभीर दृष्टिकोण का अभ्यास किया जाता है, तो आप एक अलग खाते का उपयोग कर सकते हैं, यह एक विशेषाधिकार के रूप में एक बैच की नौकरी और प्रतिकृति फ़ोल्डर में फ़ाइलों को संशोधित करने का अधिकार देता है।

ईमेल रिपोर्ट (या उनके अलावा) के बजाय, आप ज़ैबिक्स या किसी अन्य निगरानी प्रणाली के साथ बातचीत करने के लिए स्क्रिप्ट को कॉन्फ़िगर कर सकते हैं। यह समझना भी महत्वपूर्ण है कि प्रक्रिया काफी संसाधन-गहन है, इसलिए इसे अक्सर भी न चलाएं। 10TB डेटा को संसाधित करने में हमें लगभग एक घंटे का समय लगता है, और स्क्रिप्ट दिन में एक बार रात में चलती है।

मेरे सहयोगियों और मुझे इस सवाल में दिलचस्पी थी कि अस्थायी विशेषता वाली फाइलें कहां से आती हैं। इसलिए, प्रत्येक रिपोर्ट में, फ़ाइल के पूर्ण नाम के साथ, इसका NTFS स्वामी दिखाई देता है। एकत्रित आंकड़ों के आधार पर, यह पता लगाना संभव था कि हमारी स्थिति में कभी-कभी आरडीपी के माध्यम से अग्रेषित स्थानीय डिस्क से डेटा की प्रतिलिपि बनाते समय फ़ाइलों में जोड़ा जाता था (हम सक्रिय रूप से दूरस्थ डेस्कटॉप तकनीक का उपयोग करते हैं)। लेकिन यह संभव है कि फाइलें शुरू में "दोषपूर्ण" थीं। अभी तक यह अधिक विस्तार से पता लगाना संभव नहीं हुआ है।

यदि आप एक लघु सर्वेक्षण पास करते हैं और टिप्पणियों में अपना अनुभव साझा करते हैं तो मैं आपका आभारी रहूंगा।

Source: https://habr.com/ru/post/hi459020/


All Articles