Szyfrowanie ZFS RAID i LUKS w systemie Linux

24

Planuję skonfigurować zestaw 3 dysków 2 TB 7200 obr./min jako pule Z-RAID szyfrowane LUKS w systemie Linux (dla rozwiązania NAS).

Rozumiem ten problem, ponieważ jedynym sposobem na osiągnięcie tego jest luksFormatkażde urządzenie fizyczne, a następnie złożenie zpool z odblokowanych pojemników LUKS.

Mam z tym następujące obawy:

  • Czy nie wpłynęłoby to znacząco na wydajność zapisu? W tej konfiguracji nadmiarowe dane są szyfrowane kilka razy, ponieważ LUKS nie „rozpoznaje” Z-RAID. W rozwiązaniu LUKS-on-mdadm dane są szyfrowane raz i tylko wielokrotnie zapisywane na dyskach. Mój procesor obsługuje Intel AES-NI.

  • Czy ZFS będzie wiedział o awariach dysków podczas pracy na kontenerach LUKS odwzorowujących urządzenia w przeciwieństwie do urządzeń fizycznych? Co powiesz na deduplikację i inne funkcje ZFS?

MasterM
źródło
4
Nie zrobiłbym tego Brzmi podatnie na awarie.
ewwhite
3
@MadHatter Ponieważ to ZFS. Nie możesz tego zrobić.
Michael Hampton
1
W porządku (uwierzę ci na słowo). Zrobić jeden duży ZFS zawierające jeden duży plik, loopback zamontować go i szyfrowania , które .
MadHatter obsługuje Monikę
1
@eewhite Zastanawiam się tylko nad opcjami szyfrowania w ZFS w systemie Linux, dopóki moduł jądra ZFS nie zaimplementuje samego szyfrowania. Ale muszę się zgodzić - LUKS i ZFS nie wydają się dobrze dogadywać.
MasterM
4
Nigdy, nigdy nie twórz dużego pliku i zapętlaj go w ZFS. Nie masz już nic do zrobienia, gdy w CoW zabraknie miejsca na operacje.
Vinícius Ferrão

Odpowiedzi:

27

Jeden z serwerów, którymi administruję, uruchamia opisaną przez ciebie konfigurację. Ma sześć dysków twardych 1 TB z pulą RAIDZ zaszyfrowaną przez LUKS. Mam również dwa dyski twarde o pojemności 3 TB w zwierciadle ZFS zaszyfrowanym przez LUKS, które są wymieniane co tydzień w celu wyniesienia poza witrynę. Serwer używa tej konfiguracji od około trzech lat i nigdy nie miałem z tym problemu.

Jeśli potrzebujesz ZFS z szyfrowaniem w systemie Linux, polecam tę konfigurację. Używam ZFS-Fuse, a nie ZFS w systemie Linux. Jednak uważam, że nie miałoby to wpływu na wynik inny niż ZFS w Linuksie prawdopodobnie będzie miał lepszą wydajność niż konfiguracja, której używam.

W tej konfiguracji nadmiarowe dane są szyfrowane kilka razy, ponieważ LUKS nie „rozpoznaje” Z-RAID. W rozwiązaniu LUKS-on-mdadm dane są szyfrowane raz i tylko wielokrotnie zapisywane na dyskach.

Pamiętaj, że LUKS nie jest świadomy RAID. Wie tylko, że siedzi na urządzeniu blokowym. Jeśli używasz mdadm do utworzenia urządzenia RAID, a następnie luksformatto właśnie mdadm replikuje zaszyfrowane dane do bazowych urządzeń pamięci masowej, a nie LUKS.

Pytanie 2.8 LUKS FAQ dotyczy tego, czy szyfrowanie powinno być nad RAID, czy na odwrót . Przedstawia poniższy schemat.

Filesystem     <- top
|
Encryption
|
RAID
|
Raw partitions
|
Raw disks      <- bottom

Ponieważ ZFS łączy funkcje RAID i systemu plików, Twoje rozwiązanie będzie musiało wyglądać następująco.

RAID-Z and ZFS Filesystem  <-top
|
Encryption
|
Raw partitions (optional)
|
Raw disks                  <- bottom

Wymieniłem surowe partycje jako opcjonalne, ponieważ ZFS spodziewa się, że użyje surowej pamięci blokowej, a nie partycji. Chociaż możesz utworzyć swój system zpool za pomocą partycji, nie jest to zalecane, ponieważ spowoduje to dodanie bezużytecznego poziomu zarządzania i trzeba będzie wziąć to pod uwagę przy obliczaniu przesunięcia dla wyrównania bloku partycji.

Czy nie wpłynęłoby to znacząco na wydajność zapisu? [...] Mój procesor obsługuje Intel AES-NI.

Nie powinno być problemu z wydajnością, o ile wybierzesz metodę szyfrowania obsługiwaną przez sterownik AES-NI. Jeśli masz cryptsetup 1.6.0 lub nowszy, możesz uruchomić cryptsetup benchmarki sprawdzić, który algorytm zapewni najlepszą wydajność.

To pytanie dotyczące zalecanych opcji dla LUKS może być również cenne.

Biorąc pod uwagę, że masz obsługę szyfrowania sprzętowego, bardziej prawdopodobne jest, że napotkasz problemy z wydajnością z powodu niedopasowania partycji.

ZFS w systemie Linux dodał ashiftwłaściwość do zfspolecenia, aby umożliwić określenie rozmiaru sektora dla dysków twardych. Według połączonego FAQ ashift=12powiedziałby, że używasz dysków o rozmiarze bloku 4K.

LUKS FAQ stwierdza, że ​​partycja LUKS ma wyrównanie 1 MB. Pytania 6.12 i 6.13 omawiają to szczegółowo, a także zawierają porady, jak zwiększyć nagłówek partycji LUKS. Nie jestem jednak pewien, czy jest możliwe, aby był wystarczająco duży, aby zapewnić, że system plików ZFS zostanie utworzony na granicy 4K. Chciałbym dowiedzieć się, jak to działa, jeśli jest to problem, który musisz rozwiązać. Ponieważ używasz dysków 2 TB, możesz nie napotkać tego problemu.

Czy ZFS będzie wiedział o awariach dysków podczas pracy na kontenerach LUKS odwzorowujących urządzenia w przeciwieństwie do urządzeń fizycznych?

ZFS będzie wiedział o awariach dysków, o ile może je odczytywać i zapisywać bez problemów. ZFS wymaga przechowywania blokowego i nie dba o specyfikę tego magazynu i jego pochodzenie. Śledzi tylko napotkane błędy odczytu, zapisu lub sumy kontrolnej. Od Ciebie zależy monitorowanie stanu podstawowych urządzeń pamięci masowej.

Dokumentacja ZFS zawiera sekcję dotyczącą rozwiązywania problemów, którą warto przeczytać. W sekcji dotyczącej wymiany lub naprawy uszkodzonego urządzenia opisano, co możesz napotkać podczas scenariusza awarii i jak to rozwiązać. Zrobiłbyś tutaj to samo, co dla urządzeń, które nie mają ZFS. Sprawdź syslog pod kątem komunikatów ze sterownika SCSI, kontrolera HBA lub HD i / lub oprogramowania monitorującego SMART, a następnie działaj odpowiednio.

Co powiesz na deduplikację i inne funkcje ZFS?

Wszystkie funkcje ZFS będą działać tak samo, niezależnie od tego, czy bazowa pamięć blokowa jest szyfrowana, czy nie.

Podsumowanie

  1. ZFS na urządzeniach szyfrowanych przez LUKS działa dobrze.
  2. Jeśli masz szyfrowanie sprzętowe, nie zobaczysz spadku wydajności, dopóki użyjesz metody szyfrowania obsługiwanej przez Twój sprzęt. Użyj, cryptsetup benchmarkaby zobaczyć, co będzie działać najlepiej na twoim sprzęcie.
  3. Pomyśl o ZFS jako o macierzy RAID i systemie plików połączonych w jedną całość. Zobacz diagram ASCII powyżej, gdzie pasuje do stosu pamięci.
  4. Musisz odblokować każde urządzenie blokujące zaszyfrowane przez LUKS, z którego korzysta system plików ZFS.
  5. Monitoruj kondycję sprzętu pamięci masowej w taki sam sposób, jak teraz.
  6. Jeśli korzystasz z napędów z blokami 4K, pamiętaj o wyrównaniu bloków systemu plików. Może być konieczne eksperymentowanie z opcjami luksformat lub innymi ustawieniami, aby uzyskać wyrównanie potrzebne do akceptowalnej prędkości.
Rozgwiazda
źródło
3
+1 Za znalezienie sposobu, aby uczynić to działającym z przykładami.
ewwhite
1
1 MiB jest już równomiernie podzielny przez 4KiB, więc powinieneś być odpowiednio wyrównany aż do ashift = 20 (co nie uważam za konieczne w mojej karierze) pod warunkiem, że używasz surowych dysków.
Michael Hampton
1
Jeszcze jedna rzecz: głosuję na twoją odpowiedź, ponieważ oczekiwała tego OP i jest dobrze napisana, więc jest lepsza niż moja odpowiedź.
Vinícius Ferrão
3
@ ViníciusFerrão: Weź również pod uwagę, że FreeBSD i FreeNAS używają identycznego podejścia do szyfrowania ZFS. gelisłuży do utworzenia zaszyfrowanego urządzenia, a dane w postaci zwykłego tekstu są udostępniane za pośrednictwem drugiego urządzenia, którego używa ZFS. Zobacz drugi punkt na doc.freenas.org/index.php/Volumes#Encryption .
Rozgwiazda
2
@CMCDragonkai Ponieważ zarówno urządzenia L2ARC, jak i SLOG zawierają bity i fragmenty danych z puli, jeśli szyfrujesz pamięć w celu zapewnienia poufności (co jest często celem korzystania z szyfrowanej pamięci w pierwszej kolejności), prawie na pewno chcesz uruchom również dowolne urządzenia L2ARC i SLOG podobnie zaszyfrowane.
CVn
2

Alternatywną implementacją jest utworzenie urządzenia blokowego ZVOL ( http://zfsonlinux.org/example-zvol.html ), użycie LUKS do zaszyfrowania nowo utworzonego ZVOL, a następnie utworzenie systemu plików ext4 (lub innego) na szczycie zaszyfrowanego bloku urządzenie.

Tux Racer
źródło