Stratis, Red Hat tarafından geliştirilen ücretsiz ve açık kaynaklı bir depolama yönetim sistemidir. RHEL 8’den bu yana teknoloji önizlemesi olarak sunulan bu sürüm, dağıtımın 9.3 sürümünden itibaren tam destek kazandı ve Fedora’da da kullanılabiliyor. Stratis, BTRFS ve ZFS dosya sistemlerine entegre edilenlere benzer özellikler sağlamak için LUKS, cihaz eşleyici ve XFS dosya sistemi gibi mevcut depolama teknolojilerine güvenir. Bu eğitimde Stratis’in temel kavramlarını öğreniyoruz, bir Stratis havuzu ve Stratis tarafından yönetilen bir dosya sistemi oluşturuyoruz.
Temel Stratis kavramları
Stratis ile çalışırken üç temel bileşenle uğraşmak zorundayız: blok cihazları, havuzlar ve dosya sistemleri. Ham diskler veya bölümler gibi bir veya daha fazla blok aygıt, alan havuzları oluşturmak için bir araya getirilir. Dosya sistemleri bu havuzların içinde oluşturulur ve dosyaları yönetmek için kullanılır. Sabit bir boyutları yoktur ancak alan gerektikçe otomatik olarak büyütülürler. Stratis’in desteklediği tek dosya sistemi XFS’dir.
Stratis paketlerini yükleme
Açıkçası Stratis’in kendisi ext4 veya XFS gibi bir dosya sistemi değildir. Bunun yerine, LUKS ve Linux cihaz eşleyici gibi iyi bilinen ve savaşta test edilmiş teknolojileri kullanan ve işlemler arası iletişim (IPC) sistemi olarak D-bus’a dayanan, yüksek düzeyde bir depolama yönetim sistemidir. .
Stratis bir istemci-sunucu mimarisi kullanır: Rust’ta yazılmış bir arka plan programı (stratisd) ve Python’da yazılmış bir dizi istemci yardımcı programından oluşur. Her ikisini de aşağıdaki komutu çalıştırarak yükleyebiliriz:
$ sudo dnf install stratisd stratis-cli
Paketlerin yüklenmesi stratisd arka plan programını otomatik olarak başlatmaz veya etkinleştirmez. Bunu manuel olarak yapmalıyız:
$ sudo systemctl enable --now stratisd
Stratis havuzu oluşturma
Bir Stratis havuzu, Stratis tarafından yönetilen tüm blok cihazlardan oluşur. Bir Stratis havuzuna eklenebilmesi için bir blok cihazın üzerinde bölümler veya dosya sistemi imzaları bulunmaması gerekir. Bir blok aygıtının “temiz” olduğundan emin olmak için, silme yardımcı programını kullanabiliriz. Aşağıdaki örnekte 20 GiB boyutunda /dev/vdb blok cihazı ile çalışıyoruz:
$ sudo wipefs -af /dev/vdb*
Blok cihazındaki tüm imzaları kaldırdıktan sonra, onu anında oluşturabileceğimiz Stratis havuzuna ekleyebiliriz:
$ sudo stratis pool create pool00 /dev/vdb
Havuz hatasız oluşturulmalıdır. Mevcut tüm depolama havuzlarını listelemek için şunu çalıştırabiliriz:
$ sudo stratis pool list
Bu durumda beklendiği gibi komut aşağıdaki çıktıyı döndürür:
Name Total / Used / Free Properties UUID Alerts pool00 20 GiB / 534 MiB / 19.48 GiB ~Ca,~Cr, Op a06ca8a8-df69-41aa-987f-ab794c1f2c81
Stratis havuzunu şifreleme
Stratis Havuzu şifrelenebilir. Şifrelenmiş bir havuz oluşturmak için ilk olarak bir şifreleme anahtarı oluşturmamız gerekir:
$ sudo stratis key set --capture-key pool00-key
Anahtar oluştururken –capture-key veya –keyfile-path seçeneklerinden birinin kullanılması gerekmektedir. İkincisi, anahtarı/parolayı içeren bir dosyanın yolunu belirtmek için kullanılırken, ilki aynı bilgiyi etkileşimli olarak sağlamak için kullanılır. Örnekte –capture-key kullandığımızdan, anahtar veriyi/parolayı sağlamamız ve onaylamamız istenecektir. Mevcut anahtarlar çalıştırılarak listelenebilir:
$ sudo stratis key list
Artık –key-desc seçeneği aracılığıyla önceki adımda oluşturduğumuz anahtara referans vererek şifrelenmiş havuzu oluşturabiliriz:
$ sudo stratis pool create --key-desc pool00-key pool00 /dev/vdb
Oluşturduğumuz anahtar çekirdek anahtarlığında saklanıyordu ve kalıcı değil; bu, havuzu başlatmadan ve kilidi açmadan önce her açılışta yeniden oluşturulması gerektiği anlamına gelir. Öncelikle anahtarı yeniden oluşturuyoruz, ardından –unlock-method seçeneği aracılığıyla anahtar depolama yöntemine (bu durumda “anahtarlık”) – bir Tang anahtar sunucusu da kullanılabilir) ve havuzun adına başvurarak havuzu başlatıyoruz. –name’in argümanı olarak:
$ sudo stratis key set --capture-key pool00-key $ sudo stratis pool start --unlock-method keyring --name pool00
Tüm süreç, belki de anahtar içeriğin bir dosyaya kaydedilmesiyle otomatikleştirilebilir, ancak burada prosedürü ele almayacağız.
Stratis tarafından yönetilen bir dosya sistemi oluşturma
Bir Stratis havuzu oluşturup doldurduktan sonra, bundan bir dosya sistemi oluşturabiliriz. Stratis tarafından desteklenen tek uygun dosya sistemi XFS’dir. Daha önce de söylediğimiz gibi, Stratis tarafından yönetilen dosya sistemleri ölçülü provizyona sahiptir: ek alan gerektikçe otomatik olarak büyürler. Ancak oluşturma sırasında isteğe bağlı olarak dosya sistemi için bir başlangıç boyutu ve –size ve –size-limit işaretleriyle sırasıyla bir boyut sınırı sağlayabiliriz.
Bir dosya sistemi oluştururken sağlamamız gereken tek zorunlu argüman, onu oluşturmak istediğimiz havuzun adı ve dosya sisteminin kendisi için kullanmak istediğimiz addır. Aşağıdaki örnekte, “pool00” havuzunda, başlangıç boyutu 10 GiB olan, “foo” adında, Stratis tarafından yönetilen bir dosya sistemi oluşturuyoruz:
$ sudo stratis filesystem create --size 10GiB pool00 foo
Mevcut Stratis tarafından yönetilen dosya sistemlerini listelemek için aşağıdaki komutu çalıştırabiliriz:
$ sudo stratis filesystem list
Az önce oluşturduğumuz dosya sistemi yukarıdaki komutun çıktısında rapor edilmiştir:
Pool Filesystem Total / Used / Free / Limit Created Device UUID pool00 foo 10 GiB / 82 MiB / 9.92 GiB / None Sep 16 2024 11:42 /dev/stratis/pool00/foo 5a58db3a-d4f4-4b56-b4e7-df70daf141f0
Dosya sistemini monte etmek için herhangi bir özel araca ihtiyacımız yok, örneğin:
$ sudo mount /dev/stratis/pool00/foo /mnt
Stratis tarafından yönetilen bir dosya sisteminin anlık görüntüsünü oluşturma ve geri yükleme
Anlık görüntüler sayesinde dosya sisteminin durumunu belirli bir zamanda dondurup kaydedebiliriz. Önceki örnekte, daha sonra /mnt’ye bağladığımız Stratis tarafından yönetilen bir dosya sistemi oluşturduk. Dosya sisteminin anlık görüntüsünü oluşturmak, çalıştırmak kadar kolaydır:
$ sudo stratis filesystem snapshot pool00 foo foo-snapshot0
Anlık görüntü oluşturmak için “snapshot” komutunu kullanırız ve şunları sağlarız: dosya sisteminin bulunduğu havuzun adı, dosya sistemi adı ve anlık görüntü için kullanmak istediğimiz ad. Anlık görüntü, kendi UUID’sine sahip başka bir dosya sistemidir:
Pool Filesystem Total / Used / Free / Limit Created Device UUID pool00 foo 10 GiB / 82 MiB / 9.92 GiB / None Sep 16 2024 11:42 /dev/stratis/pool00/foo 5a58db3a-d4f4-4b56-b4e7-df70daf141f0 pool00 foo-snapshot0 10 GiB / 82 MiB / 9.92 GiB / None Sep 16 2024 11:52 /dev/stratis/pool00/foo-snapshot0 1615b07f-2345-4fa1-bbb5-25301f554422
Özel bir komutla kökenleriyle “birleştirilebilen” LVM anlık görüntüsünün aksine, bir Stratis anlık görüntüsünü “geri yüklemek” için, anlık görüntünün temel aldığı dosya sisteminin bağlantısını kesip kaldırırız, ardından anlık görüntünün yeni bir anlık görüntüsünü alırız ve orijinal dosya sistemi olarak adlandırın. Bu şekilde anlık görüntüyü kullanabilir ve aynı zamanda bir kopyasını saklayabiliriz. Bizim durumumuzda öncelikle “foo” dosya sisteminin bağlantısının kaldırıldığından emin oluyoruz:
$ sudo umount /dev/stratis/pool00/foo
Dosya sisteminin bağlantısı kesildiğinde onu yok etmek için şunu çalıştırabiliriz:
$ sudo stratis filesystem destroy pool00 foo
Bu noktada “foo-snapshot0”ın anlık görüntüsünü oluşturuyoruz ve onu orijinal dosya sistemi olarak “foo” olarak adlandırıyoruz:
$ sudo stratis filesystem snapshot pool00 foo-snapshot0 foo
Yazının orijinalini buradan okuyabilirsiniz.