restic

Restic ile güvenli ve verimli yedeklemeler nasıl oluşturulur?

Restic, Go’da yazılmış, platformlar arası, ücretsiz ve açık kaynaklı bir programdır.  Dosyaların yalnızca değiştirilmiş parçalarını arşivleyecek kadar akıllı olduğundan sıkıştırılmış, şifrelenmiş ve yerden tasarruf sağlayan yedeklemeler oluşturmak için kullanabiliriz.  Restic, Google Drive veya AWS (Amazon Web Hizmetleri) S3 klasörleri gibi birçok depolama hizmetini hedef olarak kullanabilir, ancak aynı zamanda yerel olarak ve düz SFTP bağlantıları üzerinden de çalışır.

Bu eğitimde Restic’in en çok kullanılan Linux dağıtımlarına nasıl kurulacağını ve verileri güvenli bir şekilde oluşturmak ve geri yüklemek için nasıl kullanılacağını öğreniyoruz.

Restic’in Kurulumu

Öncelikle Restic’i sistemimize nasıl kuracağımızı görelim.  RHEL (Red Hat Enterprise Linux) veya onun Rocky Linux gibi klonlarından birini kullanıyorsak kuruluma devam etmeden önce EPEL deposunu sistem yazılım kaynaklarına eklememiz gerekir.  Rocky’de bunu basitçe “epel-release” paketini kurarak yapabiliriz:

$ sudo dnf install epel-release

 



To add EPEL on a RHEL system, instead, we need to download the appropriate version of the epel-release package from the project website. Supposing we are using RHEL 9, for example, we would run: 

$ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

Fedora üzerinde çalışıyorsak, restic paketi resmi depoda mevcut olduğundan özel bir şey yapmamıza gerek yoktur.  Tüm bu dağıtımlarda Restic’i aşağıdakileri çalıştırarak yükleyebiliriz:

$ sudo dnf install restic

Restic’i Debian tabanlı dağıtımlara kurmak, yalnızca aşağıdaki komutu çalıştırmak yeterlidir:

$ sudo apt install restic

Alternatif bir çapraz dağıtım yöntemi olarak, Restic önceden oluşturulmuş ikili dosyasını doğrudan proje github deposundan indirip yükleyebiliriz.

Bir depo oluşturma

Restic, verileri yerel olarak, SFTP bağlantıları üzerinden ve AWS veya Google Drive gibi çeşitli platformlara yedekleyebilir.  Bu derste basitlik adına yerel bir depo oluşturacağız.  Bir depo oluşturmak için restic init komutunu kullanırız ve hedef havuzun yolunu -r seçeneğine argüman olarak sağlarız.  Aşağıdaki örnekte /mnt dizini altında “restic-repo” deposunu oluşturuyoruz:

$ sudo restic init -r /mnt/restic-repo

 



Verilerimiz şifrelemeyle korunduğu için depo için bir şifre girmemiz isteniyor.  Restic’i her çağırdığımızda, onu depo konumuna yönlendirmemiz gerekir.  Bu hızla sinir bozucu hale gelebilir.  Bunu önlemek için, havuzun yolunu RESTIC_REPOSITORY ortam değişkeninin değeri olarak atayabiliriz. 

Creating our first backup

Once we initialized our repository, we can create our first snapshot. To create a snapshot we use the backup command. In the most basic case, we just provide the path to the repository and the list of files we want to include in the backup. Supposing we want to archive the entire content of the /etc directory, we would run:

$ sudo restic backup -r /mnt/restic-repo /etc

Dosya listesini doğrudan komut satırından iletmek yerine, bunları her satıra bir tane olacak şekilde bir dosyaya yazabiliriz.  Daha sonra dosyanın yolunu –files-from seçeneğine argüman olarak iletiriz.  Anlık görüntü oluşturulduktan sonra, içerdiği dosya ve dizin sayısı gibi önemli bilgileri gösteren bir rapor alacağız:

repository a6797806 opened (version 2, compression level auto)
created new cache in /root/.cache/restic
no parent snapshot found, will read all files

Files: 1477 new, 0 changed, 0 unmodified
Dirs: 427 new, 0 changed, 0 unmodified
Added to the repository: 24.957 MiB (5.953 MiB stored)

processed 1477 files, 23.789 MiB in 0:00

İlk anlık görüntü tüm dosyaları içerecektir;  sonraki dosyaların tamamlanması daha az zaman alacaktır çünkü bunlar yalnızca gerçekten değiştirilmiş olan dosya parçalarını içerecektir.

Dosyaları ve dizinleri anlık görüntüden hariç tutma

Önceki örnekte, /etc dizininin tüm içeriğini anlık görüntüye dahil ettik.  Ancak bazen belirli dosya ve dizinleri yedeklemenin dışında bırakmak isteyebiliriz.  Dışlama kalıplarını –exclude seçeneğinin argümanı olarak belirtebiliriz.  Örneğin, “.py” uzantılı tüm dosyaları hariç tutmak istediğimizi varsayalım;  çalıştıracağımız komut şöyle:

$ sudo restic backup -r /mnt/restic-repo /etc --exclude *.py

 



Birkaç hariç tutma modeli belirlemek için –exclude seçeneğini birden çok kez tekrarlayabiliriz.  Ayrıca, tüm hariç tutma modellerini her satıra bir tane olacak şekilde bir dosyaya yazma ve ardından söz konusu dosyanın yolunu –exclude-file seçeneğine argüman olarak aktarma şansımız da var. 

Anlık görüntülerin bir depoda listelenmesi

Restic’i her kullandığımızda yeni bir anlık görüntü oluşturulur.  Bir depodaki anlık görüntülerin listesini almak için restic snapshots komutunu kullanırız.  “Rastic-repo” deposundaki tüm anlık görüntüleri listelemek için şunu çalıştırırız:

$ sudo restic snapshots -r /mnt/restic-repo

Bu durumda, depo şifresini girdikten sonra komut aşağıdaki çıktıyı üretir:

repository a6797806 opened (version 2, compression level auto)
ID Time Host Tags Paths
------------------------------------------------------------
982dac84 2023-11-23 12:47:53 fingolfin /etc
a91be944 2023-11-24 10:16:50 fingolfin /etc
------------------------------------------------------------
2 snapshots

Çıktı, her anlık görüntüyle ilgili bilgileri içerir:

  • ID
  • Oluşturulma tarihi
  • Anlık görüntünün oluşturulduğu ana bilgisayar
  • Etiketler
  • Dahil edilen dosyalar

Buradaki en önemli bilgi kimliktir, çünkü onu, içeriğini listelemek veya çıkarmak istediğimizde anlık görüntüye referans vermek için kullanırız.

Dosyaları anlık görüntüde listeleme

Bir anlık görüntüye dahil edilen dosyaların bir listesini almak için, anlık görüntünün kimliğini argüman olarak ileterek restic ls komutunu kullanırız.  Oluşturduğumuz ilk anlık görüntünün (a91be944) içeriğini kontrol etmek istediğimizi varsayalım.

$ sudo restic ls -r /mnt/restic-repo a91be944

Ayrıca anlık görüntüde yer alan bir veya daha fazla belirli dizinin içeriğini almaya da karar verebiliriz.  Örneğin yalnızca /etc/xdg dizininde bulunan dosyaları listelemek için şunu çalıştırırız:

$ sudo restic ls -r /mnt/restic-repo a91be944 /etc/xdg

Bir deponun bağlanması

Bir havuzun içeriğini incelemek için restic mount komutunu kullanarak onu monte edebiliriz.  Mountpoint olarak kullanmak istediğimiz dizini belirtmemiz yeterli.  Depoyu /media dizinine eklemek istediğimizi varsayalım, şunu çalıştırırız:

$ sudo restic mount -r /mnt/restic-repo /media

Bir depo oluşturulduktan sonra, içindeki tüm anlık görüntüler “snapshots” dizini altında bulunabilir (bu durumda /media/snapshots):

$ ls -l /media/snapshots
total 1
dr-xr-xr-x. 2 root root 0 Nov 23 12:47 2023-11-23T12:47:53+01:00
dr-xr-xr-x. 2 root root 0 Nov 24 10:16 2023-11-24T10:16:50+01:00
lrwxrwxrwx. 1 root root 25 Nov 24 10:16 latest -> 2023-11-24T10:16:50+01:00

Her dizin tüm dosya ağacını içerir; “en son” yalnızca en son anlık görüntüye sembolik bir bağlantıdır:

$ sudo tree /media/snapshots -L 2
/media/snapshots
├── 2023-11-23T12:47:53+01:00
│   └── etc
├── 2023-11-24T10:16:50+01:00
│   └── etc
└── latest -> 2023-11-24T10:16:50+01:00

Verileri geri yükleme

Yedeklemenin en önemli kısmı, içindeki verilerin kolayca geri yüklenebilmesidir.  Restic kullanırken, anlık görüntüden verileri geri yüklemek için geri yükleme komutunu kullanırız.  Geri yüklemek istediğimiz anlık görüntünün kimliğini argüman olarak iletiyoruz ve yedeği çıkarmak istediğimiz dizini –target seçeneğinin argümanı olarak iletiyoruz:

$ sudo restic restore -r /mnt/restic-repo latest --target=/

Yukarıda yaptığımız gibi anlık görüntünün tüm içeriğini veya yalnızca bir kısmını geri yüklemeye karar verebiliriz.  Bir anlık görüntüden yalnızca bir alt klasörü çıkarmak için, örneğin /etc/xdg gibi, aşağıdaki sözdizimini kullanabiliriz:

$ sudo restic restore -r /mnt/restic-repo latest:/etc/xdg --target=/

 



Yukarıda yaptığımız gibi bir dizin belirtildiğinde dizinin kendisinin değil, yalnızca içeriğinin çıkarıldığına dikkat edin.  Ayrıca –include ve –exclude seçeneklerini veya bunların büyük/küçük harfe duyarlı olmayan eşdeğerlerini kullanarak hangi dosyaların geri yüklenmesi gerektiğini de belirtebiliriz: –iinclude ve –iexclude.  Örneğin yalnızca “.conf” uzantılı dosyaları çıkarmak için şunu çalıştırırız: 

$ sudo restic restore -r /mnt/restic-repo latest --include=*.conf --target=/

bu yazıda sadece Restic’in temel kavramlarını ele aldık;  Bu harika program hakkında daha fazla bilgi edinmek için lütfen programın kılavuz sayfasına bakın veya projenin resmi web sitesini ziyaret edin!

Yazının orijinalini buradan okuyabilirsiniz.