Herkese merhaba, msHOWTO üzerinde ilk makalemde sizlere basit bir yöntem olan powershell ile dosya yedekleme işlemi ve task schudele ile düzenli hale nasıl getiririz yedekleme sürecimizi nasıl takip ederiz bunları anlatacağım.
Komut satırından aslında tanıdığımız robocopy komutunu kullanarak bu işlemi gerçekleştiriyorum.
Robocopy.exe kaynak ve hedef lokasyonları belirleyip belli parametreler ile dosyaların kopyalanmasını sağlıyorum. Şu günlerde artık hemen hemen her kurum ve kuruluşta Microsoft backup yada 3rd party backup yazılımları kullanılsa da kısa vadeli yada operasyonel olarak hızlı aksiyon almak isteyen arkadaşlar için faydalı olacaktır.
Basit bir robocopy komutu ile işlemlerime başlıyorum.
robocopy.exe <Yedek Alınmak İstenen Klasor Dizini> <Yedekleme Yapılacak Klasör Dizini> /mir /mt:90 /r:3 /w:3 /np /ts /bytes /xd > c:\log.txt
Kullandığım parametreleri size anlatmak isterim.
/mir Mirror mode olarak kullan
/mt:90 Farklı bitiş zamanlarında sonuçlanan maksimum 90 işlem sayısı (değeri dosya sayısına göre düzenleyebilirsiniz) /r:3 Dosya kopyalama işlemini en fazla 3 kere tekrarla, (değeri değiştirebilirsiniz.)
/w:3 Dosya kopyalama işlemi sırasında tekrar denenecekse 3 sn bekle (değeri değiştirebilirsiniz.)
/np İşlem yoksa gösterme.
/ts Kaynak dosyanın zaman bilgilerini ekle.
/bytes Hesaplama için bayt cinsinden işlem yap.
/xd exculude tanımlamasını bu parametreye yapabilirsiniz. Örneğin “$ exclude” şeklinde. > c:\log.text export log.txt Son olarak log çıktısını C: dizinine txt olarak ver
Dosya kopyalama komutumuz hazır. Sırada bunu yeni bir task Schedule oluşturarak periyodik hale getirmeye geldi.
New-ScheduledTaskAction komutu ile powershell çalıştırıp yukarıda yazdığımız komutu çalıştıracak task oluşturuyorum.
New-ScheduledTaskTrigger komut ile de bu taskımızın çalışma periyodunu belirliyoruz.
Örneğin:
New-ScheduledTaskAction -Execute “PowerShell.exe” komutu ile taskımı oluşturuyorum.
New-ScheduledTaskTrigger -At 10:00am –Daily komutu ile de taskımın çalışma zamanını belirliyorum.
Register-ScheduledTask -TaskName “test” taskımında adını belirliyerek register ediyorum.
Buraya kadar aslında hepimizin bildiği süreçler bu komutları bir araya getirerek PowerShell ile basit bir script oluşturuyorum.
$Trigger= New-ScheduledTaskTrigger -At 10:00am –Daily $Trigger= New-ScheduledTaskTrigger -At 10:00am –Daily $User= "NT AUTHORITY\SYSTEM" $Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "robocopy.exe C:\a C:\b /mir /mt:90 /r:3 /w:3 /np /ts /bytes /xd > c:\log.txt" Register-ScheduledTask -TaskName "test" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force
Uygulama ekran görüntüleri:
Resim-1
Resim-2
Uygulaması gayet basit yeri geldiğinde can kurtaracak bir çözümdür. Dosyaları restore etmek istediğinizde dizinlerin yerini değiştirip robocopy komutunu çalıştırmanız işinizi görecektir.
robocopy.exe < Yedekleme Yapılan Klasör Dizin> <Recovery Yapılacak Dizin> /mir /mt:90 /r:3 /w:3 /np /ts /bytes /xd > c:\log.txt
Robocopy ile aslında çok daha fazla çözüm sağlayabilirsiniz. Örneğin DFS yapısı kurgulamak yerine yine robocopy ile iki web sunucunuz içerisinde ki FTP verilerini belirlediğiniz periyotlar yada manual olarak bu komut dizinleri ile gerçekleştirebilirsiniz.
Umarım sizler için faydalı olmuştur. PowerShell kullanarak basit çözümler oluşturma ile ilgili yazılarıma devam edeceğim. Bir sonraki yazımda görüşmek üzere…
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
www.mshowto.org
TAGs: powershell, backup, recovery, robocopy, mshowto,
Merhaba Benim bu yedekleme konusunda bir sorum olacaktı. Bir müşterimin cihazında sürekli yedeklenmesi gereken veriler mevcut ve bunu cloud’a aktarmamız gerekli Yani eğer sistem yeni yedek aldığında otomatik olarak cloud’a gitmesi lazım. Ancak burada şöyle bir sorun var. Cloud’un kapasitesi limitli ve 2-3 yedekten sonra cloud firmasına extra bir ücret ödememiz gerekiyor. Benim merak ettiğim şey ise. Son 6 dosyayı kopyala ve hedefte daha fazla dosya varsa kontrol et eski dosyaları sil.
A dizininde 1.zip,2.zip,3.zip,4.zip,5.zip,6.zip dosyaları olduğunu farz edelim. ve hep güncel olanı almak istiyoruz ve son 2 dosyayı yedeklemek istiyoruz hep. Yedekleme işlemi başlattığımda 5.zip,6.zip dosyalarını nasıl aldırabilirim. Ve onu aldırdım diyelim 7.zip eklendiğinde hedef klasördeki 5-6.zip dosyalarını kontrol ettirip 5.zip dosyasını silip 7.yi atmasını istiyorum bunu nasıl başarırım.
Bir de halihazırda yedek klasöründe kaydedilen yedek dosyalarının eski olanlarının silinmesini nasıl sağlayabilirim. 50 tane dosya varsa son 6 tanesini tutmasını yani.
Erhan merhaba, bahsetmiş olduğun yapı için ciddi kod yazmak lazım robocopy bu noktada pek yeterli kalmayabilir. PowerShell ile yapılamaz değil ancak yapıyı doğru mimari etmek lazım. bir kaç farklı schudel ile de yapılabilir periyodik bir süreç ise mesala belli tarihlerde silme geçmişe dönük silme işlemi yaptırılabilir. Farklarıda dosya isimlerinde göre yazılan bir algoritmaya göre yeni dosylar alınabilir. Ancak senin istediğin yapıda işin içine CBT (change block tracikng) de giriyor gibi eğer bunuda istersen baya bildiğin backup yazılımı yazmak gerekir.