Linuxowe systemy plików. Btrfs.

  1. Oszczędność miejsca na dysku.
  2. Ubezpieczenie od nieudanych aktualizacji.
  3. Jeden FS na dowolnym dysku.

Na początku XXI wieku nowoczesny system plików nie wystarczy, aby szybko pracować z plikami i chronić je przed uszkodzeniem. ZFS pokazał nam całą moc technologii Copy-on-Write (CoW, copy-on-write) w zadaniach przechowywania danych. Dla Linuksa stworzono Btrfs - nowy standard FS oparty na technologii CoW.

Sądząc po tym, że Apple aktywnie kończy swoje APFS, które również wykorzystuje CoW, zestaw funkcji ZFS / Btrfs naprawdę zapewnia użytkownikowi nowy poziom komfortu. Aby to poczuć, spróbuj samemu Btrfs.

Tworzysz plik, wewnątrz którego - linia „Dziewczyna Tanya poszła do klatki”. Zapisz go w zwykłym systemie plików, na przykład na Ext4 lub NTFS. Teraz, jeśli otworzysz plik i dodasz drugi wiersz „Nie podawaj krokodyla ponownie”, system plików podczas zapisywania całkowicie nadpisze poprzednią wersję pliku. Oznacza to, że wersja pliku, w której znajduje się tylko jedna linia, już nie istnieje.

Teraz zrób to samo na Btrfs. Utworzenie pliku za pomocą pojedynczej linii przebiega w ten sam sposób, ale po dodaniu drugiej linii do pliku i zapisaniu pojawia się kopia do zapisu. Stara wersja pliku nie jest nadpisywana, pozostaje nietknięta, a linia „Nie podawaj krokodyla ponownie” jest dodawana do wolnego miejsca w systemie plików.

Jeśli chcesz przeczytać ten plik, zobaczysz tylko najnowszą wersję, ale za pomocą narzędzia btrfs możesz przywrócić go do poprzednich stanów. Zatem Btrfs może przechowywać historię zmian w każdym pliku - nie ma potrzeby rejestrowania, Btrfs tylko okresowo zapamiętuje stan systemu plików i przy najmniejszym błędzie powraca do poprzedniej wersji.

Instalator Ubuntu od dawna obsługuje Btrfs, więc nie ma z tym żadnych problemów:

Btrfs działa na woluminach lub podwolutach - są to partycje w systemie plików. „Jak gdyby” - ponieważ woluminy są bardziej podobne do katalogów niż sekcji. Ale taki specjalny katalog można zamontować jako partycję. Instalator Ubuntu tworzy oddzielne woluminy dla systemu i dla katalogu domowego:

Dzieje się tak, ponieważ o wiele szybciej i łatwiej jest zapisać stan całego wolumenu niż stan każdego z tysięcy plików w tym woluminie. Drugie polecenie pokazuje, że woluminy @ i @home zostały utworzone na Btrfs, ale nie zadziała, aby zobaczyć je w menedżerze plików. Musisz najpierw zamontować root Btrfs (nie mylić z głównym systemem):

Oszczędność miejsca na dysku.

Dla każdego woluminu można włączyć przezroczystą kompresję przy użyciu jednego z dwóch algorytmów: zlib i lzo. Pierwsze kompresuje się lepiej, ale drugie działa 10 razy szybciej. W systemach powszechnie stosuje się lzo, a zlib ma sens w przypadku dużych woluminów, które rzadko są czytane. Kompresja jest włączona z opcją mount compress = lzo w pliku / etc / fstab:

Po ponownym uruchomieniu kompresja zostanie aktywowana. Zauważ, że wolumin jest zamontowany w określonym katalogu - poprzez opcję subvol = wanted_tom.

Ubezpieczenie od nieudanych aktualizacji.

Przed każdą aktualizacją systemu wykonuję migawkę woluminu systemowego. Tak może wyglądać w Ubuntu:

Możesz także zapisać wolumin z katalogiem domowym i ogólnie dowolną objętością. Migawka Btrfs jest domyślnie otwarta do zapisu, ale można utworzyć migawkę tylko do odczytu:

sudo btrfs subvolume snapshot -r source_tom snapshot

Wyobraź sobie, że po uaktualnieniu system działa z błędami lub nie ładuje się wcale. Następnie wystarczy podać w / etc / fstab ostatnią migawkę jako wolumin systemowy za pomocą opcji subvol =. Można to zrobić za pomocą LiveCD.

Jeden FS na dowolnym dysku.

Dla maszyny wirtualnej z Ubuntu stworzyłem 1 napęd wirtualny. Wyobraź sobie, że miejsce na tym się skończyło. W takim przypadku mogę dodać inny napęd wirtualny w ustawieniach Virtualbox, a następnie dodać go do Btrfs:

Jak widać, Btrfs automatycznie zastosował model RAID1 - dublował dane na dodanym dysku, ale poziomy RAID można zmienić. To samo można zrobić na prawdziwej maszynie - dodawać i usuwać dyski bez konieczności ponownego ich podziału i formatowania.

Jak powiedziano w ostatnim artykule, technologia CoW prowadzi do bardzo pofragmentowanych plików - wszystkie zmiany w nich są zapisywane w kawałkach w różnych miejscach w systemie plików. Dlatego Btrfs (jak również ZFS) jest zalecany do stosowania na dyskach SSD, gdzie fragmentacja nie jest w ogóle odczuwalna.

Btrfs to dość nowoczesny i zaawansowany system plików, obsługuje SSD, który nazywany jest „po wyjęciu z pudełka”. W dzienniku jądra można zobaczyć następujące wiersze:

Ostatni wiersz pokazuje, że Btrfs sam ustalił, co znajduje się na dysku SSD, i automatycznie włączył obsługę dysków SSD. Ten tryb można również włączyć za pomocą opcji montowania o tej samej nazwie. Dzięki temu trybowi Btrfs pokazuje dużą prędkość w operacjach wielowątkowych.

Pamiętaj jednak, że tryb SSD nie obejmuje obsługi TRIM! Dlatego musi być albo włączony za pomocą opcji odrzucania montowania, albo regularnie uruchamiać program fstrim. Ubuntu ma oddzielną jednostkę systemową do okresowego testowania tego programu, możesz go aktywować za pomocą następującego polecenia:

sudo systemctl włącz fstrim.timer

Btrfs ma jedną nieprzyjemną cechę architektoniczną: pakuje małe pliki bezpośrednio do drzewa metadanych. Drzewo metadanych jest czymś w rodzaju treści w książce lub wyszukiwarce w Internecie - ogólnie rzeczą bardzo ważną.

Domyślnie pliki o rozmiarze do 4 Kb są zapisywane w drzewie, a tutaj leży niebezpieczeństwo. Ze względu na fakt, że rozmiar pliku nie jest znany z góry, a zakres rozmiarów jest szeroki, drzewo metadanych Btrfs rośnie znacznie, co negatywnie wpływa na szybkość pliku FS.

Aby tego uniknąć, możesz poważnie ograniczyć maksymalny rozmiar pliku, który zostanie zapakowany w drzewie. Odbywa się to za pomocą opcji montowania max_inline z rozmiarem pliku w bajtach - oczywiście w pliku / etc / fstab:

Odbywa się to za pomocą opcji montowania max_inline z rozmiarem pliku w bajtach - oczywiście w pliku / etc / fstab:

Teraz tylko pliki o rozmiarze do 256 bajtów zostaną zapisane w drzewie. Możesz całkowicie wyłączyć opakowanie, podając 0 po znaku „równości”.

Przy okazji warto wyłączyć aktualizację znaczników czasu przy każdym dostępie do pliku. Odbywa się to za pomocą opcji noatime. Dodaje to nieco prędkości FS, a na dysku SSD ma to również sens, ponieważ zmniejsza liczbę wpisów do niego.

Jedną z korzystnych różnic między Btrfs a ZFS jest możliwość całkowitego wyłączenia funkcji kopiowania przy zapisie. Może to być przydatne na dysku twardym, aby zmniejszyć fragmentację i zwiększyć prędkość. Ale nawet na dysku SSD duże pliki często nadpisywane mogą spowolnić cały system plików z powodu CoW. Pliki te obejmują obrazy maszyn wirtualnych i baz danych.

Możesz wyłączyć CoW na poziomie głośności za pomocą opcji montowania nodatacow:

Jednak ta opcja może nie działać z powodu mylącego systemu zależności opcji montowania między woluminami. W takim przypadku można wyłączyć CoW na poziomie atrybutu pliku za pomocą polecenia:

chattr -R + C pożądany katalog

Wydaje się, że klucz „+ C” powinien logicznie obejmować CoW, ale nie, prawda jest odwrotna. Aby włączyć CoW, musisz zastosować to samo polecenie, ale z klawiszem „-C”.

Często ludzie nie rozumieją, jak poprawnie rozpoznać ilość wolnego i zajętego miejsca na Btrfs. Faktem jest, że z powodu migawek i kompresji zwykłe narzędzia „szaleją” i pokazują nieprawidłowe dane. Dlatego musisz użyć narzędzia btrfs:

Dlatego musisz użyć narzędzia btrfs:

Jej wniosek również nie jest jasny, więc analizujemy w rzędach.

Pierwsza linia zawiera skumulowane ilości przydzielonego i zajętego miejsca. Słowo „pojedynczy” oznacza, że ​​Btrfs jest używany na jednym dysku. „Razem” pokazuje, ile miejsca jest dostępne, i może być znacznie mniejsza niż całkowita ilość miejsca na dysku . Nie należy panikować, tylko Btrfs przydziela miejsce w partiach. Jeśli jedna część się zakończy, przydzielona zostanie kolejna. Cóż, „używane” pokazuje, ile miejsca w systemie plików zostało faktycznie pobrane.

Druga linia pokazuje, ile miejsca zajmuje przestrzeń rezerwowa. Coś podobnego jest w Ext4.

Trzecia linia jest bardziej interesująca - w niej można zobaczyć, ile zajmuje drzewo metadanych. Zrzut ekranu pokazuje, że 2 GB jest przydzielone dla drzewa, z czego około 600 MB jest zajętych. Wskaźniki te są brane pod uwagę w pierwszym wierszu.

Wreszcie czwarta linia pokazuje informacje o obszarze kopii zapasowej, ale już powiązane z samym Btrfs. Jest on potrzebny, aby nawet przy całkowicie zatkanym FS można było usuwać i tworzyć woluminy i migawki.

Aby dowiedzieć się, ile miejsca zajmuje Btrfs, należy spojrzeć na wskaźnik „używany” w pierwszym wierszu wyjścia polecenia:

sudo btrfs system plików df wanted_path

Tam twoje pytania nie zostaną utracone, a odpowiedź będzie szybsza, w przeciwieństwie do komentarzy.