Uygulama

Linux’ta Rsnapshot ile yedeklemeler nasıl oluşturulur

Rsnapshot, SSH aracılığıyla yerel veya uzak sistemlerin artımlı anlık görüntülerini gerçekleştirmek için Rsync’in etrafında bir sarmalayıcı olarak çalışan ücretsiz ve açık kaynaklı bir yardımcı programdır. Sabit bağlantılar, değişmemiş dosyaları yedeklerken yerden tasarruf etmek, kullanıcıya dosya sistemlerinin tamamını görüntülerken alanı korumak için kullanılır. Bu eğitimde, en çok kullanılan Linux dağıtımlarından bazılarına Rsnapshot’ın nasıl kurulacağını ve yapılandırılacağını öğreniyoruz.

 

Kurulum

Ücretsiz ve açık kaynaklı bir yardımcı program olan rsnapshot, en çok kullanılan Linux dağıtımlarının resmi veya güvenilir üçüncü taraf depolarında mevcuttur. Örneğin, yardımcı programı Fedora’ya kurmak için tek yapmamız gereken, favori terminal emülatörümüzü başlatmak ve aşağıdaki komutu vermektir:

$ sudo dnf install rsnapshot

 



Rsnapshot’ı RHEL (Red Hat Enterprise Linux) ve klonlarına aynı komutu kullanarak kurabiliriz; ancak bu dağıtımlarda önceden yazılım kaynağı olarak EPEL deposunu eklememiz gerekiyor.

Kurulumu Debian, Ubuntu ve diğer Debian tabanlı dağıtımlarda gerçekleştirmek için apt paket yöneticisini kullanıyoruz:

$ sudo apt install rsnapshot

Rsnapshot ayrıca Archlinux’un “ekstra” deposunda da mevcuttur. Pacman kullanarak kurabiliriz:

$ sudo pacman -S rsnapshot

Rsnapshot’ı favori Linux dağıtımımıza yükledikten sonra, onu artımlı yedeklemeler oluşturmak için kullanabiliriz. Bakalım nasıl olacak.

Anlık görüntü yapılandırması

Rsnapshot’ı yapılandırmak için yapılandırma dosyasını düzenliyoruz: /etc/rsnapshot.conf. Dosyanın başındaki büyük uyarıda da belirtildiği gibi öğeler arasında yalnızca sekmeler kullanılmalıdır; boşlukların kullanılması sözdizimi hatalarına neden olur:

#################################################
#                                               #
# PLEASE BE AWARE OF THE FOLLOWING RULE:        #
#                                               #
# This file requires tabs between elements      #
#                                               #
#################################################

Dosyada tanımlamak istediğimiz ilk direktif snapshot_root’tur. Adından da anlaşılacağı gibi tüm anlık görüntülerin kaydedileceği dizini belirtmek için kullanılır. Aşağıdaki örnekte, anlık görüntü kökü olarak /snapshots dizinini kullanıyoruz:

# All snapshots will be stored under this root directory.
#
snapshot_root /snapshots/

Dizin mevcut değilse, no_create_root yönergesi etkinleştirilmediği sürece ilk yedekleme gerçekleştirildiğinde otomatik olarak oluşturulur (varsayılan değer normalde 0’dır):

# If no_create_root is enabled, rsnapshot will not automatically create the
# snapshot_root directory. This is particularly useful if you are backing
# up to removable media, such as a FireWire or USB drive.
#
#no_create_root 1

Rsnapshot’ı rsync yoluna yönlendirme

Rsnapshot, yedeklemeleri gerçekleştirmek için rsync’i kullanır, bu nedenle rsync ikili dosyasının konumunu cmd_rsync yönergesi aracılığıyla belirtmemiz gerekir. Bu, varsayılan olarak /usr/bin/rsync olarak ayarlanmıştır ve rsync’i başka bir konuma kurmadığımız sürece hiçbir değişiklik gerektirmez:

# rsync must be enabled for anything to work. This is the only command that
# must be enabled.
#
cmd_rsync /usr/bin/rsync

Saklama politikası oluşturma

Yedeklerimizi oluşturmaya başlamadan önce bir saklama politikası oluşturmamız gerekiyor: farklı yedekleme türlerini tanımlamamız ve belirli bir türden kaç anlık görüntünün saklanması gerektiğini belirtmemiz gerekiyor. Saklama ilkesini oluşturmak için, tutma anahtar sözcüğünü, ardından bir yedekleme “türünün” adını (isim tamamen isteğe bağlıdır) ve bu türden kaç yedeğin saklanması gerektiğini belirten bir tam sayıyı kullanırız. İşte bir Ubuntu sistemindeki varsayılan yapılandırma:

#########################################
# BACKUP LEVELS / INTERVALS             #
# Must be unique and in ascending order #
# e.g. alpha, beta, gamma, etc.         #
#########################################
retain alpha 6
retain beta 7
retain gamma 4

 



Varsayılan olarak tanımlayıcı olarak “alfa”, “beta” ve “gamma” kullanılır, ancak bu adlar gerçekte gösterge niteliğinde değildir. Daha samimi ve anlamlı olanları kullanmak isteyebiliriz, örneğin:

retain daily 6
retain weekly 7 
retain monthly 4

Tekrar ediyorum, isimlerin tamamen keyfi olduğunu ve Rsnapshot’ın ne anlama geldiğini bilmediğini unutmayın. RSnapshot’ı çağırdığımızda bir yedekleme türü belirleriz: onun bildiği tek şey, belirli bir türde kaç yedek tutması gerektiğidir.

Neyin yedekleneceğini belirtme

Snapshot’lara hangi dosya ve dizinlerin dahil edilmesi gerektiğini belirtmek için yedekleme direktifini kullanarak dahil etmek istediğimiz yolu ve bulunduğu ana bilgisayarı iletiyoruz. Yedeklemelerin bir parçası olarak localhost üzerindeki /home/, /etc/ ve /usr/local/ dizinlerini içeren tipik bir yapılandırma aşağıda verilmiştir:

backup /home/      localhost/
backup /etc/       localhost/
backup /usr/local/ localhost/

Dosyaları yedeklemelerden hariç tutma ve yedeklemelere dahil etme

Tıpkı rsync’i doğrudan kullanırken olduğu gibi, belirli dosyaları yedeklemelerimizden hariç tutmak veya açıkça dahil etmek isteyebiliriz. RSnapshot’ı kullanırken dahil etme ve hariç tutma kalıplarını tanımlamak için, içerme ve hariç tutma direktiflerini kullanırız ve her satıra bir kalıp belirleriz:

exclude <exclude-pattern>

Benzer şekilde, bir içerme kalıbı belirtmek için şunu yazarız:

include <include-pattern>

Alternatif bir strateji olarak, özel dosyalara include ve hariç tutma kalıplarını yazabilir ve ardından bu dosyaların yolunu include_file ve exclusion_file yönergelerinin değerleri olarak iletebiliriz:

include_file /path/to/include/file
exclude_file /path/to/exclude/file

Rsnapshot yapılandırması doğrulanıyor

Rsnapshot yapılandırma dosyasını ihtiyaçlarımıza uyacak şekilde değiştirdikten sonra, yapılandırmamızın sözdizimsel olarak geçerli olup olmadığını kontrol etmek isteyebiliriz. Bunu configtest komutunu kullanarak yapabiliriz:

$ sudo rsnapshot configtest

 



Her şey beklendiği gibi giderse komut aşağıdaki mesajı döndürmelidir:

Syntax OK

RSnapshot yapılandırma dosyasında yalnızca sekmelerin kullanılması gerektiğine bir kez daha dikkat edin. Boşluklara izin verilmez: bunların kullanımı sözdizimi hatası olarak değerlendirilecektir.

İlk yedeklememizi test etme ve oluşturma

Rsnapshot’ın yedekleme yaparken çalıştıracağı komutu gerçekte gerçekleştirmeden yazdırmasını sağlamak için aşağıdaki örnekte olduğu gibi -t seçeneğini kullanabiliriz:

$ sudo rsnapshot -t daily

Komut aşağıdakine benzer bir çıktı döndürmelidir:

echo 6080 > /var/run/rsnapshot.pid 
mkdir -m 0755 -p /snapshots/daily.0/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
    /home/ /snapshots/daily.0/localhost/ 
mkdir -m 0755 -p /snapshots/daily.0/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc/ \
    /snapshots/daily.0/localhost/ 
mkdir -m 0755 -p /snapshots/daily.0/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
    /usr/local/ /snapshots/daily.0/localhost/ 
touch /snapshots/daily.0/

Aslında ilk yedeklememizi oluşturmak için -t seçeneğini atlarız, bu nedenle ilk günlük yedeklememizi oluşturmak için şunu çalıştırırız:

$ sudo rsnapshot daily

Yedekleme tamamlandıktan sonra, anlık görüntü kökü altında ilk günlük yedeklememizle ilgili bir dizin oluşturulacaktır:

/snapshots/
└── daily.0
    └── localhost
        ├── etc
        ├── home
        └── usr

Şimdi ikinci günlük yedeklememizi oluştursaydık ne olacağını görelim:

$ sudo rsnapshot -t daily

Komut aşağıdaki çıktıyı döndürür:

bin/cp -al /snapshots/daily.0 /snapshots/daily.1 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
    /home/ /snapshots/daily.0/localhost/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc/ \
    /snapshots/daily.0/localhost/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
    /usr/local/ /snapshots/daily.0/localhost/ 
touch /snapshots/daily.0/

Gördüğünüz gibi, ilk önce daily.0 dizin yedeği, cp’yi -a ve -l seçenekleriyle çalıştırarak daily.1 olarak kopyalanacaktır: birincisi tüm dosya izinlerini ve sahipliklerini korumak için gereklidir, ikincisi ise bunu yapar Alandan tasarruf etmek için dosyalar kopyalanmak yerine sabit olarak bağlanır. Yeni yedekleme, hedef olarak orijinal daily.0 dizinini kullanacaktır, bu nedenle her zaman en son anlık görüntüyü barındıracaktır.

Uzak bir makinenin yedeğini oluşturma

Uzak makinelerin artımlı yedeklemelerini SSH aracılığıyla gerçekleştirmek için Rsnapshot’ı kullanabiliriz ve bir “çekme” yedekleme stratejisi uygulayabiliriz: istemcilerin dosyaları yedekleme sunucusuna itmesi yerine, sunucu istemcilere bağlanır ve yedeklemeleri onlardan “çekerek” dosyalar gerçekleştirir.

Uzaktaki bir makineyi yedeklemek için yapmamız gereken ilk şey, cmd_ssh yönergesinin var olduğundan ve rsnapshot yapılandırma dosyasında yorumlanmadığından emin olmaktır. Yönergenin değeri, normalde /usr/bin/ssh olarak yüklenen ssh istemcisinin yürütülebilir dosyasının yoludur:

cmd_ssh /usr/bin/ssh

Şimdi, “ubuntu” kullanıcısı olarak oturum açarak, 192.168.122.49 IP’li uzak bir makinenin /etc dizininin içeriğini yedeklemek istediğimizi varsayalım. Rsnapshot yapılandırma dosyasına yazacağımız şey:

backup ubuntu@192.168.122.49:/etc client0

“Client0” yalnızca makinenin tanımlayıcısıdır (herhangi bir şey olabilir). Yedeklemenin başarılı olması için hedefte çalışan bir SSH sunucusunun çalışır durumda olması ve bağlantı için kullanmak istediğimiz genel anahtarın zaten yetkilendirilmiş olması gerekir.

 

 

Yazının orijinalini buradan okuyabilirsiniz.