Pokazywanie postów oznaczonych etykietą GELI. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą GELI. Pokaż wszystkie posty

ZFS compresja i deduplikacja na przykładzie danych z systemu NEXUS (Zettabyte File System)

Go to start of metadata
Wersja zfs:
cat /sys/module/zfs/version
0.7.5-1

Niestety, w tym konkretnym systemie NEXUS'a trzymane są pliki ".jar", a nie tylko kody i dane konfiguracyjne. Implikuje to dwa zaobserwowane efekty:
1) Duże, i przecież już skompresowane, pliki są przechowywane na dysku, zamiast samych kodów i mechanizmów budujących je. Nie można efektywnie skompresować pliku poddanego już kompresji, więc mechanizm kompresujący na poziomie systemu plików (sektorów) okazał się nieefektywny.
2) Nawet minimalna zmiana kodów powoduje, że zbudowane archiwum ma inne położenie bajtów (sektory są różne, chociaż zmiany w kodzie mogą dotyczyć jednej linii),czyli nie da się efektywnie przeprowadzić deduplikacji. 
Poniżej screeny ze statystykami. Kompresja na poziomie 1,16 - co nie jest najgorszym wynikiem. Deduplikacja na poziomie 1,23 - co jest już nie do przyjęcia, ze względu na relację: koszt obliczeniowy i zajętość pamięci RAM do zysku w postaci zwiększenia miejsca na dysku. W tym konkretnym przypadku, za względu na wadliwe użycie menadżera repozytoriów, zastosowanie mechanizmów systemu ZFS nie przynosi oczekiwanego zysku.


 ********

Więcej informacji:
Informatyka, FreeBSD, Debian


***

Inne wpisy:



Update: 2018.07.17
Create: 2018.07.17

Szyfrowana kopia bezpieczeństwa na Blu-ray lub DVD (freebsd, mdconfig, GELI)

Kopie bezpieczeństwa nagrywam na dyski Blu-ray lub DVD. Dane należy nagrać na co najmniej dwie płyty różnych producentów i nie będzie przesadą nagranie trzech egzemplarzy.
Płyty należy przechowywać w różnych (fizycznie) miejscach. Zabezpieczmy się w ten sposób przed utratą danych w wyniku np.: kradzieży lub pożaru. Dane należy zabezpieczyć też przed odczytaniem przez niepowołane osoby (np.: złodzieja). Ponieważ na serwerach używam głównie FreeBSD to sposób wykonywania kopii zapasowych dostosowałem do tego systemu. Zresztą nie ma problemu, by napęd BR fizycznie podłączony do stacji roboczej pracującej pod Debianem był dostępny dla FreeBSD, gdzie przeprowadzimy proces deszyfracji - po czym ponownie możemy już odszyfrowane dane udostępnić do stacji roboczej pracującej pod Debianem :-D

Napęd możemy udostępnić jako plik lub urządzenie:
iSCSI form Debian (target) to FreeBSD (initiator)


Wybrałem następujący sposób szyfrowania danych:
1) Przygotowuję plik o rozmiarze pozwalającym na pełne wykorzystanie posiadanego napędu i płyt.
2) Montuję ww. plik jako urządzenie (dysk) i szyfruję go całego.
3) Na zamontowany, szyfrowany w "locie", wirtualny dyski (plik) nagrywam dane.
4) Tak przygotowany, duży plik nagrywam na nośniki.

Brzmi to bardziej skomplikowanie, niż jest w rzeczywistości, szczególnie, że tego samego mechanizmu używam do szyfrowania fizycznych dysków. Dzięki temu mam opanowany i przetestowany jeden mechanizm szyfrowania.


Przygotowanie pliku na dane:

Przygotowujemy plik, który będzie emulować dysk. Do inicjującego zapełnienia dysku, dla bezpieczeństwa powinniśmy użyć urządzenia: /dev/random, a dla przyspieszenia tego procesu możemy użyć: /dev/zero
dd if=/dev/random of=/data_file/br00.disk bs=1m count=23800
dd if=/dev/zero of=/data_file/br00.disk bs=1m count=23800
Parametry "bs" i "count" dobrałem tak by były łatwe w użyciu. Dla optymalizacji procesu można użyć dd na przykład tak (użyte wartości powinny zależeć od użytego dysku):
dd if=/dev/random of=/data_file/br00.disk bs=64k count=380800
dd if=/dev/random of=/data_file/br00.disk bs=128k count=190400
Rozmiar (bs * count) dobrałem do jednowarstwowych płyt Blu-ray, których używam.

Montujemy plik jako urządzenie /dev/md1 (ja używam /dev/md0 do obsługi swap - tak, 32MB swap)
mdconfig -a -t vnode -f /data_file/br00.disk -u 1
Zdemontować możemy poleceniem:
mdconfig -d -u 1
Sprawdzić zamontowane urządzenia możemy poleceniem:
mdconfig -lv

Zaszyfrowanie danych w pliku

Do szyfrowania używam mojego ulubionego i sprawdzonego GELI. 

Polecenia, które mogą uszkodzić dane wgrane na plikowy "dysk" poprzedziłem potrójmy znakiem #. Takie polecenia używa sie tylko do inicjalizacji pliku.

Poniższym poleceniem tworzymy klucz, który później zabezpieczymy frazą. Klucz powinniśmy przechowywać w bezpiecznym miejscu, np.: szyfrowanym dysku lub szyfrowanym USB. Należy pamiętać o kopii tego klucza!!! (też bezpiecznie przechowywanej)
###  dd if=/dev/random of=/etc/keys/br2014.key bs=64 count=1

Inicjalizujemy szyfrowanie wskazując klucz. Zostaniemy poproszeni o podanie frazy zabezpieczającej. Fraza powinna być długa - ja zalecam stosowanie od 20 do 40 znaków. Otrzymamy nowe urządzenie /dev/md1.eli  (inicjalizacja oznacza również wykonanie polecenia "attach"). Wybrałem szyfrowanie AES z kluczem 256bitowym, a rozmiar "komórki danych" ustawiłem na 4096 bajtów. W ten sposób przyspieszam deszyfrowanie, choć odczyt takiej porcji danych będzie wymagać odczytu dwóch sektorów dysku BR. Ja przechowuję duże pliki (zdjęcia, zmontowane filmy, archiwa), dlatego dążę do rozsądnej maksymalizacji porcji danych.
###  geli init -s 4096 -e AES -l 256 -K /etc/keys/br2014.key /dev/md1

Otrzymamy komunikat o wykonaniu kopii metadanych. Ten plik warto też zarchiwizować.
Metadata backup can be found in /var/backups/md1.eli and
can be restored with the following command:
        # geli restore /var/backups/md1.eli /dev/md1

Do późniejszego montowania szyfrowanego urządzenia użyjemy polecenia:
geli attach -k /etc/keys/br2014.key /dev/md1
Do demontowania szyfrowanego urządzenia użyjemy:
geli detach /dev/md1

Poniższym poleceniem sformatujemy dysk::
###  newfs -O 2 -m 0 -S  4096 /dev/md1.eli 
Ustanawiamy ponownie spójną z poprzednimi poleceniami jednostkę danych i nie rezerwujemy przestrzeni dyskowej. Możemy założyć system plików FreeBSD: (bsdlabel -w md1 auto), lecz nie musimy - samo formatowanie UFS wystarczy:

Tak dysk montujemy
mount /dev/md1.eli /data_crypto


Podsumowanie:

Polecenie przygotowujące:
###  dd if=/dev/random of=/data_file/br00.disk bs=1m count=23800
mdconfig -a -t vnode -f /data_file/br00.disk -u 1
###  dd if=/dev/random of=/etc/keys/br2014.key bs=64 count=1
###  geli init -s 4096 -e AES -l 256 -K /etc/keys/br2014.key /dev/md1
###  newfs -O 2 -m 0 -S  4096 /dev/md1.eli 
mount /dev/md1.eli /data_crypto

Polecenia służące do użytkowania szyfrowanego pliku:
mdconfig -a -t vnode -f /data_file/br00.disk -u 1
geli attach -k /etc/keys/br2014.key /dev/md1
mount /dev/md1.eli /data_crypto

Polecenia służące do odmontowania zasobów:
umount /dev/md1.eli
geli detach /dev/md1
mdconfig -d -u 1



Update: 2014.09.10
Create: 2014.09.10