У меня есть ситуация, когда дедупликация данных в Server 2012 повредила метаданные - как я могу скопировать эти файлы из старого репозитория?

315
Araska

У меня два диска - диск D: и диск F :. Оба эти диска локально подключены к компьютеру с Server 2012. диск F - это устаревшее хранилище данных, мигрирующих на новый диск (D) по мере его увеличения.

Дедупликация данных была включена на диске D до синхронизации файлов из F в D.

Robocopy / MIR повредил хранилище дедупликации на диске F, что потребовало повторной синхронизации файлов со старого диска D. (в частности, любые, которые имеют атрибут APL (Archive, ReparsePoint, SparseFile) на них).

У меня проблема в том, что некоторые файлы на F были записаны с момента переключения - я попытался написать скрипт, чтобы найти эти файлы и скопировать их, но я хотел бы найти лучший способ сделать это!

В настоящее время у меня есть скрипт, который ищет файлы с атрибутом ReparsePoint и записывает их в текстовый файл.

function Recurse($path) {  $fc = new-object -com scripting.filesystemobject $folder = $fc.getfolder($path)  foreach ($i in $folder.files) { $i | select Path }  foreach ($i in $folder.subfolders) { $i | select Path  if ( (get-item $i.path).Attributes.ToString().Contains("ReparsePoint") - eq $false) {  Recurse($i.path) } } }  $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition $outputlist = Recurse($scriptPath) | Out-File -Filepath .\filelist.txt  

Затем я скопировал бы из исходного хранилища на основе этого списка. В идеале мне бы хотелось, чтобы это был единый сценарий!

Любые гуру сценариев хотят помочь?

ура

0

1 ответ на вопрос

0
Araska

Ниже работает довольно хорошо;

Get-ChildItem -Recurse -File |  Where-Object { $_.Attributes -match "ReparsePoint" } | Foreach-Object { $currentFileName = $_.FullName $oldFileName = $currentFileName.replace("D:\", "F:\") if (Test-Path $oldFileName) { Copy-Item $oldFileName $currentFileName -Force Write-Host "Copied $oldFileName to $currentFileName" }  }