17Aug

Rsync ile Verileri Eşitleme Konusunda Yeni Başlayanlar İçin Rehber

rsync protokolü, sıradan yedekleme / senkronizasyon işleri için oldukça basit olabilir, ancak bazı daha gelişmiş özellikler sizi şaşırtabilir. Bu yazıda, en büyük veri tutucularının ve yedekleme meraklılarının bile rsync'i tüm veri yedekliliği ihtiyaçları için tek bir çözüm olarak nasıl kullanabileceklerini göstereceğiz.

Uyarı: Yalnızca Gelişmiş Geeks'ler

Burada oturuyorsanız, "Rüzgarın rsync'i nedir" veya "Gerçekten basit görevler için sadece rsync kullanıyorum" düşüncesindeyseniz, yedekleme için rsync'in nasıl kullanılacağı üzerine önceki makalemizi incelemek isteyebilirsinizrsync'e giriş yapan Linux hakkındaki verileriniz kurulum sürecinde size yol gösterir ve daha temel fonksiyonlarını sergiler. Rsync'in nasıl kullanılacağına dair kesin bir kavrayışa kavuştuğunuzda( dürüst olmak gerekirse, o kadar da karmaşık değildir) ve bir Linux terminaline rahatça sahipseniz, bu gelişmiş kılavuzu kullanmaya hazırsınız demektir.

Windows

'de rsync'in Çalışması Önce Windows okuyucularımızı Linux uzmanlarımızla aynı sayfada alalım. Rsync, Unix benzeri sistemlerde çalışacak şekilde oluşturulmuş olsa da, bunu Windows'ta olduğu kadar kolay kullanamamanız için hiçbir neden yoktur. Cygwin, rsync'i çalıştırmak için kullanabileceğiniz harika bir Linux API'si üretir; bu nedenle, bilgisayarlarına bağlı olarak kendi web sitelerine gidin ve 32-bit veya 64-bit sürümünü indirin.

Kurulum basittir;"Paketleri Seç" ekranına gelene kadar tüm seçenekleri varsayılan değerlerinde tutabilirsiniz.

Şimdi Vim ve SSH için aynı adımları uygulamanız gerekir, ancak paketler onları seçtiğinizde biraz farklı görünecektir, bu yüzden bazı ekran görüntüleri aşağıda verilmektedir:

Vim'i Kurma:

SSH'yi Yükleme:

Sizden sonraBu üç paketi seçtiniz, kurulumu tamamlayana kadar yanındaki kutuyu tıklamaya devam edin. Ardından, yükleyicinin masaüstünüze yerleştirdiği simgeyi tıklayarak Cygwin'i açabilirsiniz.

rsync Komutları: Gelişmişten Basit

'ye Şimdi Windows kullanıcıları aynı sayfada, şimdi basit bir rsync komutuna göz atalım ve bazı gelişmiş anahtarların nasıl hızlı bir şekilde karmaşık hale getireceğini gösterelim.

Diyelim ki, yedeklenmesi gereken bir sürü dosyanız var - bu günlerde kim kime ait değil? Taşınabilir sabit sürücünüzü taktığınızda, bilgisayar dosyalarınızı yedekleyebilir ve aşağıdaki komutu çalıştırabilirsiniz:

rsync -a /home/geek/files/ /mnt/usb/files/

Veya Cygwin ile bir Windows bilgisayarında görüleceği şekilde:

rsync -a /cygdrive/c/files/ /cygdrive/e/files/

Oldukça basit veBu noktada dosyaları sürükleyip bırakabildiğiniz için gerçekten rsync kullanmanıza gerek yok. Bununla birlikte, diğer sabit diskiniz zaten bazı dosyalara sahipse ve güncelleştirilmiş sürümlere ve son senkronasyondan sonra oluşturulan dosyalara ihtiyaç duyuyorsa, bu komut yalnızca yeni veriyi sabit sürücüye gönderdiği için kullanışlıdır. Büyük dosyalarla ve özellikle dosyaları internet üzerinden aktarmak büyük önem taşıyor.

Dosyalarınızı harici bir sabit sürücüye yedekleyin ve ardından sabit sürücüyü bilgisayarınızla aynı yerde tutmak çok kötü bir fikirdir, bu nedenle dosyaları internet üzerinden başka bir bilgisayara göndermeye başlamak için neye ihtiyaç duyacağına bir göz atalım(kiraladığınız bir kişi, bir aile üyesinin vs.).

rsync -av --delete -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/

Yukarıdaki komut dosyalarınızı, IP adresleri 10.1.1.1 olan başka bir bilgisayara gönderecektir. Artık kaynak dizinde mevcut olmayan yabancı dosyaları silebilir, ne oluyor bir fikir edinmek için aktarılan dosya adlarını çıktılar ve rsync'i 12345 numaralı bağlantı noktası üzerinden SSH aracılığıyla tünel haline getirir.

-a -v -e --delete anahtarları en temel ve yaygın olarak kullanılan bazılarıdır;bu eğiticiyi okursanız onlar hakkında iyi bir anlaşma yapmış olmalısınız. Bazen göz ardı edilen ancak inanılmaz derecede yararlı olan bazı diğer anahtarları gözden geçirelim:

--progress - Bu anahtar, her dosyanın aktarım ilerlemesini görmemizi sağlar. Büyük dosyaları internet üzerinden aktarırken özellikle kullanışlıdır, ancak hızlı bir ağ üzerinden küçük dosyaları aktarmaya çalışırken anlamsız miktarda bilgi yayabilir.

Yedekleme olarak --progress anahtarlı bir rsync komutu sürüyor:

--partial - Bu, internet üzerinden büyük dosyaları aktarırken özellikle yararlı olan başka bir anahtartır. Rsync herhangi bir sebepten dolayı bir dosya aktarımının ortasında kesilirse, kısmen aktarılan dosya hedef dizinde tutulur ve aktarım, rsync komutu tekrar çalıştırıldığında bıraktığı yerden devam eder.İnternette büyük dosyaları( birkaç gigabayt gibi) aktarırken, birkaç saniye içinde internet kesintisi, mavi ekran veya insan hatası yaparak dosyanızı aktarmayı ve baştan başlamak zorunda kalacağınızdan daha kötü bir şey yoktur.

-P - bu anahtar --progress ve --partial'i bir araya getirir, bu yüzden bunun yerine kullanın ve rsync komutunuzu biraz düzgün yapacaktır.

-z veya --compress - Bu anahtar, aktarılan rsync sıkıştırılmış dosya verilerini yapar ve böylece hedefe gönderilmesi gereken veri miktarını azaltır. Aslında oldukça yaygın bir anahtardır ancak yavaş bağlantılar arasında yalnızca gerçekten yararlıdır, esastan çok uzaktır ve aşağıdaki dosya türleri için hiçbir şey yapmaz: 7z, avi, bz2, deb, g, z iso, jpeg, jpg,mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

-h veya --human-readable - --progress anahtarını kullanıyorsanız kesinlikle bu programı kullanmayı isteyeceksiniz. Yani, baytları anında megabayt'a çevirmek istemiyorsanız.-h anahtarı, verilerin okunabilir biçimine dönüştürülmesiyle, aktarılan verinin miktarını anlamanıza imkan tanır.

-n veya --dry-run - Bu anahtar, rsync komut dosyanızı ne zaman yazdığınızı ve test ettiğinizi bilmek için gereklidir. Bir deneme çalıştırması yapar, ancak aslında herhangi bir değişiklik yapmaz - değişiklikleri normal olarak çıktılar; böylece her şeyi okuyabilir ve komut dosyanızı üretim sürecine aktarmadan önce sorunsuz olmasını sağlayabilirsiniz.

-R veya --relative - Bu anahtar, hedef dizini zaten mevcut değilse kullanılmalıdır. Bu seçeneği daha sonra bu kılavuzda kullanacağız, böylece hedef makine üzerinde klasörlerdeki zaman damgalarını içeren dizinleri oluşturabiliriz.

--exclude-from - Bu anahtar, yedeklenmesini istemediğiniz dizin yollarını içeren bir dışlama listesine bağlanmak için kullanılır. Her satırda bir dizin veya dosya yolu olan salt metin dosyasına ihtiyaç duyar.

--include-from - Benzer --exclude-from, ancak yedeklemek istediğiniz veri dizinleri ve dosya yollarını içeren bir dosyaya bağlanır.

--stats - Gerçekten önemli bir anahtar değil, ancak bir sistem yöneticisiyseniz, her bir yedeklemenin ayrıntılı istatistiklerini bilmek çok kullanışlı olabilir, böylece ağınız üzerinden gönderilen trafik miktarını izleyebilirsiniz..

--log dosyası - rsync çıktısını bir günlük dosyasına göndermenizi sağlar. Kesinlikle, bunu çıktıyı kendiniz okumak için orada olmadığınız otomatik yedeklemeler için öneriyoruz. Her şeyin düzgün çalışıp çalışmadığından emin olmak için her zaman günlük dosyalarınızı boş zamanınızda bir kez verin. Ayrıca, bir sistem yöneticisinin kullanması için çok önemli bir anahtardır, bu nedenle stajyeri sorumlu görevinden ayrılırken yedeklemelerinizin nasıl başarısız olduğunu merak etmeyin.

Şimdi, birkaç yeni anahtar eklendiğinden rsync komutuna bir göz atalım:

rsync -avzhP --delete --stats --log-file = /home/geek/rsynclogs/ backup.log --exclude-from '/home/geek/ exclude.txt'-e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/

Komut hala oldukça basit, ancak yine de iyi bir yedekleme çözümü yaratmadık. Dosyalarımız şimdi iki farklı fiziksel konumda olmasına rağmen, bu yedekleme, bizi veri kaybının başlıca nedenlerinden biri olan insan hatası için koruyacak hiçbir şey yapmaz.

Anlık Yedeklemeler

Bir dosyayı yanlışlıkla sildiyseniz, bir virüs dosyalarınızın herhangi birisini bozar ya da dosyalarınız istenmeden değiştirildiğinde rsync yedekleme komut dosyasını çalıştırırsanız, yedeklenen verileriniz istenmeyen değişikliklerle üzerine yazılır. Böyle bir şey meydana geldiğinde( yedekleme çözümü değilse değil) veri kaybınızdan sizi koruyacak bir şey yapmadı.

rsync'in yaratıcısı bunu fark etti ve --backup ve --backup-dir argümanlarını ekledi, böylece kullanıcılar farklı yedeklemeler çalıştırabiliyorlardı.Rsync'in web sitesinde yer alan ilk örnek, tam yedeğin her yedi günde bir çalıştırıldığı bir betik gösterir ve bu dosyalardaki değişiklikler her gün ayrı dizinlerde yedeklenir. Bu yöntemle ilgili sorun, dosyalarınızı kurtarmak için bunları yedi farklı kere etkili bir şekilde kurtarmalısınız. Dahası, çoğu meraklıları yedeklerini günde birkaç kez çalıştırdıklarından, herhangi bir zamanda kolayca 20'den fazla farklı yedekleme dizinine sahip olabilirsiniz. Dosyalarınızı kurtarmak yalnızca bir acı vermekle kalmaz, aynı zamanda yedeklenmiş verilerinize bakmak bile son derece zaman alıcı olabilir - en son yedek kopyasını bulmak için dosyanın son değiştirilme zamanı bilmeniz gerekir. Bütün bunlara rağmen, yalnızca haftalık( veya bazı durumlarda daha az sıklıkla) artımlı yedeklemeler çalıştırmak verimsizdir.

Kurtarma için Snapshot yedeklemeleri! Anlık yedekleme artımlı yedeklemelerden başka bir şey değildir, ancak orijinal kaynağın dosya yapısını korumak için hardlinklerden yararlanırlar. Başta başınızı sarmak zor olabilir, bu yüzden bir örneğe göz atalım.

İki saatte bir verilerinizi otomatik olarak yedekleyen bir yedekleme komut dosyamız varmış gibi yapın. Rsync bunu yaptığında, her bir yedeklemeyi: Backup-month-day-year-time( Yedekleme-ay-gün-yıl-zaman) biçiminde adlandırır.

Dolayısıyla, tipik bir günün sonunda, hedef dizinde şu şekilde bir klasör listesi olurdu:

Bu dizinlerden herhangi birinden geçerken, tam olarak o anda olduğu gibi kaynak dizindeki her dosyayı görürsünüz..Yine de, herhangi bir dizinde hiçbir çoğaltılması olmazdı.rsync, bunu --link-dest = DIR bağımsız değişkeni aracılığıyla hardlinking ile gerçekleştirir.

Elbette, bu güzel ve düzenli dizin adlarını elde etmek için, rsync komut dosyamızı biraz güçlendirmeliyiz. Bunun gibi bir yedekleme çözümü gerçekleştirmek için neye ihtiyaç duyacağına bir göz atalım ve betiği daha ayrıntılı olarak açıklayacağız:

#!/bin/ bash

# eski time.txt dosyasını time2.txt'ye kopyala

evet |cp ~ /backup/ time.txt ~ /backup/ time2.txt

# overwrite eski zaman.txt dosyasını yeni zaman

yankı `date +"% F-% I "p>` & gt;~ /backup/ time.txt

# günlük dosyasını

yankılayın "" & gt;~ /backup/ rsync-`date + "% F-% I% p" `.log

#rsync komutu

rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --stats --log-file = ~ /backup/ rsync-`date + "% F-% I% p" `.log --exclude-from '~ / exclude.txt' --link-dest = /home/geek2/files/` cat ~ /backup/time2.txt` -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/ `tarih +"% F-% I% p "` /

# günlük dosyasını scp yazmayı unutmayınız veyedekleme

scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/ `kedi ~ /backup/ zaman.txt '/ rsync-`cat ~ /backup/ zaman.txt`.log

Butipik bir enstantane rsync betiği olacaktır. Seni bir yerde kaybettik diye parçayı parçalara ayıralım:

Betik dosyamızın ilk satırı, time.txt dosyasının içeriğini time2.txt dosyasına kopyalar. Evet borusu, dosyanın üzerine yazmak istediğimizi doğrulamaktır. Sonra, geçerli saati alıp time.txt dosyasına koyduk. Bu dosyalar daha sonra kullanışlı olacak.

Bir sonraki satır rsync günlük dosyasını rsync-date.log olarak adlandırır( burada tarih, gerçek tarih ve saattir).

Şimdi, sizi uyaran karmaşık rsync komutu:

-avzhPR, -e, --delete, --stats, --log dosyası, --exclude-from, --link-dest - SadeceDaha önce bahsettiğimiz anahtarlar;Yenilemenize gerek duyarsanız yukarı kaydırın.

--chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - bunlar hedef dizininin izinleridir. Bu dizini rsync komut dosyamızın ortasında oluşturduğumuzdan, kullanıcılarımızın dosyalara dosya yazabilmesi için izinleri belirtmeliyiz.

Tarih ve cat komutlarının kullanımı

Tarih ve cat komutlarının her kullanımını rsync komutunun içinde, gerçekleştiği sıraya göre devam edeceğiz. Not: Bu işlevselliği gerçekleştirmenin başka yolları olduğunun, özellikle de bildirimde bulunan değişkenlerin kullanılmasının farkındayız, ancak bu kılavuzun amacı doğrultusunda bu yöntemi kullanmaya karar verdik.

Günlük dosyası şu şekilde belirtildi:

~ /backup/ rsync-`date + "% F-% I% p" `.log

Alternatif olarak bunu şöyle belirtebilirdik:

~ /backup/ rsync-`cat ~ /backup/ time.txt`.log

Her iki durumda da, --log-file komutu, önceden oluşturulmuş tarihli günlük dosyasını bulabilir ve yazabilir.

Bağlantı hedef dosyası şu şekilde belirtilmiştir:

--link-dest = /home/geek2/files/ `cat ~ /backup/ time2.txt`

--link-dest komutuna önceki yedek dizini verilmiş demektir. Her iki saatte bir yedekleme çalıştırıyorsanız ve bu komut dosyasını çalıştırdığımız saat 16: 00'da, --link-dest komutu 14: 00'da yaratılan dizini arar ve o zamandan bu yana değişen verileri aktarır( varsa).

Yinelemek için time.txt komut dosyasının başında time2.txt dosyasına kopyalanır, bu nedenle --link-dest komutu o zamana daha sonra başvurabilir.

Hedef dizini şu şekilde belirtilmiştir:

[email protected]: /home/geek2/files/ `date +"% F-% I% p "`

Bu komut sadece kaynak dosyalarını geçerli tarih ve saat başlıklı bir dizine koyar.

Son olarak, günlük dosyasının bir kopyasının yedekleme içine yerleştirildiğinden emin oluruz.

scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/ `kedi ~ /backup/ zaman.txt '/ rsync-`cat ~ /backup/ zaman.txt`.log

Kullandıklarımızrsync günlüğünü alıp uygun dizinde yerleştirmek için 12345 numaralı bağlantı noktasında güvenli bir kopyasını alın. Doğru günlük dosyasını seçmek ve dosyanın doğru yerde bittiğinden emin olmak için time.txt dosyasına cat komutuyla başvurulması gerekir. Date komutunu kullanmak yerine neden cat time.txt'ye karar verdik merak ediyorsanız, rsync komutu çalışırken çok zaman geçti, bu nedenle doğru zamana sahip olduğumuzdan emin olmak için yalnızca kedi kullanıyoruzDaha önce oluşturduğumuz metin belgesi.

Otomasyonu

rsync komut dosyanızı otomatikleştirmek için Windows'da Linux'ta Cron veya Görev Zamanlayıcı kullanın. Dikkatli olunması gereken bir şey, şu anda çalışmakta olan bir rsync sürecini yenisiyle değiştirmeden önce sonlandıracağınızdan emin olmaktır. Görev Zamanlayıcı, zaten çalışan tüm örnekleri otomatik olarak kapatmış gibi görünüyor, ancak Linux için biraz daha yaratıcı olmanız gerekir.

Çoğu Linux dağıtımı pkill komutunu kullanabilir, bu nedenle aşağıdakileri rsync komut dosyanızın başına ekleyin:

pkill -9 rsync

Şifreleme

Hayır, henüz bitmiş değiliz. Sonunda harika bir( ve ücretsiz!) Yedekleme çözümü hazırladık, ancak dosyalarımızın tümü hâlâ hırsızlıktan etkileniyor. Umarım, dosyalarınızı yüzlerce mil uzaktaki bir yere yedeklersiniz. Uzak yer ne kadar güvenli olursa olsun, hırsızlık ve hack her zaman sorun olabilir.

Örneklerimizde, tüm rsync trafiğimizi SSH aracılığıyla tünelleştirdik, böylece tüm dosyalarımız hedeflerine ulaşırken şifrelenir. Bununla birlikte, hedefin tam olarak güvenli olduğundan emin olmalıyız. Unutmayın ki rsync yalnızca verilerini aktarılırken şifrelemektedir, ancak hedefe ulaştıklarında dosyalar geniş açıktır.

rsync'in en iyi özelliklerinden biri, yalnızca her dosyadaki değişiklikleri aktarmasıdır. Dosyalarınızın tümünün şifrelenmiş olması ve küçük değişiklikler yapması durumunda, tüm dosyalar, herhangi bir değişiklik sonrasında tüm verileri tamamen randomize eden şifreleme sonucunda yeniden gönderilmelidir.

Bu nedenle, Windows için BitLocker veya Linux için dm-crypt gibi bazı disk şifreleme türlerini kullanmanız en kolay / en kolaydır. Bu şekilde, verileriniz hırsızlık durumunda korunur, ancak dosyalar rsync ile aktarılabilir ve şifrelemeniz performansını etkilemez. Rsync'e benzer şekilde çalışan veya hatta Çoğaltıcılık gibi bazı biçimlerini uygulayan diğer seçenekler var, ancak rsync'in sunduğu bazı özelliklerden yoksun.

Enstantane yedeklemelerinizi yerinde olmayan bir yerde kurduktan ve kaynak ve hedef sabit disklerinizi şifreledikten sonra, rselling'i mastering ve mümkün olan en eksiksiz veri yedekleme çözümünü uygulamak için kendinize bir göz atın.