Robocopy

PowerShell_robocopy

Robocopy (Robust File Copy), Microsoft Windows işletim sistemlerinde bulunan, güçlü ve esnek bir komut satırı dosya kopyalama aracıdır. İlk olarak Windows Resource Kit’in bir parçası olarak sunulan Robocopy, Windows Vista’dan itibaren işletim sisteminin standart bir bileşeni haline gelmiştir. Normal kopyalama komutlarının (copy, xcopy) ötesinde, Robocopy özellikle büyük veri transferleri, ağ üzerinden kopyalama ve kesintiye dayanıklı kopyalama işlemleri için optimize edilmiştir.

Neden Robocopy Kullanmalıyız?

Robocopy’nin standart dosya kopyalama araçlarına göre belirgin avantajları vardır:

  • Kesintiye Dayanıklılık: Ağ bağlantısı kesildiğinde veya işlem yarıda kaldığında, kopyalama işlemine kaldığı yerden devam edebilir.
  • Çoklu İş Parçacığı Desteği: Birden fazla dosyayı aynı anda kopyalayarak işlem süresini önemli ölçüde azaltabilir.
  • Gelişmiş Filtreleme: Dosya adı, boyut, tarih ve özniteliklere göre gelişmiş filtreleme sağlar.
  • Ağ Optimizasyonu: Özellikle ağ üzerinden kopyalama işlemleri için optimize edilmiştir.
  • Ayrıntılı Loglama: Kapsamlı kayıt tutma özellikleri sunar.
  • Dosya Özniteliklerini Koruma: NTFS izinleri, zaman damgaları ve diğer meta verileri korur.

Temel Kullanım

Robocopy’nin temel sözdizimi şu şekildedir:

Robocopy <Kaynak> <Hedef> [<Dosyalar>] [<Seçenekler>]

Basit Örnek

Bir klasörü tüm içeriğiyle birlikte kopyalamak için:

Robocopy "C:\KaynakKlasör" "D:\HedefKlasör" /E

/E parametresi, alt klasörler dahil tüm içeriği kopyalar.

Sık Kullanılan Parametreler

Temel Kopyalama Parametreleri

  • /E: Tüm alt klasörleri kopyalar (boş olanlar dahil)
  • /S: Alt klasörleri kopyalar (boş olanlar hariç)
  • /COPYALL veya /COPY:DATSOU: Tüm dosya bilgilerini kopyalar (Veri, Öznitelikler, Zaman damgaları, Güvenlik, Kullanıcı bilgisi, Denetim bilgisi)
  • /DCOPY:T: Dizin zaman damgalarını korur
  • /PURGE: Hedefte var olan ancak kaynakta olmayan dosyaları siler
  • /MIR: Kaynağı hedefle eşleştirir (ayna kopyalama – /E ve /PURGE kombinasyonu)

Yeniden Deneme ve Dayanıklılık Parametreleri

  • /Z: Yeniden başlatma modunda kopyalar (kesintiye uğrarsa kaldığı yerden devam edebilir)
  • /ZB: Yeniden başlatma modunda kopyalar, erişim reddedilirse yedekleme modunu kullanır
  • /R:n: Başarısız kopyalamalar için yeniden deneme sayısı (varsayılan: 1 milyon)
  • /W:n: Yeniden denemeler arasında beklenecek süre (saniye)

Performans Parametreleri

  • /MT[:n]: Çoklu iş parçacığı kullanır (n: 1-128 arası, varsayılan: 8)
  • /J: Tamponlanmamış I/O kullanır (çok büyük dosyalar için)
  • /LEV:n: Sadece belirtilen seviyeye kadar olan dizinleri kopyalar

Filtreleme Parametreleri

  • /XF dosya1 dosya2 ...: Belirtilen dosyaları hariç tutar
  • /XD klasör1 klasör2 ...: Belirtilen klasörleri hariç tutar
  • /IF: Belirtilen dosyaları içerir
  • /XC: Değiştirilmiş dosyaları hariç tutar
  • /XN: Yeni dosyaları hariç tutar
  • /XO: Eski dosyaları hariç tutar
  • /MAX:n: Maksimum dosya boyutu – n bayt
  • /MIN:n: Minimum dosya boyutu – n bayt
  • /MAXAGE:n: Maksimum dosya yaşı – n gün/tarih
  • /MINAGE:n: Minimum dosya yaşı – n gün/tarih

Loglama Parametreleri

  • /LOG:dosya: Detaylı işlem kaydını belirtilen dosyaya yazar
  • /LOG+:dosya: Detaylı işlem kaydını belirtilen dosyaya ekler
  • /TEE: Hem konsola hem de log dosyasına çıktı verir
  • /NP: İlerleme yüzdesini göstermez
  • /V: Ayrıntılı çıktı gösterir
  • /TS: Zaman damgası ile çıktı verir
  • /FP: Tam dosya yolunu içeren çıktı üretir

İleri Düzey Kullanım Senaryoları

1. Ayna Kopyalama (Mirroring)

Bir klasörü başka bir konuma tam olarak yansıtmak için:

Robocopy "C:\Kaynak" "D:\Hedef" /MIR /FFT /Z /XA:SH /W:5 /R:2 /MT:32

Bu komut:

  • /MIR: Kaynak ve hedef klasörleri tamamen eşleştirir
  • /FFT: FAT dosya zamanları için daha az hassas zaman damgası karşılaştırması yapar
  • /Z: Yeniden başlatma modunda kopyalar
  • /XA:SH: Sistem ve gizli dosyaları hariç tutar
  • /W:5: Yeniden denemeler arasında 5 saniye bekler
  • /R:2: Başarısız kopyalamayı 2 kez dener
  • /MT:32: 32 iş parçacığı kullanır

2. Sunucular Arası Veri Aktarımı

Sunucular arasında büyük veri transferleri için:

Robocopy "\\SunucuA\Paylaşım" "\\SunucuB\Paylaşım" /E /COPYALL /DCOPY:DAT /MT:16 /Z /R:3 /W:10 /LOG:"C:\Logs\Transfer.log" /TEE

Bu komut:

  • /COPYALL: Tüm dosya bilgilerini kopyalar
  • /DCOPY:DAT: Dizin zamanını, özniteliklerini ve diğer bilgileri kopyalar
  • /MT:16: 16 iş parçacığı kullanır
  • /LOG:"C:\Logs\Transfer.log": Transfer kaydını belirtilen dosyaya yazar
  • /TEE: Hem ekrana hem de log dosyasına çıktı verir

3. Yedekleme Senaryosu

Düzenli yedekleme işlemleri için PowerShell script örneği:

$Tarih = Get-Date -Format "yyyy-MM-dd"
$KaynakYolu = "C:\ÖnemliVeriler"
$HedefYolu = "D:\Yedekler\$Tarih"
$LogDosyası = "D:\Yedekler\Logs\Yedek-$Tarih.log"

# Hedef klasörü oluştur
New-Item -ItemType Directory -Path $HedefYolu -Force | Out-Null

# Robocopy ile yedekleme
Robocopy $KaynakYolu $HedefYolu /MIR /B /COPYALL /DCOPY:DAT /Z /MT:8 /R:5 /W:15 /LOG:$LogDosyası /TEE

# Yedekleme durumunu kontrol et
if ($LASTEXITCODE -lt 8) {
    Write-Host "Yedekleme başarıyla tamamlandı." -ForegroundColor Green
} else {
    Write-Host "Yedekleme sırasında hatalar oluştu. Lütfen log dosyasını kontrol edin." -ForegroundColor Red
}
 

Bu script:

  • Tarih tabanlı klasör yapısı oluşturur
  • /B: Yedekleme modunda çalışır (yönetici hakları gerektirir)
  • Robocopy çıkış kodunu kontrol ederek başarı durumunu değerlendirir

Robocopy Çıkış Kodları

Robocopy, işlemin sonucunu belirten çeşitli çıkış kodları döndürür:

Değer Anlamı
0 İşlem başarılı, kopyalanacak dosya yok
1 İşlem başarılı, dosyalar kopyalandı
2 İşlem başarılı, ekstra dosyalar veya klasörler bulundu
3 İşlem başarılı, bazı dosyalar eşleşmiyor
4 İşlem başarılı, bazı eşleşmeyen dosyalar ve ekstra dosyalar var
5 İşlem başarılı, bazı dosyalar kopyalandı, bazı dosyalar başarısız
6 İşlem başarılı, ek dosyalar ve eşleşmeyen dosyalar var, bazı dosyalar başarısız
7 İşlem başarılı, dosyalar kopyalandı, ekstra dosyalar var, bazı dosyalar başarısız
8 İşlem başarısız, bazı dosyalar kopyalandı
16 İşlem ciddi hata ile başarısız oldu

İyi Uygulama Örnekleri

1. Büyük Dosya Transferleri

Çok büyük dosyaları (>2GB) kopyalarken:

Robocopy "C:\BüyükDosyalar" "D:\HedefKlasör" /J /MT:4 /Z

/J parametresi, tamponlanmamış I/O kullanarak büyük dosya kopyalamalarını optimize eder.

2. Sürekli Senkronizasyon

Belirli aralıklarla klasörleri senkronize etmek için bir PowerShell döngüsü:

while ($true) {
    $Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    Write-Host "$Timestamp - Senkronizasyon başlatılıyor..."
    
    Robocopy "C:\KaynakVeri" "D:\YedekVeri" /MIR /MT:8 /Z /W:5 /R:2 /LOG:"C:\Logs\Sync-$(Get-Date -Format 'yyyy-MM-dd').log" /NP
    
    Write-Host "Bir sonraki senkronizasyon için 30 dakika bekleniyor..."
    Start-Sleep -Seconds 1800
}

 

3. İzinleri Koruma

NTFS izinlerini koruyarak dosya aktarımı:

Robocopy "C:\Kaynak" "D:\Hedef" /E /COPY:DATS /SECFIX /TIMFIX
  • /COPY:DATS: Veri, öznitelikler, zaman damgaları ve güvenlik bilgilerini kopyalar
  • /SECFIX: Tüm dosyaların güvenlik bilgilerini düzeltir
  • /TIMFIX: Tüm dosyaların zaman damgalarını düzeltir

Genel İpuçları ve Püf Noktaları

  1. Test Çalıştırması: Gerçek kopyalama işleminden önce /L parametresi ile “listeleme modunda” test edin:
    Robocopy "C:\Kaynak" "D:\Hedef" /MIR /L
    
  2. Çıkış Kodlarını Anlama: PowerShell’de $LASTEXITCODE değişkeni ile Robocopy’nin çıkış kodunu kontrol edin. 8’den küçük değerler genellikle başarılı sayılır.
  3. Ağ Bant Genişliği Kontrolü: Ağ kullanımını kontrol etmek için /IPG:n parametresi ile paketler arasında gecikme ekleyin.
  4. Hız Limitleri: Resmi olarak bir hız sınırlama parametresi olmasa da, /IPG ve /MT parametrelerini ayarlayarak kopyalama hızını kontrol edebilirsiniz.
  5. UAC Kısıtlamaları: Yönetici haklarını gerektiren işlemler için yükseltilmiş komut satırı veya PowerShell penceresi kullanın.

PowerShell ile Robocopy Kullanımı

PowerShell, Robocopy komutlarını daha esnek ve programlanabilir hale getirir:

function Start-RobustCopy {
    param (
        [Parameter(Mandatory=$true)][string]$Source,
        [Parameter(Mandatory=$true)][string]$Destination,
        [string[]]$ExcludeFolders,
        [string[]]$ExcludeFiles,
        [switch]$Mirror,
        [int]$Threads = 8,
        [string]$LogPath
    )
    
    $RobocopyArgs = @(
        "`"$Source`"",
        "`"$Destination`"",
        "/E",
        "/Z",
        "/R:3",
        "/W:5",
        "/MT:$Threads"
    )
    
    if ($Mirror) {
        $RobocopyArgs += "/MIR"
    }
    
    if ($ExcludeFolders) {
        $RobocopyArgs += "/XD"
        $ExcludeFolders | ForEach-Object { $RobocopyArgs += "`"$_`"" }
    }
    
    if ($ExcludeFiles) {
        $RobocopyArgs += "/XF"
        $ExcludeFiles | ForEach-Object { $RobocopyArgs += "`"$_`"" }
    }
    
    if ($LogPath) {
        $RobocopyArgs += "/LOG:`"$LogPath`"" 
        $RobocopyArgs += "/TEE"
    }
    
    Write-Host "Robocopy komutu çalıştırılıyor..." -ForegroundColor Cyan
    $Process = Start-Process -FilePath "Robocopy" -ArgumentList $RobocopyArgs -NoNewWindow -PassThru -Wait
    
    switch ($Process.ExitCode) {
        { $_ -lt 8 } { 
            Write-Host "İşlem başarıyla tamamlandı (Kod: $($Process.ExitCode))" -ForegroundColor Green 
        }
        default { 
            Write-Host "İşlem hatayla sonuçlandı (Kod: $($Process.ExitCode))" -ForegroundColor Red 
        }
    }
    
    return $Process.ExitCode
}

# Fonksiyon kullanım örneği
Start-RobustCopy -Source "C:\Veriler" -Destination "D:\Yedek" -Mirror -ExcludeFolders "C:\Veriler\Temp", "C:\Veriler\Logs" -LogPath "C:\Logs\RobocopyTransfer.log"

 

# Fonksiyon kullanım örneği Start-RobustCopy -Source "C:\Veriler" -Destination "D:\Yedek" -Mirror -ExcludeFolders "C:\Veriler\Temp", "C:\Veriler\Logs" -LogPath "C:\Logs\RobocopyTransfer.log" 

Bu fonksiyon, Robocopy’nin sık kullanılan parametrelerini daha kullanıcı dostu bir PowerShell arayüzü ile sunar.

Robocopy vs. Diğer Araçlar

Özellik Robocopy XCOPY PowerShell Copy-Item Üçüncü Parti Yazılımlar
Kesintiye Dayanıklılık Kısıtlı Genellikle ✓
Çoklu İş Parçacığı Çoğunlukla ✓
NTFS İzinleri Kısıtlı Kısıtlı Çoğunlukla ✓
Ayna Kopyalama Script ile Genellikle ✓
Filtreleme Seçenekleri Çok Kapsamlı Temel Orta Değişken
Kullanım Kolaylığı Komut Satırı Basit PowerShell Bilgisi Gerekiyor Genellikle GUI
Entegrasyon/Otomasyon Mükemmel Kısıtlı Mükemmel Değişken

Sık Karşılaşılan Sorunlar ve Çözümleri

1. “Yetersiz Erişim Hakları” Sorunu

Sorun: “Access is denied” (Erişim reddedildi) hataları.

Çözüm: Yedekleme modunda çalıştırın:

Robocopy "C:\Kaynak" "D:\Hedef" /B /E

Veya hem Yedekleme hem de Yeniden Başlatma modunu birlikte kullanın:

Robocopy "C:\Kaynak" "D:\Hedef" /ZB /E

2. “Dosya Kullanımda” Sorunu

Sorun: Kilitli veya kullanımda olan dosyaları kopyalayamama.

Çözüm: /R ve /W parametrelerini ayarlayın ve çok sayıda yeniden deneme yapmasını sağlayın:

Robocopy "C:\Kaynak" "D:\Hedef" /R:10 /W:30

3. Uzun Dosya Yolu Sınırlamaları

Sorun: 260 karakterden uzun dosya yollarında “Path too long” hatası.

Çözüm: Uzun yol desteğini açın (Windows 10/11):

# Registry ayarını değiştirme
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -Type DWord

Sonra /256 parametresi ile Robocopy’yi çalıştırın:

Robocopy "C:\Kaynak" "D:\Hedef" /E /256

Robocopy Performans Optimizasyonu

1. İş Parçacığı Sayısını Optimize Etme

Optimum iş parçacığı sayısı, sisteminizin özellikleri ve dosya yapınıza bağlıdır:

  • Çok sayıda küçük dosya: Yüksek iş parçacığı sayısı kullanın (16-32)
    Robocopy "C:\Küçük_Dosyalar" "D:\Hedef" /MT:32
    
  • Az sayıda büyük dosya: Daha düşük iş parçacığı sayısı kullanın (4-8)
    Robocopy "C:\Büyük_Dosyalar" "D:\Hedef" /MT:4 /J
    

2. Kopyalama Önceliğini Ayarlama

Robocopy’nin sistem kaynaklarını kullanma önceliğini ayarlayabilirsiniz:

Start-Process -FilePath "Robocopy" -ArgumentList "C:\Kaynak D:\Hedef /E" -Priority BelowNormal

Öncelik değerleri: Normal, AboveNormal, BelowNormal, High, RealTime

3. Ağ Optimizasyonları

Ağ üzerinden büyük veri transferleri için:

Robocopy "\\SunucuA\Paylaşım" "\\SunucuB\Paylaşım" /E /Z /MT:8 /IPG:1000

/IPG:1000 parametresi, paketler arasında 1000 milisaniye (1 saniye) gecikme ekleyerek ağ üzerindeki yükü azaltır.

Robocopy, özellikle büyük veri transferleri, sunucular arası kopyalama ve otomatik yedekleme işlemleri için Windows ortamında mevcut en güçlü dosya kopyalama aracıdır. Gelişmiş parametreleri ve esnekliği sayesinde, basit kopyalama komutlarının yetersiz kaldığı senaryolarda mükemmel bir çözüm sunar.

Doğru parametrelerle kullanıldığında, Robocopy:

  • Veri bütünlüğünü sağlar
  • Sistem ve ağ kaynaklarını verimli kullanır
  • Büyük ve karmaşık dosya yapılarını güvenilir şekilde kopyalar
  • BT yöneticileri ve sistem uzmanları için otomasyona uygun bir araç olarak hizmet eder

PowerShell ile entegre edildiğinde, Robocopy’nin yetenekleri daha da güçlenir ve kurumsal düzeyde veri yönetimi için ideal bir çözüm haline gelir.