Sunucular arasında veri yedekleme
Bu kılavuz, rsync kullanarak Linux sunucuları arasında verilerin nasıl kopyalanacağını ve yedekleneceğini ve ayrıca dd kullanarak disklerin düşük seviyeli nasıl klonlanacağını açıklar.
Başlamadan önce
Bu kılavuzdaki komutlar kaynak sunucuda, yani verileri kopyaladığınız sunucuda çalıştırılır. Hedef sunucuya SSH üzerinden erişilebilmelidir ve komutta belirtilen kullanıcının kaynak yoluna okuma ve hedef yoluna yazma izinleri olmalıdır.
Yedekleme işlemine başlamadan önce hedef sunucuya SSH erişimini doğrulamak için:
ssh user@destination_host
user yerine uzak sunucudaki kullanıcı adını, destination_host yerine ise hedef sunucunun IP adresini veya ana bilgisayar adını yazın.
Otomatik veya zamanlanmış yedeklemeler için parola kullanmak yerine SSH anahtar tabanlı kimlik doğrulaması yapılandırın.
Bir dizini uzak sunucuya kopyalama
Kaynak yolundaki sondaki eğik çizginin rsync'in davranışını etkilediğini unutmayın: /source/ dizinin içeriğini kopyalarken, /source dizinin kendisini kopyalar.
Yanlışlıkla veri kaybını önlemek için --delete içeren komutları çalıştırmadan önce her zaman --dry-run kullanın. Herhangi bir değişiklik yapmadan neyin aktarılacağını önizlemek için:
rsync -a --delete --dry-run -e ssh /path/to/source/ user@destination_host:/path/to/backup/
Çıktıyı kontrol ettikten sonra aynı komutu --dry-run olmadan çalıştırın. Kesintiye uğrayan bir aktarımı devam ettirmek ve ilerlemeyi görüntülemek için -P ekleyin:
rsync -a --delete -e ssh -P /path/to/source/ user@destination_host:/path/to/backup/
-a seçeneği izinleri, zaman damgalarını ve sembolik bağlantıları korur. --delete seçeneği, kaynakta bulunmayan dosyaları hedeften kaldırarak hedefin kaynağın tam bir aynası olmasını sağlar. Ayrıntılı çıktı için -v ekleyin.
--delete seçeneği, kaynakta bulunmayan dosyaları hedef konumdan siler. Hedefte bağımsız olarak korunması gereken dosyalar varsa bu seçeneği kullanmayın.
Sistem dosyalarının çoğunu kopyalama
Sanal ve geçici dizinleri hariç tutarak dosya sisteminin büyük bölümünü kopyalamak için:
rsync -aAXv --delete --one-file-system --numeric-ids \ --exclude={/dev/,/proc/,/sys/,/tmp/,/run/,/mnt/,/media/,/lost+found,/swapfi le} \ / user@destination_host:/path/to/backup/
Kullanılan seçenekler: -a izinleri, zaman damgalarını, sembolik bağlantıları korur ve özyinelemeli kopyalama yapar; -A ACL'leri korur; -X genişletilmiş öznitelikleri korur; -v ayrıntılı çıktı gösterir. Sabit bağlantılar için kullanılan -H seçeneği kasıtlı olarak kullanılmamıştır: sistem sabit bağlantılarının uzak bir yedekte çoğaltılması gerekmez ve bunların korunması aktarım süresini ve karmaşıklığını artırır. --one-file-system seçeneği rsync'in diğer bağlı dosya sistemlerine geçmesini önler. --numeric-ids seçeneği UID ve GID değerlerini kullanıcı adlarına eşlemeden korur; bu, kaynak ve hedef sunucuların farklı kullanıcı yapılandırmalarına sahip olması durumunda önemlidir.
Hariç tutulan yolların çoğunda, dizinin kendisini koruyup içeriğini hariç tutmak için sondaki eğik çizgi kullanılır. /lost+found sonunda eğik çizgi içermez, çünkü yalnızca içeriğinin değil, dizinin tamamının hariç tutulması gerekir. Aynı kural kaynak yolu için de geçerlidir: /source/ dizinin içeriğini kopyalarken, /source dizinin kendisini kopyalar.
Bu yöntem önyüklenebilir bir sistem görüntüsü oluşturmaz ve tam sistem yedeğinin yerine kullanılmamalıdır. Çalışan sistemlerin tutarlı yedeklerini almak için komutu çalıştırmadan önce kritik hizmetleri durdurmayı veya LVM snapshot'ları gibi dosya sistemi snapshot'larını kullanmayı değerlendirin.
rsync ile tam dizin klonlama
Sabit bağlantıları, ACL'leri ve genişletilmiş öznitelikleri koruyarak bir dizin ağacının tam klonunu oluşturmak için:
rsync -aAHXv /source/dir/ user@destination_host:/destination/dir/
Burada kullanılan seçenekler: -a izinleri, zaman damgalarını ve sembolik bağlantıları korur ve özyinelemeli kopyalama yapar; -A ACL'leri korur; -H tam bir dizin klonu için önemli olan sabit bağlantıları korur; -X genişletilmiş öznitelikleri korur; -v ayrıntılı çıktı gösterir.
dd ile disk klonlama
Bir diskin tamamını aynı sunucudaki başka bir diske klonlamak için:
dd if=/dev/sdX of=/dev/sdY bs=1M conv=noerror,sync status=progress
sdX yerine kaynak diski, sdY yerine hedef diski yazın. conv=noerror,sync seçenekleri, okuma hatalarından sonra hasarlı blokları sıfırlarla doldurarak kopyalamanın devam etmesini sağlar. Veri bütünlüğü kritikse, bu seçenekleri kullanmayın; böylece dd ilk hatada durur ve hatalı blokları sessizce sıfırlarla değiştirmez.
Bir diski SSH üzerinden uzak bir sunucuya klonlamak için:
dd if=/dev/sdX bs=1M status=progress | ssh user@destination_host 'dd of=/dev/sdY bs=1M'
Hedef olarak blok aygıtı yerine bir dosya yolu da kullanılabilir.
dd, onay istemeden doğrudan hedef aygıta veya hedef dosyaya yazar. Komutu çalıştırmadan önce kaynak ve hedefi dikkatlice kontrol edin. Çalışan sistemlerde mümkünse kaynak diskin tüm bölümlerini ayırın veya salt okunur olarak yeniden bağlayın. Bağlı dosya sistemlerinin tutarlı yedeklerini oluşturmak için LVM snapshot'larını kullanın veya sistemi bir kurtarma ortamından başlatın.
Yedeği doğrulama
Aktarım tamamlandıktan sonra hedef sunucuya bağlanın ve yedeğin boyutunu ve temel yapısını kontrol edin:
ssh user@destination_host du -sh /path/to/backup/ ls /path/to/backup/
Kapsamlı bir bütünlük kontrolü için rsync'i --checksum ve --dry-run seçenekleriyle çalıştırın. Bu, zaman damgaları yerine dosya içeriklerini karşılaştırır ve tüm farklılıkları bildirir:
rsync -av --checksum --dry-run /path/to/source/ user@destination_host:/path/to/backup/
Bu işlemin, büyük veri kümelerinde normal bir rsync çalıştırmasına kıyasla önemli ölçüde daha uzun sürebileceğini unutmayın.