Jak zoptymalizować rozmiar pakietów Restic dla lokalnego repozytorium NAS

Eva Wong jest Technicznym pisarzem i stałym majsterkowiczem w ZimaSpace. Całe życie geek z pasją do homelabów i oprogramowania open-source, specjalizuje się w tłumaczeniu skomplikowanych koncepcji technicznych na przystępne, praktyczne przewodniki. Eva wierzy, że samodzielne hostowanie powinno być zabawą, a nie czymś onieśmielającym. Poprzez swoje samouczki umożliwia społeczności rozwiewanie tajemnic konfiguracji sprzętu, od budowy pierwszego NAS po opanowanie kontenerów Docker.

W przypadku lokalnego repozytorium NAS zachowaj domyślny rozmiar 16 MiB w restic, chyba że pomiary wykażą, że narzut związany z plikami repozytorium lub działanie dysku HDD wymagające wyszukiwania ogranicza przepustowość. Jeśli NAS przechowuje wieloterabajtowe repozytorium na dyskach obrotowych, wartości 32 MiB lub 64 MiB są rozsądnymi opcjami do przetestowania przed rozważeniem jeszcze większych pakietów.

Rozmiar pakietu nie jest tym samym co rozmiar fragmentu deduplikacji w restic. Restic najpierw dzieli dane plików na bloby zdefiniowane przez zawartość, a następnie grupuje bloby w pliki pakietów. Zmiana docelowego rozmiaru pakietu zmienia sposób łączenia tych blobów w repozytorium; nie zmienia wielomianu chunkera repozytorium ani skrótów zawartości.

Zacznij od wartości domyślnej 16 MiB

Obecne wskazówki dotyczące strojenia restic podają, że domyślny docelowy rozmiar pakietu wynosi 16 MiB. Zwracają też uwagę, że większe pliki pakietów mogą zmniejszyć liczbę plików repozytorium i poprawić wydajność kopii zapasowej w przypadku niektórych repozytoriów przechowywanych na lokalnych dyskach HDD.

restic version
restic -r /mnt/nas/restic-repo snapshots
restic -r /mnt/nas/restic-repo stats --mode raw-data

Przed strojeniem zanotuj wersję restic, rozmiar repozytorium, liczbę migawek, typ pamięci masowej i bieżący czas trwania kopii zapasowej. Jeśli repozytorium już kończy działanie w wyznaczonym oknie kopii zapasowej, większy rozmiar pakietów może zwiększyć złożoność bez zapewnienia wymiernych korzyści.

Zrozum, co faktycznie zmienia rozmiar pakietu

opis formatu repozytorium restic wyjaśnia, że zawartość plików jest dzielona na bloby zdefiniowane przez zawartość, a następnie te bloby są grupowane w pliki pakietów.

Pliki źródłowe
   |
dzielenie na fragmenty zdefiniowane przez zawartość
   |
zdeduplikowane bloby
   |
grupowanie pakietów
   |
pliki danych repozytorium

Większy docelowy rozmiar pakietu zazwyczaj oznacza mniej większych plików repozytorium. Może to pomóc dyskowi obrotowemu poświęcać mniej czasu na metadane i operacje otwierania plików. Nie sprawia to jednak, że identyczna zawartość plików będzie lepiej deduplikowana.

Sprawdź, czy NAS rzeczywiście ogranicza rozmiar pakietów

Przed strojeniem obserwuj dysk repozytorium podczas normalnej kopii przyrostowej. Lokalne repozytorium na dysku HDD, które wykonuje wiele krótkich operacji wyszukiwania i operacji na metadanych, gdy przepustowość pozostaje niska, jest lepszym kandydatem niż repozytorium na dysku SSD, które już zapisuje sekwencyjnie z dużą szybkością.

iostat -xz 2

Szukaj stałego wysokiego wykorzystania dysku, podwyższonych czasów oczekiwania oraz niskiej przepustowości w porównaniu z dużym zapisem sekwencyjnym. Sprawdź również użycie procesora i szybkość odczytu źródła. Jeśli wąskim gardłem jest kompresja, haszowanie, wejścia-wyjścia źródła lub sieć, zwiększenie rozmiaru pakietu tego nie naprawi.

Porównaj wartości 16, 32 i 64 MiB na porównywalnych repozytoriach

Najbardziej miarodajne porównanie wykorzystuje tymczasowe repozytoria utworzone na potrzeby testu. Użyj tego samego zbioru danych źródłowych, woluminu NAS, wersji restic oraz liczby połączeń z backendem.

restic --pack-size 16 -r /mnt/nas/test-restic-16 init
restic --pack-size 16 -r /mnt/nas/test-restic-16 backup /srv/testdata

restic --pack-size 32 -r /mnt/nas/test-restic-32 init
restic --pack-size 32 -r /mnt/nas/test-restic-32 backup /srv/testdata

restic --pack-size 64 -r /mnt/nas/test-restic-64 init
restic --pack-size 64 -r /mnt/nas/test-restic-64 backup /srv/testdata

Zmierz czas trwania, przepustowość dysku repozytorium, wykorzystanie miejsca tymczasowego oraz wynikową liczbę plików danych. W miarę możliwości powtórz testy, aby efekty pamięci podręcznej stron nie zafałszowały wyniku.

Uwzględnij miejsce tymczasowe przed zwiększeniem rozmiaru pakietu

Restic określa wymagane miejsce tymczasowe w przybliżeniu następująco:

rozmiar pakietu × (liczba połączeń z backendem + 1)

Przy pięciu połączeniach z backendem i rozmiarze docelowym 64 MiB oznacza to co najmniej 384 MiB wolnego miejsca tymczasowego. Lokalny backend domyślnie korzysta obecnie z mniejszej liczby połączeń niż większość zdalnych backendów, ale ta sama zasada nadal obowiązuje.

df -h "${TMPDIR:-/tmp}"
export TMPDIR=/mnt/fast-temp/restic
mkdir -p "$TMPDIR"

Większe pakiety tymczasowe mogą również zwiększyć zużycie pamięci i spowodować, że więcej tymczasowych zapisów trafi na dysk SSD zamiast pozostać w pamięci podręcznej.

Używaj tego samego ustawienia rozmiaru pakietu w poleceniach zapisujących dane w repozytorium

Restic informuje, że ustawienie rozmiaru pakietu należy określać przy każdym poleceniu, które modyfikuje repozytorium. Użyj jednej zmiennej środowiskowej dla całego zadania:

export RESTIC_REPOSITORY=/mnt/nas/restic-repo
export RESTIC_PACK_SIZE=64
export RESTIC_PASSWORD_FILE=/root/.config/restic/password

restic backup /srv/data
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6
restic prune

Zmiana rozmiaru pakietów nie zmienia sposobu dzielenia danych na fragmenty na potrzeby deduplikacji, ale może pozostawić pakiety o różnych rozmiarach. Spójność ułatwia interpretację przyszłej konserwacji i porównań wydajności.

Nie oczekuj, że istniejące pakiety automatycznie zmienią rozmiar

Nowe ustawienie rozmiaru pakietu ma wpływ na nowo utworzone lub przepakowane dane. Istniejące pliki pakietów nie są przepisywane tylko dlatego, że RESTIC_PACK_SIZE zmiany.

Jeśli celowo chcesz, aby prune przepakował mniejsze istniejące pakiety, bieżąca wersja restic udostępnia opcję --repack-smaller-than. Najpierw zapoznaj się z opcjami przepakowywania podczas prune.

restic prune --dry-run --repack-smaller-than 32M

Zacznij od symulacji. Nie wymuszaj pełnego przepakowania wyłącznie po to, aby każdy plik pakietu wyglądał jednolicie.

Weryfikacja integralności po dostrojeniu ustawień

restic check
restic check --read-data-subset=5%

Wybierz harmonogram weryfikacji odpowiedni do rozmiaru repozytorium. Wskazówki restic dotyczące rozwiązywania problemów z repozytorium traktują kontrole integralności jako podstawę diagnozowania uszkodzeń repozytorium.

W szerszym projekcie kopii zapasowych połącz lokalne repozytorium z inną niezależną kopią. Strategia tworzenia kopii zapasowych 3-2-1 w ZimaOS wyjaśnia, dlaczego lokalna redundancja i osobny cel rozwiązują różne scenariusze awarii.

Zastosuj tę zasadę podejmowania decyzji

  • Pozostań przy 16 MiB, jeśli kopie zapasowe już mieszczą się w wyznaczonym oknie lub wąskie gardło znajduje się gdzie indziej.
  • Przetestuj 32 MiB, jeśli duże repozytorium na dysku HDD spędza dużo czasu na metadanych i operacjach na małych plikach.
  • Przetestuj 64 MiB, jeśli 32 MiB przynosi poprawę, a zużycie miejsca tymczasowego pozostaje na komfortowym poziomie.
  • Przestań zwiększać rozmiar, gdy korzyści się wypłaszczają lub rośnie tymczasowe użycie operacji wejścia-wyjścia.

Najlepszy rozmiar pakietu to najmniejsza wartość, która mierzalnie zmniejsza narzut repozytorium, nie powodując nowego wąskiego gardła.

Często zadawane pytania dotyczące rozmiaru pakietów restic

Czy większy rozmiar pakietu poprawia deduplikację w restic?

Nie. Deduplikacja odbywa się na poziomie obiektów blob/bloków, zanim obiekty blob zostaną zgrupowane w pliki pakietów.

Czy zmiana rozmiaru pakietu spowoduje przepisanie starych plików pakietów?

Nie. Istniejące pakiety pozostają bez zmian, dopóki zwykłe operacje czyszczenia lub przepakowywania ich nie przepiszą.

Od jakiego rozmiaru pakietu zacząć na lokalnym serwerze NAS z dyskiem HDD?

Użyj 16 MiB jako wartości bazowej, a następnie przetestuj 32 MiB i 64 MiB przy tym samym obciążeniu.

Wsparcie i wskazówki

Więcej do przeczytania

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.