Kompresja

Kompresja Kopii Zapasowych

Techniki kompresji o wysokim współczynniku dla długoterminowego przechowywania danych i systemów kopii zapasowych.

Wprowadzenie: Znaczenie Kopii Zapasowych

Dane osobowe obejmują zdjęcia rodzinne, dokumenty i historię pracy, natomiast dane firmowe obejmują między innymi dokumentację finansową, informacje o klientach, własność intelektualną i plany operacyjne. Awaria sprzętu, przypadkowe usunięcie, błąd oprogramowania lub atak ransomware mogą uniemożliwić dostęp do tych danych. tworzą odrębny punkt odtworzenia i są podstawowym elementem ochrony danych. Polityka backupu określa między innymi RPO, czyli dopuszczalną utratę danych wyrażoną czasem, oraz RTO, czyli wymagany czas przywrócenia usługi.

Kopie zapasowe mają inne wymagania niż bieżące przechowywanie plików. System backupowy może obejmować całe dyski lub serwery, a także przechowywać wiele wersji przez miesiące albo lata. Przedsiębiorstwo może codziennie kopiować terabajty danych. Bez redukcji redundancji koszt repozytorium rośnie wraz z każdą wersją oraz z wymaganiami retencji. Repozytorium musi też przechowywać metadane, zależności łańcucha, sumy kontrolne i informacje potrzebne do weryfikacji odtworzenia. Wymagana jest również separacja kopii od źródła, aby awaria lub atak nie usunęły obu zbiorów jednocześnie.

Kompresja w systemie backupowym zmniejsza rozmiar danych przekazywanych i zapisywanych. Deduplikacja usuwa powtórzenia między blokami lub plikami. Są to odrębne mechanizmy, które można łączyć, aby ograniczyć ilość nowych danych w kolejnych punktach odtworzenia i utrzymać wymagany czas retencji. Pliki już skompresowane lub zaszyfrowane zwykle dają mniejszy zysk z kolejnej kompresji, więc system powinien rozpoznawać ich format. Współczynnik redukcji trzeba oceniać razem z kosztem odczytu, dekompresji, weryfikacji i przywrócenia pojedynczego punktu. Poziom kompresji można dobierać osobno dla danych aktywnych, nowszych punktów odtworzenia i archiwów. Warto sprawdzać go na tekstach, dyskach wirtualnych, bazach danych i zaszyfrowanych nośnikach, ponieważ różne typy danych mają odmienne wzorce redundancji. Pomiar powinien obejmować przepustowość odtwarzania, operacje wejścia-wyjścia repozytorium oraz końcowy rozmiar. Polityka powinna określać także liczbę kopii, retencję, izolację repozytorium i sposób testowania odtworzenia. Dla danych często zmienianych liczy się koszt zapisu, a dla archiwów koszt odczytu i trwałość nośnika. Testy powinny używać reprezentatywnych danych i sprawdzać osiągnięcie założonych RPO oraz RTO.

Kompresja i Deduplikacja w Systemach Kopii Zapasowych

W systemach backupowych często łączy się dwie strategie redukcji danych. Są to odrębne procesy, które usuwają redundancję na różnych poziomach.

1. Kompresja unikalnych danych

analizuje fragment danych i koduje jego wzorce oraz redundancję statystyczną w krótszej postaci. Przykładowo powtarzająca się sekwencja tekstu może zostać zastąpiona odwołaniem do krótszego kodu. Wynik dotyczy zawartości pojedynczego bloku. Po kompresji bezstratnej dekoder odtwarza dokładnie ten sam blok. System może identyfikować blok przed kompresją, a zapisywać odwołanie do jego zakodowanej reprezentacji, zależnie od architektury.

2. Deduplikacja powtórzonych bloków

porównuje dane w większym zbiorze bloków, plików lub punktów odtworzenia. Gdy system rozpozna identyczny fragment, zachowuje jego jedną kopię i zapisuje odwołanie. Przykładowo, jeśli 100 pracowników tworzy kopie laptopów zawierających ten sam plik systemowy, taki jak win32k.syswin32k.sys, repozytorium może przechowywać dane tego pliku raz oraz łączyć je z odpowiednimi mapami metadanych. Rzeczywista oszczędność zależy od stopnia powtórzeń i zakresu deduplikacji. Usunięcie jednego odwołania nie powinno usuwać bloku używanego przez inne punkty, dlatego magazyn prowadzi liczniki referencji lub równoważne mapy zależności.

Algorytmy kompresji w systemach backupowych

Kompresja kopii zapasowych ma inne ograniczenia niż kompresja ruchu sieciowego w czasie rzeczywistym. Dla danych przechowywanych długo ważny jest współczynnik kompresji, lecz administrator musi uwzględnić czas okna backupowego, obciążenie procesora i czas odtwarzania. Dane mogą być kompresowane podczas nocnego okna i przechowywane przez lata, więc poziom kompresji dobiera się do całego cyklu życia kopii.

Oprogramowanie backupowe może udostępniać kilka algorytmów. Ich wybór wyznacza kompromis między szybkością, zużyciem procesora i ilością zajętego miejsca:

  • LZ4: Algorytm o bardzo krótkim czasie kodowania i dekodowania. Oferuje umiarkowany współczynnik kompresji przy małym obciążeniu procesora, więc pasuje do zadań, w których ważny jest czas wykonania. Format ramki może przenosić rozmiar danych i sumę kontrolną, co upraszcza strumieniowe zapisywanie bloków.
  • Gzip/DEFLATE: Format gzip przenosi strumień DEFLATE. DEFLATE łączy wyszukiwanie powtórzeń metodą LZ77 z kodowaniem Huffmana. Zapewnia bezstratne kodowanie i kompromis między rozmiarem a czasem pracy, dlatego jest dostępny w wielu narzędziach. Okno wyszukiwania i tablice kodów wpływają na rozmiar wyniku, a dekoder odtwarza pierwotny strumień.
  • Zstandard (zstd): Algorytm bezstratny z szerokim zakresem poziomów. Niższe poziomy są przeznaczone do szybkiego kodowania, a wyższe zwiększają nakład obliczeniowy w zamian za mniejszy wynik. Porównanie z LZ4 lub DEFLATE zależy od danych i ustawień. Zstandard definiuje ramki, które mogą być przetwarzane strumieniowo i zawierać informacje potrzebne do dekodowania.
  • LZMA/LZMA2: Algorytmy używane między innymi przez 7-Zip. Mogą uzyskać wysoki współczynnik kompresji, lecz zwykle wymagają więcej czasu i pamięci podczas kodowania. Sprawdzają się przy archiwizacji danych, dla których ważniejszy jest rozmiar repozytorium niż czas tworzenia kopii. Duży słownik i parametry kodera wpływają na możliwość odtworzenia oraz na zapotrzebowanie pamięci.

Działanie deduplikacji

Deduplikacja wymaga indeksu identyfikatorów fragmentów danych oraz procedury porównującej nowe dane z tym indeksem. System przechowuje unikalne fragmenty i mapy, które opisują kolejność fragmentów potrzebnych do odtworzenia pliku lub punktu odtworzenia. W praktyce używa się szybkiego odcisku do wyszukania kandydata oraz silniejszego hasza do potwierdzenia, a polityka integralności może wymagać kontroli bloków podczas odczytu.

Deduplikacja na poziomie pliku i bloku

Fragment analizowany przez system może obejmować cały plik albo część pliku. Stąd wynikają dwa podstawowe podejścia:

  • Deduplikacja na Poziomie Pliku (Single-Instance Storage): System oblicza skrót całego pliku i sprawdza, czy taki skrót znajduje się w indeksie. Metoda rozpoznaje identyczne pliki. Zmiana jednego bajta zmienia skrót całego pliku, więc zmodyfikowana wersja wymaga zapisania jako nowy obiekt.
  • Deduplikacja na Poziomie Bloku: Plik jest dzielony na mniejsze fragmenty, a każdy z nich otrzymuje własny identyfikator. System może rozpoznać powtórzenia wewnątrz plików oraz pomiędzy podobnymi, lecz różnymi plikami. Rozmiar bloków i sposób ich wyznaczania zależą od implementacji.

Bloki o stałym i zmiennym rozmiarze

W deduplikacji blokowej granice fragmentów mogą być ustalone z góry albo zależne od treści.

Deduplikacja Bloków o Stałym Rozmiarze: System dzieli plik na fragmenty o stałym rozmiarze, na przykład 4 kilobajty (4KB4KB). Jest to proste i szybkie. Wstawienie jednego bajta na początku przesuwa granice kolejnych bloków 4KB. Wiele bloków otrzyma wtedy inne hasze, choć ich zawartość będzie w dużej części taka sama. Skuteczność deduplikacji spada.

Deduplikacja Bloków o Zmiennym Rozmiarze (Content-Defined Chunking): Algorytm przesuwa okno po strumieniu i wyznacza granicę na podstawie właściwości treści. Może używać odcisku kroczącego, na przykład fingerprintu Rabina, oraz wzorca bitowego, takiego jak ostatnie 11 bitów równe zero. Po wstawieniu bajta wcześniejsze granice mogą się przesunąć, lecz po przejściu przez zmieniony obszar algorytm może ponownie zsynchronizować granice z treścią. Nie ma gwarancji, że zmieni się tylko pierwszy lub drugi blok, lecz kolejne niezmienione fragmenty często dają się zachować. Mniejszy średni blok zwiększa szansę dopasowania, lecz powiększa indeks i liczbę odwołań, więc parametry CDC dobiera się do obciążenia oraz czasu odtwarzania.

Kolejność operacji kompresji i deduplikacji

Poniższy model procesu łączy te elementy w kolejności spotykanej w systemach, które deduplikują surowe bloki przed ich kompresją. Implementacja może wysyłać odciski etapami, aby serwer nie musiał otrzymywać bloków już obecnych w repozytorium.

  1. Dane do zarchiwizowania są identyfikowane na maszynie źródłowej.
  2. Dane są dzielone na bloki o zmiennym rozmiarze za pomocą algorytmu definiowanego zawartością.
  3. Dla każdego bloku obliczany jest skrót kryptograficzny, na przykład SHA-256.
  4. Te skróty są wysyłane do serwera backupowego, który sprawdza w centralnym indeksie, które bloki już zapisał. To jest krok deduplikacji.
  5. Serwer żąda tylko tych bloków, które są dla niego nowe.
  6. Maszyna źródłowa albo serwer stosuje do nowych bloków bezstratny algorytm, taki jak zstd lub Gzip. To jest krok kompresji.
  7. Tylko nowe, unikalne bloki są przesyłane przez sieć, jeżeli nie znajdują się jeszcze w repozytorium, i zapisywane po kompresji.
  8. Kopia zapasowa jest następnie zapisywana jako mapa metadanych, która jest po prostu listą wskaźników odwołujących się do wszystkich niezbędnych bloków (zarówno starych, jak i nowych) wymaganych do przywrócenia danych.

W tym modelu kolejność "najpierw deduplikuj, potem kompresuj" ogranicza pracę kompresora do nowych bloków. Inne architektury mogą przesuwać te etapy, lecz deduplikacja skompresowanych strumieni wymaga porównywalnej reprezentacji i nie zachowuje wszystkich dopasowań z poziomu surowych bloków. Przy odtwarzaniu system najpierw pobiera mapę, następnie właściwe bloki i na końcu wykonuje dekompresję.

Związek z metodami tworzenia kopii zapasowych

Kompresja i deduplikacja wpływają na sposób budowania łańcuchów kopii. Zmniejszają ilość przesyłanych bloków, lecz dodają indeksy, mapy oraz pracę potrzebną do ich utrzymania. Łańcuch musi zachować kolejność punktów i zależności, ponieważ brak pełnej kopii bazowej albo wymaganego przyrostu może uniemożliwić odtworzenie wybranego stanu.

Kopie pełne, przyrostowe i różnicowe

  • Pełne Kopie Zapasowe: Tradycyjna pełna kopia odczytuje wszystkie dane przy każdym uruchomieniu. W systemie z deduplikacją pierwsza pełna kopia zapisuje unikalne bloki, a kolejne punkty mogą ponownie używać bloków bez zmian i przechowywać tylko nowe fragmenty. Dla użytkownika nadal jest to pełny punkt odtworzenia, lecz jego przyrost przestrzeni zależy od zmian. Oznaczenie pełny opisuje zakres logiczny punktu, nie liczbę fizycznie zapisanych bloków.
  • Kopie Przyrostowe i Różnicowe: Kopia przyrostowa przechowuje zmiany względem poprzedniego punktu, a różnicowa względem pełnej kopii bazowej. Deduplikacja blokowa może dodatkowo rozpoznać niezmienione fragmenty wewnątrz zmodyfikowanego pliku. Odtworzenie punktu przyrostowego wymaga zachowania wszystkich elementów łańcucha wskazanych przez metadane.

Syntetyczna pełna kopia zapasowa

powstaje z danych już zapisanych w repozytorium. Aktywna pełna kopia odczytuje cały zakres ze źródła, natomiast wariant syntetyczny wykorzystuje poprzednią pełną kopię oraz następujące po niej przyrosty.

Serwer łączy ostatnią pełną kopię z blokami z kolejnych przyrostów i zapisuje nowy pełny plik lub mapę zależnie od formatu repozytorium. Nie musi ponownie odczytywać całego źródła, więc nie zużywa łącza na pełny transfer. Operacja nadal obciąża procesor i nośnik repozytorium, a jej czas zależy od długości łańcucha i sposobu konsolidacji. Po utworzeniu syntetycznego punktu kolejne przyrosty mogą wskazywać go jako nową bazę, natomiast poprzednie pliki pozostają do czasu spełnienia polityki retencji i usunięcia zależności. W praktyce narzędzie może najpierw utworzyć przyrost zawierający ostatnie zmiany, a dopiero potem scalić go z pełną kopią, aby nowy punkt obejmował aktualny stan źródła.

Powiązane artykuły