Giriş: Büyük Dizinleri Yedeklemenin Zorlukları ve Unison Çözümü
Büyük dizinleri, özellikle zamanla sürekli değişen dosya koleksiyonlarını yedeklemek, birçok kullanıcı için önemli bir zorluk teşkil eder. Geleneksel kopyalama yöntemleri (örneğin cp veya rsync‘in basit kullanımları), her seferinde tüm dizini kopyalamaya çalıştığında aşırı zaman ve kaynak tüketebilir. Özellikle terabaytlarca veriye sahip projeler, medya koleksiyonları veya geliştirme ortamları söz konusu olduğunda, her yedeklemede baştan başlamak pratik değildir. İhtiyaç duyulan şey, yalnızca değişen veya yeni eklenen dosyaları verimli bir şekilde senkronize edebilen, hatta iki yönlü senkronizasyon yeteneğine sahip bir araçtır.
İşte tam bu noktada Unison devreye girer. Unison, iki dizin arasındaki farkları tespit edip her iki tarafı da güncelleyerek onları aynı duruma getiren güçlü bir dosya senkronizasyon aracıdır. Diğer senkronizasyon araçlarından farklı olarak, Unison hem yerel olarak (örneğin bir harici diske) hem de ağ üzerinden (SSH kullanarak uzak bir sunucuya) iki yönlü senkronizasyon yapabilir. Bu, yalnızca yedekleme için değil, aynı zamanda birden fazla makine arasında dosyaları güncel tutmak için de idealdir. Özellikle büyük dizinler için ilk senkronizasyondan sonraki işlemlerde sadece değişen blokları veya dosyaları aktararak inanılmaz bir verimlilik sunar. Bu rehberde, Ubuntu 18.04 üzerinde Unison’ı kullanarak büyük dizinleri nasıl etkili bir şekilde yedekleyeceğinizi ve senkronize edeceğinizi adım adım inceleyeceğiz.
Unison Kurulumu ve Temel Çalışma Prensibi
Unison’ı kullanmaya başlamadan önce onu sisteminize kurmanız ve temel çalışma mantığını anlamanız gerekmektedir.
Unison Kurulumu
Ubuntu 18.04’te Unison’ı kurmak oldukça basittir ve sistemin paket yöneticisi apt aracılığıyla yapılabilir.
Öncelikle, paket listelerinizi güncelleyin:
sudo apt update
Ardından, Unison paketini kurun:
sudo apt install unison
Eğer grafik arayüzünü (GUI) tercih ediyorsanız, unison-gtk paketini de kurabilirsiniz:
sudo apt install unison-gtk
Kurulum tamamlandıktan sonra, terminalde unison yazarak veya uygulamalar menüsünden Unison GUI’sini başlatarak aracın kurulu olduğunu doğrulayabilirsiniz.
Unison Nasıl Çalışır?
Unison’ın çalışma prensibi oldukça basittir ancak arkasındaki teknoloji oldukça gelişmiştir:
1. Profil Temelli Çalışma: Unison, her senkronizasyon görevi için bir “profil” kullanır. Bu profil, senkronize edilecek iki kök dizini (örneğin /home/kullanici/belgeler ve /media/yedek/belgeler) ve senkronizasyon davranışını belirleyen ayarları (hangi dosyaların göz ardı edileceği, çakışmaların nasıl çözüleceği vb.) tanımlar.
2. Meta Veri Veritabanı: Her senkronizasyon işlemi için Unison, senkronize edilen dizinlerin her iki tarafında da .unison adında gizli bir dizin oluşturur. Bu dizin, dosyaların son durumunu, değişiklik tarihlerini, boyutlarını ve diğer önemli meta verileri içeren bir veritabanı barındırır. Bu veritabanı, Unison’ın bir sonraki senkronizasyonda sadece değişen dosyaları veya dosya bloklarını hızlıca tespit etmesini sağlar.
3. Karşılaştırma ve Mutabakat: Senkronizasyon başlatıldığında, Unison her iki dizindeki dosyaları ve .unison veritabanındaki kayıtları karşılaştırır.
* Yeni Dosyalar/Dizinler: Bir tarafta olan ancak diğer tarafta olmayan dosya veya dizinler tespit edilir ve diğer tarafa kopyalanır.
* Değişen Dosyalar: Her iki tarafta da var olan ancak içerikleri veya meta verileri (değişiklik tarihi gibi) farklı olan dosyalar tespit edilir. Unison, bu dosyaların sadece değişen kısımlarını (bloklarını) aktararak bant genişliğinden tasarruf eder. Bu, rsync‘in delta transfer algoritmasına benzerdir.
* Silinen Dosyalar: Bir taraftan silinen dosyalar, varsayılan olarak diğer taraftan da silinir. Bu davranış, parametrelerle değiştirilebilir.
* Çakışmalar: Aynı dosya her iki tarafta da bağımsız olarak değiştirildiyse, Unison bunu bir çakışma olarak işaretler. Varsayılan olarak, Unison bu tür durumlarda kullanıcıdan onay ister (interaktif mod). Ancak otomatik modda (-batch), hangi tarafın tercih edileceğini belirten kurallar (-prefer) kullanılabilir.
4. İki Yönlü Senkronizasyon: Unison’ın en güçlü özelliklerinden biri, senkronizasyonun iki yönlü olmasıdır. Yani, A’daki değişiklikler B’ye, B’deki değişiklikler de A’ya yansıtılır. Bu, yedeklemeden öte, iki konumu sürekli olarak güncel tutmak için harikadır.
Bu temel prensipleri anladığınızda, Unison’ı büyük dizinleriniz için güvenle ve verimli bir şekilde kullanmaya başlayabilirsiniz.
Büyük Dizinleri Senkronize Etme: İlk Senkronizasyon ve Sonrası
Unison ile büyük dizinleri senkronize etmek, ilk seferde biraz zaman alabilir ancak sonraki senkronizasyonlar inanılmaz derecede hızlıdır. Bu bölümde, senkronizasyon sürecini detaylandıracağız.
Senaryo Belirleme
Bu rehberde, ana makinemizdeki (Ubuntu 18.04) büyük bir dizini harici bir diske veya yerel olarak bağlanmış bir ağ paylaşımına yedekleme senaryosuna odaklanacağız. Uzak bir SSH sunucusuna senkronizasyonu daha sonra ele alacağız.
Örnek olarak, /home/kullanici/Projelerim dizinini harici diskteki /media/yedek_disk/Projelerim_Yedek konumuna senkronize edeceğimizi varsayalım.
İlk Senkronizasyon: Her Şeyin Kopyalanması
İlk senkronizasyon, Unison’ın her iki dizini de tarayarak ve tüm dosyaları karşıya kopyalayarak bir başlangıç noktası oluşturduğu aşamadır. Bu, büyük dizinler için en uzun süren adımdır.
Unison’ı komut satırından kullanırken, senkronize etmek istediğiniz iki dizini belirtmeniz yeterlidir:
unison -batch /home/kullanici/Projelerim /media/yedek_disk/Projelerim_Yedek
Bu komuttaki -batch parametresi önemlidir. Bu, Unison’ın herhangi bir çakışma veya onay durumunda otomatik olarak varsayılan eylemi gerçekleştirmesini sağlar ve etkileşimli sorular sormaz. İlk senkronizasyonda, genellikle hedef dizin boş olduğu için Unison tüm dosyaları kaynaktan hedefe kopyalar ve herhangi bir soru sormaz.
Pratik İpuçları:
* Sabır: Büyük dizinler için ilk senkronizasyon saatler, hatta günler sürebilir. Bu süre zarfında bilgisayarınızın kapanmadığından veya harici diskin bağlantısının kesilmediğinden emin olun.
* Boş Hedef Dizin: İlk senkronizasyon için hedef dizinin boş olması tavsiye edilir. Eğer hedef dizinde zaten dosyalar varsa, Unison onları karşılaştıracak ve farklı olanları senkronize edecektir, bu da ilk işlemi biraz daha karmaşık hale getirebilir.
* Performans: USB 3.0 veya daha hızlı bağlantılar kullanmak, harici disk performansı için kritik öneme sahiptir. Ağ paylaşımları için Gigabit Ethernet gibi hızlı ağ bağlantıları tercih edin.
Sonraki Senkronizasyonlar: Verimliliğin Zirvesi
İlk senkronizasyon tamamlandıktan sonra, Unison’ın sihri gerçekten başlar. Sonraki senkronizasyonlar sadece değişen dosyaları veya dosya bloklarını aktararak inanılmaz derecede hızlı olacaktır. Aynı komutu tekrar çalıştırın:
unison -batch /home/kullanici/Projelerim /media/yedek_disk/Projelerim_Yedek
Bu sefer Unison, .unison dizinindeki meta veritabanını kullanarak her iki taraftaki değişiklikleri hızla tespit eder. Yalnızca yeni dosyalar, değiştirilmiş dosyaların değişen blokları ve silinen dosyalar işlenir. Bu, özellikle büyük dosyaların küçük bir kısmının değiştiği durumlarda (örneğin, bir veritabanı dosyasının veya büyük bir arşivin) bant genişliğinden ve zamandan muazzam bir tasarruf sağlar.
Önemli Parametreler ve İpuçları
Unison’ı daha verimli ve kontrol edilebilir hale getirmek için kullanabileceğiniz bazı önemli parametreler şunlardır:
* -ignore : Belirli dosya veya dizinleri senkronizasyon dışında bırakmak için kullanılır. Özellikle geliştirme projelerinde node_modules, .git, target/ gibi geçici veya versiyon kontrolüne ait dizinleri yedeklemek istemeyebilirsiniz.
unison -batch /home/kullanici/Projelerim /media/yedek_disk/Projelerim_Yedek \
-ignore 'Name node_modules' \
-ignore 'Name .git' \
-ignore 'Path *.log'
Name deseni sadece dosya/dizin adını eşleştirirken, Path deseni tam yolu eşleştirir.
* -prefer : Çakışma durumunda hangi tarafın tercih edileceğini belirtir. source (ilk belirttiğiniz dizin) veya destination (ikinci belirttiğiniz dizin) olabilir. newest ise en yeni değiştirilmiş dosyayı tercih eder.
unison -batch -prefer newest /home/kullanici/Projelerim /media/yedek_disk/Projelerim_Yedek
* -force : Senkronizasyonu tek bir yöne zorlar, çakışma olsun olmasın belirtilen tarafın her zaman kazanmasını sağlar. Genellikle ilk yedekleme veya belirli bir yöne sürekli yedekleme için kullanılır.
unison -batch -force /home/kullanici/Projelerim /media/yedek_disk/Projelerim_Yedek
* -perms : Dosya izinlerinin nasıl ele alınacağını belirler. 0 (izinleri senkronize etme), 1 (izinleri senkronize et) veya default (varsayılan) olabilir.
* -owner, -group: Dosya sahipliğini ve grup bilgisini korumak için kullanılır. Özellikle Linux sistemleri arasında senkronizasyon yaparken önemlidir.
unison -batch -owner -group -perms 1 /home/kullanici/Projelerim /media/yedek_disk/Projelerim_Yedek
* -times: Dosya değişiklik zamanlarını korur. Genellikle varsayılan olarak etkindir ancak emin olmak için belirtebilirsiniz.
* -auto: -batch ile benzerdir, otomatik olarak varsayılan eylemleri onaylar.
* -reread: Senkronizasyon başlamadan önce dizinlerin tüm içeriğini yeniden taramaya zorlar. Nadiren gerekli olsa da, .unison veritabanının bozulduğunu düşünüyorsanız faydalı olabilir.
Bu parametreleri kullanarak senkronizasyon sürecini ihtiyaçlarınıza göre ince ayar yapabilir ve büyük dizinlerinizin yedeklemesini daha güvenli ve otomatik hale getirebilirsiniz.
Gelişmiş Kullanım ve Otomasyon
Unison’ı temel komutlarla kullanmak kolay olsa da, daha karmaşık senaryolar ve otomasyon için bazı gelişmiş özelliklerini bilmek faydalıdır.
SSH Üzerinden Senkronizasyon
Unison, uzak bir sunucuya SSH üzerinden senkronizasyon yapma yeteneği sayesinde bulut yedeklemeleri veya uzak sunucularla dosya senkronizasyonu için de mükemmeldir. SSH bağlantısı için parola girmemek adına anahtar tabanlı kimlik doğrulamasını ayarlamanız şiddetle tavsiye edilir.
Uzak bir sunucuya senkronizasyon yapmak için ssh:// önekini kullanırız:
unison -batch /home/kullanici/belgeler ssh://kullanici@uzak_sunucu//home/kullanici/belgeler_yedek
Burada:
* kullanici: Uzak sunucudaki kullanıcı adınız.
* uzak_sunucu: Uzak sunucunun IP adresi veya ana bilgisayar adı.
* //home/kullanici/belgeler_yedek: Uzak sunucudaki mutlak yol. İlk iki eğik çizgi, yolun kök dizinden başladığını belirtir.
Eğer özel bir SSH portu veya anahtar dosyası kullanıyorsanız, -sshargs parametresi ile SSH argümanlarını belirtebilirsiniz:
unison -batch /home/kullanici/belgeler \
ssh://kullanici@uzak_sunucu//home/kullanici/belgeler_yedek \
-sshargs "-p 2222 -i ~/.ssh/id_rsa_ozel"
Profil Dosyaları ile Çalışma
Birden fazla dizini senkronize ediyorsanız veya çok sayıda parametre kullanıyorsanız, her seferinde komutu yazmak yerine “profil dosyaları” kullanmak çok daha pratiktir. Unison profilleri, ~/.unison/ dizininde .prf uzantılı dosyalar olarak saklanır.
Örnek bir profil dosyası (~/.unison/yedeklerim.prf) şöyle görünebilir:
# yedeklerim.prf
root = /home/kullanici/Projelerim
root = /media/yedek_disk/Projelerim_Yedek
batch = true
prefer = newest
ignore = Name node_modules
ignore = Name .git
ignore = Path *.log
owner = true
group = true
perms = 1
times = true
Bu profili kullanarak senkronizasyonu başlatmak için sadece profil adını belirtmeniz yeterlidir:
unison yedeklerim
Unison otomatik olarak ~/.unison/yedeklerim.prf dosyasını bulacak ve içindeki ayarları uygulayacaktır. Bu, uzun komutları tekrar tekrar yazmaktan kurtarır ve ayarları tek bir yerde yönetmenizi sağlar.
Otomatik Senkronizasyon (Cron ile)
Yedekleme veya senkronizasyon işlemlerinin düzenli olarak otomatikleştirilmesi, veri güvenliği için kritik öneme sahiptir. Ubuntu’da bu tür görevler için cron kullanılabilir.
Bir cron işi oluşturmak için terminalde aşağıdaki komutu çalıştırın:
crontab -e
Açılan editöre, senkronizasyon işleminizi belirli aralıklarla çalıştıracak bir satır ekleyebilirsiniz. Örneğin, her gün sabah 3’te senkronizasyon yapmak için:
# Her gün sabah 3'te Unison profilini çalıştır ve logla
0 3 * /usr/bin/unison yedeklerim -log /var/log/unison_yedeklerim.log
Yukarıdaki örnekte:
0 3 : Cron zamanlamasıdır (dakika, saat, günün ayı, ay, haftanın günü). Bu, her gün sabah 3:00’te anlamına gelir.
* /usr/bin/unison yedeklerim: Çalıştırılacak Unison komutu ve profil adıdır. Unison’ın tam yolunu belirtmek, cron ortamında PATH değişkeni farklı olabileceği için iyi bir uygulamadır. which unison komutuyla tam yolu bulabilirsiniz.
* -log /var/log/unison_yedeklerim.log: Senkronizasyon çıktısını belirtilen log dosyasına yönlendirir. Bu, otomatik senkronizasyonların başarılı olup olmadığını veya bir hata olup olmadığını kontrol etmek için önemlidir.
Cron ile İpuçları:
* Ortam Değişkenleri: Cron ortamı, normal kabuk ortamınızdan farklı olabilir. Bu nedenle, komutların tam yollarını (/usr/bin/unison gibi) belirtmek genellikle en iyisidir.
* Hata Yönetimi: -log parametresi veya >> ile çıktıyı bir dosyaya yönlendirmek, sorun giderme için çok önemlidir.
* Parola Girmeme: Eğer SSH üzerinden senkronize ediyorsanız, cron işinin parola sormadan çalışabilmesi için anahtar tabanlı kimlik doğrulamayı ayarladığınızdan emin olun.
Çakışma Yönetimi
Unison, iki yönlü senkronizasyon yaparken çakışmaları (aynı dosyanın her iki tarafta da bağımsız olarak değiştirilmesi) tespit etme konusunda oldukça yeteneklidir.
* Etkileşimli Mod: -batch parametresini kullanmazsanız, Unison bir çakışma tespit ettiğinde size hangi sürümü tutmak istediğinizi sorar.
* Otomatik Mod: -batch ile birlikte -prefer parametresi kullanarak çakışmaları otomatik olarak çözebilirsiniz. Örneğin, -prefer source her zaman kaynak taraftaki dosyayı tercih ederken, -prefer newest en son değiştirilen dosyayı tercih eder.
* noupdate ve noremovals: Belirli bir tarafın güncellenmesini veya silinmesini engellemek için noupdate (hiçbir zaman bu tarafı güncelleme) veya noremovals (bu taraftan dosya silme) gibi parametreleri kullanabilirsiniz. Bu, özellikle bir tarafın “ana kopya” olduğu veya yanlışlıkla silmeleri önlemek istediğiniz durumlarda faydalıdır.
Bu gelişmiş özellikler, Unison’ı büyük dizinlerinizin yedeklenmesi ve senkronizasyonu için son derece esnek ve güçlü bir araç haline getirir.
Sonuç ve Sıkça Sorulan Sorular (SSS)
Unison, büyük dizinleri yedeklemek ve senkronize etmek için güçlü, esnek ve verimli bir çözümdür. İlk senkronizasyonun kapsamlı doğasına rağmen, sonraki senkronizasyonlardaki blok düzeyinde değişiklik algılama yeteneği sayesinde zaman ve kaynak tasarrufu sağlar. İki yönlü senkronizasyon, çakışma yönetimi ve SSH desteği gibi özellikleri, onu hem yerel yedeklemeler hem de uzak sistemler arasında veri tutarlılığını sağlamak için ideal bir araç haline getirir. Profil dosyaları ve cron ile otomasyon yeteneği, yedekleme stratejinizi basitleştirir ve veri güvenliğinizi sürekli kılar.
Unutmayın, düzenli yedekleme, veri kaybını önlemenin temelidir. Unison ile bu süreci kolayca otomatikleştirebilir ve önemli verilerinizin her zaman güvende olduğundan emin olabilirsiniz.
Sıkça Sorulan Sorular (SSS)
Soru: Unison rsync‘den daha mı iyi?
Cevap: Unison ve rsync farklı senaryolar için optimize edilmiş araçlardır. rsync genellikle tek yönlü, hızlı ve basit yedeklemeler için tercih edilirken, Unison iki yönlü senkronizasyon, gelişmiş çakışma yönetimi ve senkronizasyon durumunu takip eden bir veritabanı sunar. Eğer sadece tek yönlü, basit bir kopyalama yapacaksanız rsync daha uygun olabilir. Ancak iki konum arasında sürekli güncel tutulması gereken verileriniz varsa veya çakışmaları akıllıca yönetmek istiyorsanız Unison daha iyi bir seçimdir.
Soru: Unison hangi işletim sistemlerinde çalışır?
Cevap: Unison çapraz platform bir araçtır. Linux (Ubuntu dahil), macOS ve Windows işletim sistemlerinde sorunsuz bir şekilde çalışır. Bu, farklı platformlar arasında dosya senkronizasyonu yapmak için de idealdir.
Soru: Büyük dosyaları senkronize ederken performans sorunları yaşar mıyım?
Cevap: İlk senkronizasyon, tüm verilerin kopyalanması gerektiği için büyük dosyalar veya dizinler için zaman alıcı olabilir. Ancak, Unison’ın sonraki senkronizasyonları yalnızca değişen dosya bloklarını aktardığı için çok daha hızlıdır. Performans, büyük ölçüde disk I/O hızına ve ağ bağlantınızın (eğer uzak bir konuma senkronize ediyorsanız) bant genişliğine bağlıdır.
Soru: Unison silinen dosyaları nasıl yönetir?
Cevap: Varsayılan olarak, Unison bir tarafta silinen bir dosyanın diğer tarafta da silinmesini önerir. Bu, her iki dizini de aynı duruma getirme felsefesinin bir parçasıdır. Ancak, bu davranışı değiştirebilirsiniz. Örneğin, noremovals parametresi ile belirli bir kök dizinden dosya silmeyi engelleyebilirsiniz.
Soru: Senkronizasyon sırasında elektrik kesintisi veya bağlantı kopması olursa ne olur?
Cevap: Unison, senkronizasyon durumunu ve dosya meta verilerini .unison dizinindeki bir veritabanında tutar. Bir kesinti durumunda, genellikle tekrar çalıştırdığınızda Unison kaldığı yerden devam edebilir veya veritabanını kontrol ederek tutarlı bir duruma geri dönebilir. Ancak, özellikle büyük dosyalar için veri bütünlüğünü kontrol etmek ve gerekirse manuel olarak müdahale etmek önemlidir. Güvenilir bir güç kaynağı (UPS) kullanmak, elektrik kesintilerine karşı iyi bir önlemdir.
