Anasayfa » robocopy » Robocopy ile Offline Backup Almak

Robocopy ile Offline Backup Almak

by Kazım Yazıcı
robocopy nedir

Robocopy Offline Backup (Robust File Copy), Windows işletim sistemlerinde dosya kopyalama ve yedekleme işlemleri için kullanılan bir komut satırı aracıdır. Kullanım alanları çok değişkenlik gösterse de ben bugün offline backup işlemleri için sizlere yol gösteriyor olacağım.

Offline Backup Senaryosu :

Diyelim ki Veeam Backup, sanal sunucu yedeklerini güvende tutmak ve olası kritik durumlar için verileri güvene almak istiyoruz. Datastore üzerinde 18TB veri olduğunu varsayalım. Bu bağlamda elimizde de offline backup için tuttuğumuz 2x10TB toplam 20TB alan olduğunu varsayalım.

İlk aşamada sürükle bırak mantığı ile verileri kopyalayabileceğimizi düşünsek de veri dosyalarının çok büyük olması sebebiyle 2 parça halinde ayrı disklere atmak bir hayli uğraştırıcı olacaktır. Diğer yandan ise Robocopy Offline Backup sırasında, dosya sistemi üzerinde başka işlemler (örneğin, kullanıcı etkileşimleri veya diğer uygulamalar) gerçekleşmediği için, Robocopy daha az disk I/O rekabeti ile karşılaşır ve bu da genellikle daha hızlı bir kopyalama süreci anlamına gelir. Öyleyse senaryoya istinaden robocopy için hangi powershell komutlarını çalıştırırız örnek ile göstereyim.

$source = "D:\KaynakVeri"
$destination1 = "E:\Hedef1"
$destination2 = "F:\Hedef2"
$currentDestination = $destination1
 
function Get-FreeSpace {
    param (
        [string]$drivePath
    )
    $driveLetter = ($drivePath -split ":")[0]
    return (Get-Volume -DriveLetter $driveLetter).SizeRemaining
}
 
function Get-FileSize {
    param (
        [string]$filePath
    )
    return (Get-Item $filePath).length
}
 
Get-ChildItem -Path $source -Recurse | Where-Object { !$_.PSIsContainer } | ForEach-Object {
    $fileSize = Get-FileSize $_.FullName
    $relativePath = $_.FullName.Substring($source.Length)
    $targetPath = Join-Path $currentDestination $relativePath
 
   if ($fileSize -gt (Get-FreeSpace $currentDestination)) {
        if ($currentDestination -eq $destination1) {
            $currentDestination = $destination2
            $targetPath = Join-Path $currentDestination $relativePath
        } else {
            Write-Error "Both destinations are full!"
            exit
        }
    }
 
    $targetDir = [System.IO.Path]::GetDirectoryName($targetPath)
    if (-not (Test-Path $targetDir)) {
        New-Item -ItemType Directory -Path $targetDir -Force
    }
 
    robocopy $_.DirectoryName $targetDir $_.Name /R:5 /W:5
}
 

Robocopy Kodun İşlevi :

  • 1-Dosyanın boyutunu alır. Kopyalamayı başlatır
  • 2-Şu anki hedef klasörde yeterli alan olup olmadığını kontrol eder.
  • 3-Eğer yeterli alan yoksa, hedefi değiştirir.
  • 4-Dosyayı hedef klasöre kopyalar.

Sonuç olarak ; örnek bir senaryo üzerinden robocopy’nin işlevlerini sizlerle paylaşmak istedim. Bu neticede olayın mantığını kavrayarak kullanım alanlarını genişletebilirsiniz. Aynı zamanda konu ilginizi çektiyse Temel Powershell Komutları – Pratik Kodlar başlıklı makaleye göz atabilirsiniz.

Kaynak Chatgpt‘nin bizzat kendisidir. Kod bilgileri ve senaryonun gerçekleşmesinde rol oynamıştır.

You may also like

Bir Cevap Yazın

Kurucu & Editör

Kazım Yazıcı

Bu blogu kurma fikri, sektördeki hızlı gelişmeleri ve yenilikleri takip etme arzumdan doğdu. Amacım, bu karmaşık görünen teknoloji dünyasını daha anlaşılır ve erişilebilir kılmak, aynı zamanda bu alanda bilgi paylaşımını teşvik etmekti. Deltastech, bu vizyonun bir ürünü olarak ortaya çıktı.

@2023, Tüm hakları Deltastech üzerinde saklıdır.

Deltastech sitesinden daha fazla şey keşfedin

Okumaya devam etmek ve tüm arşive erişim kazanmak için hemen abone olun.

Okumaya Devam Edin