Rastic, şifreleme ve tekilleştirme desteğine sahip modern bir yedekleme programıdır. Bu eğitimde gördüğümüz gibi, Restic’in kullanımı kolaydır, ancak bir yapılandırma dosyası kullanmaz ve yerel olarak birden fazla yedeklemeyi düzenlemek ve düzenlemek için bir yöntem içermez. Autorestic’in kullanışlı olduğu yer burasıdır: Restic’in etrafındaki sarmalayıcıdır; yedeklemeleri tek bir yaml yapılandırma dosyasında yapılandırmamıza ve düzenlememize, birden fazla kaynak (konum) ve hedef (arka uç) belirtmemize olanak tanır.
Autorestic kurulumu
Bu yazının yazıldığı anda, tüm büyük Linux dağıtımları arasında yalnızca Fedora, depolarında autorestic’i içermektedir. Yazılımı yüklemek için, projenin GitHub deposundan önceden derlenmiş bir ikili dosya indirebilir veya özel Docker görüntüsünü kullanabiliriz. Bu seçenekleri inceleyelim.
Manuel kurulum
Autorestic’i kurmanın en kolay yolu, işletim sistemimiz için ikili dosyanın uygun sürümünü indirmek ve onu PATH’deki bir dizine yerleştirmektir. Aşağıdaki örnekte, mevcut en son x86_64 Linux sürümünü (yazma sırasında 1.8.2) indirip /usr/local/bin dizinine kuruyoruz. Öncelikle “.bz2” arşivini indiriyoruz:
$ curl -LO https://github.com/cupcakearmy/autorestic/releases/download/v1.8.2/autorestic_1.8.2_linux_amd64.bz2
İndirme işlemi tamamlandıktan sonra dosyayı çıkartıyoruz:
$ bzip2 -d autorestic_1.8.2_linux_amd64.bz2
Son olarak dosyayı hedef dizine taşıyoruz ve çalıştırılabilir hale getiriyoruz:
$ sudo mv autorestic_1.8.2_linux_amd64 /usr/local/bin/autorestic && sudo chmod +x /usr/local/bin/autorestic
Paket yöneticisi aracılığıyla kurulum (yalnızca Fedora)
Fedora kullanıyorsanız, autorestic’i kurmanın en kolay ve en uygun yolu dnf paket yöneticisini kullanmaktır, çünkü araç, dağıtımın resmi depolarında bulunur:
$ sudo dnf install autorestic
autorestic Docker görüntüsünü kullanma
Resmi bir Docker otorestik görüntüsü mevcuttur; buna dayalı bir kapsayıcı çalıştırırken, yedeklemek istediğimiz dizinleri, otorestik yapılandırma dosyasını ve hedef depoyu (yerel bir yedekleme gerçekleştiriyorsak), konteynerin içinde bir yere bağlamamız ve otorestik’i yola yönlendirmemiz gerekir. -c seçeneğiyle yapılandırma dosyası. Host /data dizininin içeriğini yedeklediğimiz bir örnek:
$ sudo docker run --rm -v /data:/data:Z -v /etc/autorestic.yml:/etc/autorestic.yml:Z -v /mnt/restic_repo:/mnt/restic_repo:Z cupcakearmy/autorestic autorestic backup -va -c /etc/autorestic.yml
/etc/autorestic.yaml yapılandırma dosyasını, /data ve /mnt/restic_repo dizinlerini (sırasıyla yedeklememizin kaynağı ve hedefi olan) kapsayıcı içindeki ilgili konumlarına bağladık. Her bağlama montajı için Z seçeneğini kullandık: bu yalnızca SELinux aktif olduğunda gereklidir, çünkü başvurulan dosyaların etiketini object_r:container_file_t olarak değiştirir, böylece bu dosyalara konteynerin içinden erişilebilir.
Autorestic yapılandırma dosyası
Autorestic’in özü yaml yapılandırma dosyasıdır. Bu dosyada yedeklemelerimizin kaynaklarını ve hedeflerini, kullanmak istediğimiz restic seçeneklerini ve daha birçok şeyi ayarlıyoruz. Belli nedenlerden ötürü, burada olası tüm seçenekleri ele alamıyoruz, bu nedenle yalnızca temel şeyleri göreceğiz.
Autorestic, yapılandırma dosyasını öncelik sırasına göre aşağıdaki konumlarda arar:
- .autorestic.yml
- ~/.autorestic.yml
- ~/.config/autorestic/.autorestic.yml
Yapılandırma dosyasının içinde “location” kısmında yedeklerimizin kaynaklarını, “backends” kısmında ise hedeflerini tanımlıyoruz. Temel bir örnekle başlayalım. /data dizininin içeriğini /mnt/restic_repo yerel deposuna yedeklemek istediğimizi varsayalım. Mevcut çalışma dizinimize .autorestic.yml olarak kaydedeceğimiz autorestic yapılandırma dosyasını şu şekilde dolduracağız:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
Her konum küçük harfli bir adla tanımlanır; bu durumda yarattığımız veri için “veri” kullandık. From anahtarıyla yedeklemek istediğimiz bir veya daha fazla dizini tanımlarız: yollar mutlak veya yapılandırma dosyasının yoluna göre belirtilebilir. Bunun yerine, to tuşuyla konum için tek veya birden fazla hedef veya arka uç sağlarız ve bunlara yine adlarıyla başvuruda bulunuruz. Her hedefi veya “arka ucu” “arka uçlar” bölümünde tanımlarız.
Bu örnekte “localrepo” adını verdiğimiz sadece bir backend tanımladık (tıpkı lokasyonlarda olduğu gibi backend isimlerinin de küçük harflerle tanımlanması gerekiyor). Type anahtarının değerini “local” olarak ayarlayarak, arka ucun yerel dosya sisteminde bulunan restic bir depo olduğunu belirledik (bildiğimiz gibi restic birçok depolama platformunu destekler; diğerleri arasında: Backblaze, S3 ve SFTP) . Path key ile restic repositorynin yolunu belirledik ve son olarak key ile repository şifresini bildirdik (konfigürasyon dosyasına cleartext şifre koymak tehlikeli olabilir, bu davranışın bazı alternatiflerini ileride göreceğiz).
Yedeklemeyi başlatma
Şimdi, yedeklemeyi ilk kez çalıştırıyorsak, her şeyin hazır olduğundan emin olmak için otorestik kontrol komutunu kullanabiliriz. Komut, tanımlanan arka uçları bizim için otomatik olarak başlatacaktır, bu nedenle restic depolarını önceden oluşturmaya gerek yoktur:
$ sudo autorestic check
Yedeklemeyi başlatmak için artık yedekleme komutunu kullanabiliriz:
$ sudo autorestic backup -va
Yukarıda, ayrıntılı modda çalışmasını sağlamak için -v seçeneğiyle ve mevcut tüm konumların yedeğini alması talimatını vermek için -a seçeneğiyle autorestic’i çağırdık. Birden fazla konum tanımlamamız ve bunların yalnızca bir alt kümesini yedeklemek istememiz durumunda, adlarının virgülle ayrılmış listesini bunun yerine -l seçeneğine argüman olarak iletebiliriz, örneğin:
$ autorestic backup -v -l data
Restic seçeneklerini belirtme
Autorestic konfigürasyon dosyasında restic’e geçirmek istediğimiz seçenekleri her lokasyon için veya global olarak belirtebiliriz. Seçenekler restic ile çağrılmalıdır, seçenekler anahtarının değeri olarak sağlanır. Yedekleme ve unutma komutları için veya her ikisi için de geçirmek istediğimiz seçenekleri sırasıyla yedekleme, unutma ve tüm tuşlarını kullanarak belirtebiliriz. İşte bir örnek. “Veri” konumunun yedeğini alırken “.txt” uzantılı tüm dosyaları hariç tutmak istediğimizi varsayalım. Şunu yazardık:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
options:
backup:
exclude:
- '*.txt'
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
Restic “forget” komutu, –keep seçenekleriyle belirlediğimiz politikaya göre eski anlık görüntüleri bir depodan kaldırmak için kullanılır. Bu seçenekleri sağlamak için bunları unut anahtarının altında belirtiriz. Örneğin, en son 10 anlık görüntünün tümünü her zaman saklamak ve eskileri silmek için –keep-last=10 kullanırız:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
options:
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
Unut komutuyla autorestic’i çağırdığımızda “unut” seçenekleri uygulanır:
$ autorestic forget -va
Autorestic’i, doğrudan konum tanımındaki unut anahtarını kullanarak, her yedeklemeden sonra “unut” komutunun otomatik olarak yürütülmesini sağlayacak şekilde yapılandırabiliriz. Bu anahtarın değeri, yalnızca anlık görüntülerin unutulmasını istiyorsak true olarak ayarlanabilir veya unutulan anlık görüntülerle ilgili verileri de depodan kaldırmak istiyorsak budamak için ayarlanabilir. İşte bir örnek:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
forget: prune
options:
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
Şu ana kadar konfigürasyon dosyasında belirlediğimiz seçenekler sadece “data” konumu için geçerlidir. Birden fazla konumumuz varsa ve belirli seçenekleri hepsine uygulamak istiyorsak, genel bölümü doldurabiliriz, örneğin:
version: 2
global:
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
locations:
data:
from:
- /data
to:
- localrepo
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
Konuma özgü seçenekler, genel bölümde belirlenen seçenekleri geçersiz kılar. Yalnızca istisnaları belirtmek istiyorsak bu strateji kullanışlıdır.
Arka uç şifresi sağlamanın alternatif yolları
Önceki örneklerde, yapılandırma dosyasında doğrudan “localrepo” arka ucunun şifresini belirttik. Alternatif olarak, parolayı, autorestic’i başlatırken tanımlayabileceğimiz bir ortam değişkeninin değeri olarak veya yapılandırma dosyasıyla aynı dizinde bulunması gereken .autorestic.env adlı özel bir dosyada ayarlayabiliriz. Değişkenin belirli bir arka uçla otomatik olarak ilişkilendirilmesi için onu aşağıdaki sözdizimini kullanarak tanımlarız:
AUTORESTIC_<BACKEND-NAME>_<VARIABLE_NAME>
Yani, “localrepo” arka ucuna şifre atamak için şunu yazacağız:
AUTORESTIC_LOCALREPO_RESTIC_PASSWORD="repositorypassword"
Bu stratejiyi ek bilgi sağlamak için de kullanabiliriz. Örneğin, uzak bir Backblaze arka ucu kullanırken hem hesap kimliğini hem de hesap anahtarını sağlayabiliriz. Diyelim ki “backblaze” adında bir yedek tanımladık, şunu yazacağız:
AUTORESTIC_BACKBLAZE_B2_ACCOUNT_ID="123" AUTORESTIC_BACKBLAZE_B2_ACCOUNT_KEY="456"
Başka bir alternatif, restic native –password-command seçeneğinin kullanılmasından oluşur. Bu seçenekle şifreyi stdout’a döndürmesi gereken bir komut sağlayabiliriz. Bu stratejiyle örneğin, aşağıda yaptığımız gibi harici bir dosyadan şifreyi okuyabiliriz:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
options:
all:
password-command: cat /root/.password
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
backends:
localrepo:
type: local
path: /mnt/restic_repo
Yedeklemeyi ya da unut komutunu çalıştırsak da, her zaman geçilmesi için “tümü” bölümündeki seçeneği kullandık.
Autorestic kancalar
Autorestic, aşağıdaki kancaları kullanarak özel komutları belirli anlarda yürütmemize olanak tanır:
- prevalidate
- before
- after
- failure
- success
prevalidate hook her şeyden önce, hatta çeşitli kontroller yürütülmeden önce çalıştırılır (örneğin, bir konumla ilişkili kaynak dizinlerinin mevcut olup olmadığını otomatik olarak kontrol eder); Bunun yerine before hook, kontrollerden sonra, ancak yedekleme başlatılmadan önce yürütülür. After hook, çıkış durumundan bağımsız olarak her zaman yedekleme tamamlandıktan sonra yürütülür (“ön doğrulama” veya “önce” kancalarındaki hatalar nedeniyle yedekleme hiç başlatılamıyorsa bunun yerine atlanır). Son olarak, failure ve succes hook ilişkili komutlar, sırasıyla yedekleme başarıyla yürütüldükten sonra veya başarısız olduktan sonra çağrılır.
Aşağıdaki örnekte yedekleme başarılı olursa ntfy.sh hizmetini kullanarak bir push bildirimi gönderiyoruz:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
options:
all:
password-command: cat /root/.password
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
hooks:
success:
- curl -d "backup executed succesfully!" ntfy.sh/lxcfg
backends:
localrepo:
type: local
path: /mnt/restic_repo
Bir kanca sırasında, önceden tanımlanmış bazı değişkenlerde saklanan ek bilgilere erişebiliriz. İşte bazı örnekler:
- AUTORESTIC_SNAPSHOT_ID
- AUTORESTIC_PARENT_SNAPSHOT_ID
- AUTORESTIC_FILES_ADDED
- AUTORESTIC_FILES_CHANGED
- AUTORESTIC_FILES_UNMODIFIED
- AUTORESTIC_LOCATION
Yazının orijinalini buradan okuyabilirsiniz.