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ı
- Test Çalıştırması: Gerçek kopyalama işleminden önce
/L
parametresi ile “listeleme modunda” test edin:Robocopy "C:\Kaynak" "D:\Hedef" /MIR /L
- Çı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. - Ağ Bant Genişliği Kontrolü: Ağ kullanımını kontrol etmek için
/IPG:n
parametresi ile paketler arasında gecikme ekleyin. - 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. - 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.