
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 został opracowany w , 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 .
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 . Wystarczy zainstalować i skonfigurować przechowywanie wiadomości w Maildir. Inny format 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. Każ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 ).
- 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 homei 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. .
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ądzenieOdzyskiwanie 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_kontrolnegoPo 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_kontrolnegoNarzę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 , które potrafi wyświetlać historię zmian konkretnego pliku/katalogu:
n2u log nazwa_plikuWyjś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 cpDział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_plikuMożna wyświetlić całą chronologię zmian: wszystkie różnice między punktami kontrolnymi określonego pliku/katalogu:
n2u blame [-r cp1:cp2] nazwa_plikuZakres 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
.
Repozytoria:
.
.
Newslettery:
. Identyfikator do subskrypcji linux-nilfs.
.
.
.
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 . Pierwszy obrazek posta pochodzi z filmu „Powrót do przyszłości — 3”.
- Firmie 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 za pomocą kuponu poniżej. Dla wszystkich nowych klientów darmowy okres próbny 3 dni.
Źródło: habr.com
