NILFS2 — kuloodporna system plików dla /home

NILFS2 — kuloodporna system plików dla /home

Jak wiadomo, jeśli coś złego ma się wydarzyć, to na pewno się wydarzy. Na pewno każdy z nas miał sytuacje, kiedy przypadkowo usunięto ważny plik lub niechcący skasowano tekst w edytorze tekstu.

Jeśli jesteś hosterem lub właścicielem strony internetowej, na pewno spotkałeś się z włamaniami na konta użytkowników lub swoją stronę. W takich przypadkach ważne jest przywrócenie chronologii, znalezienie sposobu wejścia oraz luki, którą wykorzystał haker.

Do rozwiązywania takich problemów świetnie nadaje się system plików NILFS2.

Jest on obecny w jądrze Linux od wersji 2.6.30.

Cechą tego systemu plików jest to, że przypomina system kontroli wersji: zawsze możesz cofnąć stan systemu i zobaczyć, jak wyglądał jakiś czas temu.

Aby zapewnić tę funkcjonalność, nie musisz konfigurować skryptów Cron, tworzyć zrzutów stanu itp. System plików NILFS2 robi to wszystko sam. Nigdy nie nadpisuje starych danych i zawsze zapisuje w nowych obszarach dysku, jeśli jest wystarczająco dużo wolnego miejsca na dysku. W pełnej zgodności z zasadą Copy-on-Write.

Faktycznie, każda zmiana pliku automatycznie powoduje utworzenie nowego zrzutu systemu plików, więc możesz używać tego systemu plików jak wehikułu czasu i cofać się do poprzednich stanów plików.

Historia

NILFS2 — kuloodporna system plików dla /homeNILFS2 został opracowany w Nippon Telegraph and Telephone Corporation, w rzeczywistości jest to państwowa (ma kontrolny pakiet) i największa firma telekomunikacyjna w Japonii. A dokładniej w laboratoriach CyberSpace Laboratories pod kierunkiem Ryusuke Konishi..

Nie wiadomo, w jakim celu była konkretnie rozwijana, jednak można przypuszczać, że taki system plików, z jego funkcjonalnością „wehikułu czasu”, jest idealny do przechowywania danych, które mogą wzbudzać zainteresowanie służb specjalnych, aby ponownie prześledzić całą historię SMS-ów, e-maili itd.

NILFS2 jest również potencjalnie bardzo wartościowym narzędziem dla służb wewnętrznych, ponieważ pozwala na odzyskiwanie wszelkich usuniętych wiadomości w bazie danych pocztowych, ujawniając błędy pracowników, którzy później mogą próbować je zamaskować, usuwając lub zmieniając swoje pliki.

Jak można śledzić całą historię korespondencji?Na serwerach Linux (gdzie właśnie warto zainstalować NILFS2 w celach wewnętrznego bezpieczeństwa) do przechowywania wiadomości e-mail często stosuje się plikowy sposób przechowywania e-maili. Tak zwany format Maildir. Wystarczy zainstalować Courier Mail Server i skonfigurować przechowywanie wiadomości w Maildir. Inny format mbox to duży plik tekstowy, który łatwo parsuje się na poszczególne wiadomości.

Jeśli jednak serwer pocztowy wykorzystuje bazę danych, NILFS2 umożliwi przywrócenie dokładnego chronologicznego śladu zmian bazy i możliwość przywrócenia bazy do dowolnego z tych momentów. Następnie należy skorzystać z narzędzi bazy danych, aby zobaczyć, co zawierała w danym momencie...

Jednak coś poszło nie tak. To czy rząd Japonii zdecydował się zrezygnować z monitorowania wszystkich (na wzór zasady Jarowej), czy wydajność NILFS2 na tradycyjnych dyskach HDD okazała się poniżej oczekiwań, a NILFS2 zostało wydane na licencji GPL i bardzo szybko trafiło do jądra Linux, ponieważ programiści jądra Linux nie mieli żadnych poważnych zastrzeżeń do kodu napisanego przez wykwalifikowanych Japończyków.

Do czego jest podobne NILFS2?

Z punktu widzenia użytkowania: do systemu kontroli wersji. SVNKażdy punkt kontrolny systemu plików to commit, który wykonywany jest automatycznie bez wiedzy użytkownika przy każdej zmianie: czy to usunięciu, zmianie zawartości pliku czy praw dostępu. Każdy commit ma numer, który rośnie liniowo.

Z perspektywy programisty: to cykliczny bufor. System plików gromadzi zmiany i zapisuje je w kawałku równym około 8 MB (2000 * 4096, gdzie 2000 to liczba elementów w bloku, a 4096 to rozmiar strony pamięci). Cały dysk jest podzielony na takie kawałki. Zapis odbywa się sekwencyjnie. Kiedy kończy się wolne miejsce, najstarsze zrzuty są usuwane, a kawałki nadpisywane.

Główne zalety NILFS2

  • Wersjonowanie!!!
  • Procedura przywracania systemu plików po awarii jest prosta: podczas uruchamiania poszukiwany jest ostatni kawałek, mający poprawny sumę kontrolną, i na nim ustawiany jest superblok. To praktycznie natychmiastowa operacja.
  • W związku z tym, że zapis zawsze odbywa się liniowo, to:
    • może wykazywać dobre wyniki przy pracy na SSD, z wolnym zapisem losowym.
    • NILFS2 oszczędza zasoby SSD, ponieważ prawie nie ma czynnika mnożenia zapisu.
      A dokładniej, nie więcej niż 2.Faktem jest, że podczas cyklicznego zapisu całego dysku, NILFS2 przenosi niezmienne dane do nowych kawałków (chunków).

      Jeśli na dysku mamy 10% niezmieniających się danych, to uzyskamy 10% przyrostu zapisu przy jednym pełnym nadpisaniu. A przy 50% wypełnieniu urządzenia uzyskamy 50% przyrost przy jednym pełnym nadpisaniu dysku.

      Maksymalny współczynnik wzmacniania zapisu wynosi 2. To bardzo mało, biorąc pod uwagę, że wszystko jest zapisywane sekwencyjnie. Ogólnie rzecz biorąc, mnożenie zapisu będzie mniejsze niż w przypadku zwykłego zfragmentowanego systemu plików z sektorem 4096 bajtów. (Skłania do myślenia komentarz).

  • Potencjalna prostota wdrożenia replikacji na zdalnym systemie plików NILFS2

NILFS2 dla /home

W systemach operacyjnych Unix-podobnych zazwyczaj znajduje się folder /home, w którym przechowywane są dane użytkowników. Różne programy zapisują w tym folderze swoje ustawienia dotyczące konkretnego użytkownika.

A kto, jeśli nie użytkownicy, najczęściej popełnia błędy? Dlatego, jak mówi powiedzenie, sam Bóg nakazał używać NILFS2 w /home.

O tym, że z powszechnym rozpowszechnieniem SSD, teraz nie musimy się martwić o duże spadki wydajności przy korzystaniu z systemów plików CoW.

Tak, migawki systemu plików (snapshoty) możemy tworzyć nieskończoną ilość razy zarówno w ZFS, jak i BTRFS, ale zawsze istnieje ryzyko, że utracona zmiana pliku może znaleźć się między migawkami. A migawki jeszcze trzeba administrować: usuwać stare. W NILFS2 wszystko to odbywa się automatycznie, dosłownie co kilka sekund.

Utworzyłem logiczny wolumen za pomocą lvcreate (w grupie wolumenów nvme, cienki pul lvm). Zalecam tworzenie go właśnie w wolumenie lvm, ponieważ później może być łatwo rozszerzony. Rekomenduję posiadanie 50% wolnego miejsca na dysku z NILFS2 dla odpowiedniej głębokości wersjonowania.

lvcreate -V10G -T nvme/thin -n home

i sformatowałem go w NILFS2:

mkfs.nilfs2 -L nvme_home /dev/nvme/home

mkfs.nilfs2 (nilfs-utils 2.1.5)
Rozpoczęcie zapisywania początkowych danych systemu plików na urządzeniu
      Rozmiar bloku:4096  Urządzenie:/dev/nvme/home1  Rozmiar urządzenia:10737418240
Inicjalizacja systemu plików powiodła się !!

Po tym należy skopiować wszystkie dane z aktualnego /home.

Zrobiłem to zaraz po uruchomieniu komputera, zanim zalogowałem się na swoje konto, jako użytkownik root. Gdybym zalogował się jako mój użytkownik, niektóre programy otworzyłyby gniazda i pliki w folderze mojego użytkownika /home/user, co utrudniłoby czyste skopiowanie. Jak wiadomo, domowy folder dla użytkownika root zazwyczaj znajduje się pod ścieżką /root, dlatego na partycji /home nie otworzą się żadne pliki.

mkdir /mnt/newhome
mount -t nilfs2 /dev/nvme/home /mnt/newhome
cp -a /home/. /mnt/newhome

Odnośnie ostatniej linii patrz. artykuł.

Następnie edytujemy /etc/fstab, w której montowany jest system plików dla /home, na

/dev/disk/by-label/nvme_home /home nilfs2    noatime 0 0

Opcja noatime jest potrzebne do zwiększenia wydajności, aby przy każdym dostępie do plików nie zmieniało się atime. Następnie restartujemy.

Rodzaje migawków w NILFS2.

Zwykła migawka bez odporności na usunięcie nazywana jest punktem kontrolnym (checkpoint lub punkt przywracania).
Migawka z ochroną przed automatycznym usunięciem nazywa się snapshotem (migawką), potem po prostu migawka.

Przeglądanie punktów kontrolnych odbywa się za pomocą polecenia lscp.

Przeglądanie migawek (snapshotów) lscp -s

Możemy też sami tworzyć migawki i punkty kontrolne w dowolnym momencie za pomocą:

mkcp [-s] urządzenie

Odzyskiwanie danych.

NILFS pozwala nam montować dowolną liczbę starych migawek równolegle z pracą na głównej gałęzi FS. Ale tylko w trybie do odczytu.

Wszystko działa tak. Zwykłe punkty kontrolne, które tworzy NILFS2, mogą być automatycznie usunięte w dowolnym momencie (gdy skończy się miejsce na dysku lub zgodnie z zasadami nilfs_cleanerd), dlatego przed montażem musimy przekształcić punkt kontrolny w migawkę lub, mówiąc po rosyjsku, zablokować migawkę.

chcp ss numer_punktu_kontrolnego

Po tym możemy zamontować migawkę, np. w ten sposób:

mount -t nilfs2 -r -o cp=numer_punktu_kontrolnego /dev/nvme/home /mnt/nilfs/numer_punktu_kontrolnego

Następnie kopiujemy przywracane pliki z migawki do /home.
A następnie ściągamy flagę nietykalności z migawki, aby w przyszłości automatyczny system zbierania śmieci mógł usunąć przestarzałe dane:

chcp cp numer_punktu_kontrolnego

Narzędzia dla NILFS2

Ale z tym jest problem. Tak, oczywiście, możemy tworzyć systemy plików, zmieniać ich rozmiar w trybie online, przeglądać listę punktów kontrolnych, tworzyć je i usuwać. Pakiet nilfs2-utils zapewnia minimalny zestaw narzędzi.

Ponieważ NTT wstrzymało finansowanie, nie ma szybkich narzędzi niskopoziomowych, które pozwalają na wyświetlanie historii zmian plików lub porównanie zrzutów.

Moje narzędzie n2u

Aby wypełnić tę lukę, napisałem moje narzędzie n2u, które potrafi wyświetlać historię zmian konkretnego pliku/katalogu:

n2u log nazwa_pliku

Wyjście wygląda mniej więcej tak:

          CHECKPOINT        DATA     CZAS     TYP          ROZMIAR  TRYB
             1787552  2019-11-24 22:08:00    pierwszy          7079    cp
             1792659  2019-11-25 23:09:05  zmieniony          7081    cp

Działa całkiem szybko dzięki wybranemu sposobowi implementacji: szuka różnic między plikami metodą bisekcji, szybko montując i porównując plik/katalog w różnych zrzutach.

Można określić zakres punktów kontrolnych za pomocą klucza -cp CP1:CP2 lub -cp {ROK-MIESIĄC-DZIEŃ}:{ROK-MIESIĄC-DZIEŃ}.

Można również zobaczyć różnice między punktami kontrolnymi dla określonego pliku lub katalogu:

n2u diff -r cp1:cp2 nazwa_pliku

Można wyświetlić całą chronologię zmian: wszystkie różnice między punktami kontrolnymi określonego pliku/katalogu:

n2u blame [-r cp1:cp2] nazwa_pliku

Zakres dat w tej komendzie również jest obsługiwany.

Wezwanie do programistów

Na Habrze jest wielu specjalistów. Proszę, dopracujcie NILFS2. Zróbcie replikację, niskopoziomowy szybki diff między wersjami, reflink i inne przydatne funkcje!

Linki

Oficjalna strona NILFS.

Repozytoria:
NILFS2.
Narzędzia i moduły NILFS2.

Newslettery:
E-mail newsletter programistów NILFS2. Identyfikator do subskrypcji linux-nilfs.
Archiwum newslettera.

Instrukcja konfigurowania nilfs_cleanerd.
Porównawcze testy wydajności EXT4, Btrfs, XFS & NILFS2.

Podziękowania:

  • Programiści NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi i Satoshi Moriai. Inni główni współpracownicy to: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Firmom Amblin Entertainment i Universal Pictures za wspaniałą serię filmów „Powrót do przyszłości”. Pierwszy obrazek posta pochodzi z filmu „Powrót do przyszłości — 3”.
  • Firmie RUVDS za wsparcie i możliwość publikacji na swoim blogu na Habra.

P.S. Zgłaszane błędy proszę kierować na priv. Podnoszę za to karmę.

Możesz wypróbować NILFS2, zamawiając maszynę wirtualną u RUVDS za pomocą kuponu poniżej. Dla wszystkich nowych klientów darmowy okres próbny 3 dni.

NILFS2 — kuloodporna system plików dla /home

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster