System plików to sposób, w jaki pliki są nazywane i logicznie umieszczane na komputerze w celu przechowywania i pobierania.
Bez systemu plików informacje umieszczone na nośniku pamięci byłyby jednym dużym zbiorem danych („workiem na pliki”) bez możliwości określenia, gdzie się zaczynają lub kończą.
System plików zapewnia uporządkowanie danych i sprawia, że komputerowi łatwiej będzie pobrać dane.
System plików to nieodłączny element każdego systemu operacyjnego, który odgrywa kluczową rolę w zarządzaniu danymi na dysku.
To dzięki niemu możliwe jest przechowywanie, organizowanie oraz odzyskiwanie plików, które użytkownicy codziennie tworzą i edytują.
Wybór odpowiedniego systemu plików może mieć wpływ na szybkość działania komputera, jego bezpieczeństwo oraz kompatybilność z innymi urządzeniami.
System plików to struktura, która umożliwia przechowywanie i organizację danych na nośnikach pamięci, takich jak dyski twarde, dyski SSD, pendrive’y i inne nośniki.
Kluczowymi zadaniami systemu plików są zarządzanie dostępem do danych, śledzenie lokalizacji plików oraz zapewnienie, że dane są zapisywane w sposób efektywny i bezpieczny.
Systemy plików różnią się pod względem organizacji danych i algorytmów zarządzania nimi.
Każdy z nich posiada unikalną strukturę katalogów, bloków danych i tabel, które determinują sposób zapisu i odczytu danych.
System plików to metoda przechowywania plików, zarządzania plikami, informacjami o tych plikach, tak by dostęp do plików i danych w nich zgromadzonych był łatwy dla użytkownika systemu.
Systemy plików stosuje się dla różnych nośników danych, takich jak dyski, dyskietki, a także w strumieniach danych, sieciach komputerowych, pamięciach.
Linux obsługuje wiele systemów plików, takich jak ext3, ext4 czy btrfs - w sumie około 100 rodzjów systemów plików.
Najpopularniejszym systemem plików wśród dystrybucji Linuksa jest ext4.
EXT4 to obecnie najczęściej stosowany system plików w dystrybucjach Linux.
Jest to czwarta wersja serii EXT i przynosi wiele udoskonaleń w stosunku do poprzedników.
EXT4 oferuje wyższą wydajność, obsługę większych woluminów oraz lepsze zarządzanie plikami.
W Linuksie i wielu innych dystrybucjach katalog główny ma strukturę drzewiastą, podobną do systemu hierarchii.
Struktura katalogów Linuksa jest dobrze zdefiniowana i udokumentowana w FHS (File Hiearchy Standard).
FHS jest utrzymywany przez Linux Foundation i przestrzegany przez wszystkie główne dystrybucje Linuksa.
Katalog główny / jest górną częścią systemu plików (w zasadzie zawiera wszystko, co jest wymagane lub używane przez system operacyjny):
| Katalog | Znaczenie |
|---|---|
| /bin | zawiera wszystkie programy, które znajdują się na naszej maszynie |
| /boot | zawiera wszystkie pliki wymagane przez jądro w czasie startu, między innymi bootloader, np. Grub |
| /sbin | zawiera systemowe pliki binarne wymagane przez administratora systemu |
| /dev | zawiera pliki reprezentujące wszystkie urządzenia - każde urządzenie jest reprezentowane przez inny plik |
| /etc | przechowywane są wszystkie konfiguracje oprogramowania używanego przez system |
| /lib | zawiera wszystkie biblioteki wymagane do rozruchu systemu i używane przez różne aplikacje do wykonywania swoich funkcji |
| /mnt | zawiera zamontowane dyski; jeśli montujesz rzeczy ręcznie, użyj katalogu mnt/ |
| /media | miejsce, z którego do montowania korzysta system operacyjny |
| /opt | tutaj znajduje się całe ręcznie instalowane oprogramowanie |
| /proc | zawiera głównie pliki z informacjami o sprzęcie i uruchomionych procesach |
| /root | katalog domowy użytkownika root |
| /run | folder tymczasowy, czyszczony po ponownym uruchomieniu lub zamknięciu systemu |
| /srv | przechowywane pliki używane przez użytkowników zewnętrznych podczas korzystania z serwera ftp |
| /sys | folder systemowy zawierający pliki współdziałające z jądrem |
| /tmp | katalog tymczasowy, w którym aplikacje zapisują pliki na czas sesji |
| /usr | pliki udostępnione tylko do odczytu, w tym wykonywalne pliki binarne i biblioteki, pliki man i dokumentacja |
| /var | bardzo różna zawartość, na przykład logi baz danych, skrzynki pocztowe itp. |
| /home | katalog domowy to miejsce przechowywania plików użytkownika; każdy użytkownik ma podkatalog w tym katalogu |
Jak widać, katalog główny zawiera po prostu wszystko.
bin? tmp? A na co to komu?
Do czego służą poszczególne katalogi?
bin/ - zawiera wszystkie programy, które znajdują się na naszej maszynie
boot/ - zawiera wszystkie pliki wymagane przez jądro w czasie startu, między innymi bootloader, np. Grub
sbin/ - zawiera systemowe pliki binarne wymagane przez administratora systemu
dev/ - zawiera pliki reprezentujące wszystkie urządzenia - każde urządzenie jest reprezentowane przez inny plik.
Dotyczy to tylko urządzeń podłączonych do systemu.
Na przykład Twój dysk może być wyświetlany jako dev/sda a partycja może być wyświetlana jako dev/sda1.
Ten folder jest zwykle dostępny dla sterowników i aplikacji korzystających z poszczególnych urządzeń.
etc/ - ciekawe są legendy na temat powstania tej nazwy: edit to configure ale także et cetera.
Jest to katalog, w którym przechowywane są wszystkie konfiguracje oprogramowania używanego przez system.
lib/ - zawiera wszystkie biblioteki wymagane do rozruchu systemu i używane przez różne aplikacje do wykonywania swoich funkcji
media & mnt/ - zawiera zamontowane dyski.
Na przykład w tym miejscu znajdziesz zewnętrzny dysk twardy lub dysk SSD.
Jeśli montujesz rzeczy ręcznie, użyj katalogu mnt/.
Media/ to miejsce, z którego do montowania korzysta system operacyjny.
opt/ - tutaj znajduje się całe ręcznie instalowane oprogramowanie
proc/ - tu są głównie pliki, które zawierają informacje o sprzęcie, a nawet o uruchomionych procesach w systemie.
Każdy proces jest reprezentowany przez podkatalog.
root/ - ten folder jest zasadniczo uważany za katalog domowy użytkownika root i jest dostępny tylko dla użytkownika z uprawnieniami roota.
run/ - to jest dość nowy folder i różne dystrybucje Linuksa używają go na różne sposoby.
Jest w zasadzie montowany jako tymczasowy system plików (tmpfs), ponieważ jest on czyszczony po ponownym uruchomieniu lub zamknięciu systemu i zawiera programy wymagane na początku procedury rozruchu.
srv/ - znajdują się tu wszystkie przechowywane pliki, do których uzyskują dostęp użytkownicy zewnętrzni podczas korzystania z serwera ftp.
sys/ - folder systemowy zawierający pliki, które współdziałają z jądrem.
Katalog jest tworzony podczas uruchamiania systemu.
tmp/ - katalog tymczasowy, w którym aplikacje zapisują pliki, które mogą być przechowywane podczas danej sesji.
Na przykład edytor tekstu, taki jak libreoffice, może tymczasowo przechowywać dane w przypadku awarii programu lub ponownego uruchomienia systemu.
usr/ - pliki udostępnione tylko do odczytu, w tym wykonywalne pliki binarne i biblioteki, pliki man i inne typy dokumentacji.
var/ - bardzo różna zawartość, na przykład logi baz danych, skrzynki pocztowe itp.
home/ - katalog domowy to miejsce przechowywania plików użytkownika.
Każdy użytkownik ma podkatalog w tym katalogu.
Tutaj znajdziesz ustawienia aplikacji jako ukryte katalogi (z kropką przed nazwą), na przykład pamięć podręczną przeglądarki.
System plików to struktura, która umożliwia przechowywanie i organizację danych na nośnikach pamięci, takich jak dyski twarde, dyski SSD, pendrive’y i inne nośniki.
Kluczowymi zadaniami systemu plików są zarządzanie dostępem do danych, śledzenie lokalizacji plików oraz zapewnienie, że dane są zapisywane w sposób efektywny i bezpieczny.
Systemy plików różnią się pod względem organizacji danych i algorytmów zarządzania nimi.
Każdy z nich posiada unikalną strukturę katalogów, bloków danych i tabel, które determinują sposób zapisu i odczytu danych.
NTFS (New Technology File System) to system plików opracowany przez Microsoft, który jest domyślnym systemem dla systemów operacyjnych Windows od wersji Windows NT.
Dzięki zaawansowanym funkcjom takim jak dziennik (journaling), zarządzanie uprawnieniami i obsługa dużych woluminów, NTFS stał się standardem dla większości komputerów z systemem Windows.
Systemy FAT32 i exFAT, choć starsze, nadal znajdują szerokie zastosowanie, zwłaszcza w urządzeniach przenośnych i w przypadku współpracy z innymi systemami operacyjnymi.
FAT32 jest kompatybilny niemal ze wszystkimi systemami, ale ma swoje ograniczenia - jak brak obsługi plików większych niż 4 GB.
Apple File System (APFS) to nowoczesny system plików wprowadzony przez Apple, zoptymalizowany do pracy z dyskami SSD i nowoczesnymi urządzeniami.
APFS oferuje takie funkcje jak szyfrowanie, klonowanie plików i katalogów, a także tworzenie migawek (snapshots), co znacznie poprawia zarządzanie danymi.
HFS+ był poprzednikiem APFS, będąc przez wiele lat domyślnym systemem plików w urządzeniach Apple.
Choć nie oferował takich zaawansowanych funkcji jak APFS, to jednak dobrze sprawdzał się w codziennym użytkowaniu.
EXT4 to obecnie najczęściej stosowany system plików w dystrybucjach Linux.
Btrfs, czyli B-tree File System, to nowoczesny system plików stworzony z myślą o skalowalności i zaawansowanych funkcjach takich jak migawki (snapshots) i deduplikacji danych.
XFS to zaawansowany system plików stworzony przez SGI, szczególnie popularny w zastosowaniach serwerowych.
XFS charakteryzuje się wyjątkową wydajnością przy zarządzaniu dużymi plikami oraz możliwością obsługi ogromnych woluminów.
Obok wyżej opisanych systemów istnieje wiele innych, mniej popularnych, ale równie interesujących systemów plików.
Warto tutaj wymienić ZFS, który słynie z wysokiej niezawodności i obsługi dużych woluminów danych.
ReiserFS, choć mniej popularny, nadal znajduje zastosowanie w niektórych środowiskach Linux.
Każdy system plików posiada swoje zalety i wady, a wybór odpowiedniego systemu powinien być uzależniony od indywidualnych potrzeb użytkownika.
Dla systemów Windows najlepszym wyborem będzie NTFS, macOS korzysta z nowoczesnego APFS, zaś użytkownicy Linuxa najczęściej sięgają po EXT4 lub Btrfs.
Instalacja systemu Linux Mint jest procesem prostym i przyjemnym.
Dystrybucja jest oparta na Debianie, więc i sam proces instalacji jest bardzo podobny.
Wystarczy przygotować nośnik instalacyjny, uruchomić komputer wskazując nośnik jako źródło, a następnie wyklikać wszystko w wygodnym kreatorze instalacji.
Jak mogłeś przeczytać w poprzednim artykule porównującym środowiska graficzne w systemie Linux Mint, twórcy udostępniają trzy wersje systemu.
Każda z wersji posiada inne GUI, a do wyboru mamy Cinnamon, MATE oraz XFCE.
Jeśli wszystko poszło jak należy i masz już pobrany plik ISO jesteś prawie gotowy do rozpoczęcia instalacji.
Konieczne będzie także przygotowanie nośnika USB do wgrania plików instalacyjnych.
Tutaj polecam skorzystanie z narzędzia Rufus, które wykryje automatycznie podłączoną pamięć USB oraz typ wskazanego pliku ISO.
W razie potrzeby program pobierze dodatkowe pliki z sieci i doda je automatycznie do plików instalacyjnych.
W przypadku systemów Linux polecam narzędzie Etcher, które pozwoli bardzo łatwo wgrać obraz instalacyjny ISO na pamięć USB.
Wystarczy wskazać plik ISO, docelowy dysk i kliknąć przycisk „Flash!”.

Gotowy nośnik USB podpinamy do komputera, na którym chcemy przeprowadzić instalację, a następnie ustawiamy opcje BIOS w taki sposób, aby komputer uruchomił się korzystając z pamięci USB.
Tutaj wszystko zależy od marki i modelu płyty głównej, jaką posiadasz i jeśli nie wiesz jak to zrobić zerknij w instrukcję obsługi.
Wybierz pierwszą opcję i wciśnij Enter na klawiaturze.
W lewym górnym rogu widoczna jest ikona „Install Linux Mint„.
Kliknij na niej dwukrotnie lewym przyciskiem myszy.
Uruchomi się kreator, pozwalający na przeprowadzenie instalacji.
W kolejnym oknie instalator poprosi o wybranie właściwego układu klawiatury.
Układ można wskazać ręcznie, lub wykryć automatycznie poprzez wciśnięcie przycisku „Wykryj układ klawiatury„.
Linux Mint posiada możliwość automatycznego zainstalowania wszystkich niezbędnych kodeków potrzebnych do prawidłowego działania multimediów na komputerze.
Warto zaznaczyć opcję „Zainstaluj kodeki multimediów” aby uniknąć konieczności doinstalowywania ich w przyszłości.
Następny etap jest bardzo ważny.
Instalator poprosi o wybranie opcji konfiguracji dysku.
W kolejnym kroku powinieneś zobaczyć pytanie instalatora, czy na pewno ma wprowadzić zmiany na dysku.
Następnie instalator poprosi o wskazanie właściwej dla Twojej lokalizacji strefy czasowej.
Ważne jest, aby wskazać poprawną strefę - w przeciwnym wypadku system może napotkać problemy w czasie łączenia się z serwerami lub stronami internetowymi (konflikt czasu serwera i klienta).
Kolejny krok jest bardzo ważny.
Po wprowadzeniu danych możemy dodatkowo wybrać opcję - czy system ma logować się automatycznie, czy jednak ma wymagać wpisania hasła (zalecane podawanie hasła).
Możliwe jest także zaszyfrowanie katalogu domowego.
Opcja szyfrowania jest polecana w przypadku korzystania z laptopa, który może wpaść w niepowołane ręce.
Po zakończeniu konfiguracji instalator wyswietli komunikat o konieczności ponownego uruchomienia komputera.
W tym celu należy kliknąć przycisk „Uruchom ponownie komputer”.
Po chwili zostanie wyświetlony komunikat o konieczności odłączenia nośnika instalacyjnego.
Komputer uruchomi się ponownie a na ekranie pojawi się okno logowania.
Podczas pierwszego uruchomienia Linux Mint wita użytkownika oknem powitalnym.
Możliwe jest tutaj ustawienie kilku podstawowych opcji.
Po kliknięciu przycisku „Ruszajmy!’ możliwe jest wybranie koloru akcentów systemowych (np. zielony), trybu urządzenia (u mnie zawsze ciemny) oraz układ panelu (Nowoczesny lub Tradycyjny).
Pobaw się opcjami i wybierz to, co w Twoich oczach wygląda najlepiej.
Kolejne kroki należy skierować koło systemowego zegara.
Powinna być tam ikona w formie clipboard’u z wykrzyknikiem:
Po kliknięciu w ikonkę otworzy się okno „Raporty systemowe„, gdzie możemy uruchomić narzędzie odzyskiwania „Timeshift„.
Osobiście z niego nie korzystam, lecz tutaj możesz uruchomić funkcję i przetestować ją w działaniu.
Zgłoszenie dotyczy brakujących pakietów językowych.
Tutaj klikam przycisk „Zainstaluj pakiety językowe„, co należy potwierdzić hasłem.
Po kliknięciu w ikonę uruchomi się „Menedżer aktualizacji„, w którym możliwe jest zweryfikowanie aktualności systemu i całego oprogramowania.
Najbardziej optymalnym rozwiązaniem jest wskazanie lokalnego serwera lustrzanego (który jest najbliżej naszej lokalizacji).
W moim przypadku będzie to serwer zlokalizowany w Polsce.
Pomimo wyższej prędkości pobierania z jednego z serwerów w Niemczech wybieram ten, który jest bliżej.
Po wskazaniu serwera i kliknięciu „Zastosuj” menu „Zasobów oprogramowania” poprosi o odświeżenie pamięci podręcznej APT.
Po odświeżeniu możliwe jest zaktualizowanie samego „Menedżera aktualizacji„.
Po krótkiej chwili menedżer uruchomi się ponownie i załaduje aktualizacje dostępne dla systemu i oprogramowania.
Wyświetlone zostaną w formie listy, na której możemy odznaczyć te pakiety, których nie chcemy aktualizować.
Domyślnie jednak zaznaczone są wszystkie dostępne aktualizacje.
Menedżer pobierze wszystkie pakiety i zainstaluje je w systemie.
Po zakończeniu instalacji wyświetli komunikat o konieczności ponownego uruchomienia komputera.
W ustawieniach pulpitu możliwe jest zaznaczenie opcji wyświetlania na ekranie skrótów do Komputera, Katalogu domowego oraz Kosza.
To już wszystko, co warto ustawić na komputerze z systemem Linux Mint.
Możliwe jest rozpoczęcie instalowania oprogramowania, przeglądania sieci, otwierania różnych multimediów a sam system jest gotowy do wydajnej pracy.
Zgodnie z tym, system plików musi obsługiwać jedynie metadane plików i katalogów oraz ich wzajemne relacje (zagnieżdżanie katalogów) i przechowywać ciągi bajtów jako zawartości plików.
Być może system plików mógłby po prostu przechowywać metadane w tabeli zawierającej takie informacje jak nazwy i rozmiary plików, czasy modyfikacji itp.
Na tym etapie system plików wciąż wydaje się stosunkowo mało skomplikowany.
Dołóżmy jednak do tego proste mechanizmy blokowania tabeli z metadanymi, by zapewnić jej spójność nawet w chwili, gdy kilka procesów korzysta z niej jednocześnie.
Ale zaraz… jeśli komputer straci zasilanie, lepiej byłoby, gdyby system plików wciąż nadawał się do użytku i zawierał wszystkie dane, gdy ponownie uruchomimy system.
Wszystko powinno być w porządku także w przypadku, gdybyśmy podczas awarii zasilania zapisywali dane na dysk.
Może nie dałoby się odzyskać wszystkiego, co było wówczas zapisywane, ale przynajmniej pozostałe dane powinny być spójne.
Poza tym raczej nie chcielibyśmy czekać godzinami na zakończenie sprawdzania 2 TB nowego dysku przez fsck.
Teraz sprawa zaczyna się komplikować.
Jeśli system plików próbuje zaktualizować metadane, jak może określić, czy fragment tabeli z metadanymi jest prawidłowy, czy był jedynie częściowo zapisany w chwili utraty zasilania?
A co z indeksem tej tabeli?
Możliwa jest sytuacja, że tylko część indeksu została zapisana na dysk, a reszta oczekiwała w pamięci operacyjnej, gdy komputer utracił zasilanie.
Naprawdę bardzo byśmy nie chcieli stracić metadanych, niezależnie od tego, co się stało.
Indeks też musi być ciągle poprawny; w przeciwnym wypadku system plików nie może na nim polegać, więc równie dobrze mogłoby go nie być w ogóle.
Wobec tego może system plików powinien tworzyć dziennik, w którym zapisywałby, jakie zmiany metadanych zostały zapisane w określonych momentach, oraz budować nową tabelę z metadanymi wraz z indeksem, uwzględniając dokonane zmiany.
A po wykonaniu tego wszystkiego - szybko przełączać się na nowy zestaw danych.
W ten sposób system zawsze miałby przynajmniej jedną prawidłową tabelę metadanych z prawidłowym indeksem i mógł przy pomocy dziennika zmian znaleźć się możliwie blisko stanu, w którym nastąpiła awaria zasilania.
Dlatego oprócz spójności danych od systemu plików oczekujemy także, że będzie tak szybki, jak to tylko możliwe.
Jeśli rozpakowujemy 50 MB archiwum lub uruchamiamy rozproszoną kompilację - im prędzej wszystkie czynności są wykonywane, tym lepiej.
Jak dotąd doszliśmy do wniosku, że dobrym pomysłem jest przechowywanie metadanych dotyczących plików i katalogów w abstrakcyjnej tabeli, która byłaby indeksowana w celu szybszego przeszukiwania.
Każdy plik dostaje swój unikalny numer, i-węzeł (ang. i-node).
Wówczas katalog jest listą i-węzłów oznaczających każdy z plików.
By dowiedzieć się, kto jest właścicielem pliku, do jakiej należy grupy i jakie są atrybuty dostępu do pliku, system plików wykonuje kilkukrotne przeszukiwanie tabeli z metadanymi, wykorzystując numery i-węzłów jako wartości klucza.
Jeśli projekt systemu plików ogranicza liczbę dostępnych i-węzłów i rezerwuje ciągłą tabelę dla wszystkich tych węzłów w momencie tworzenia systemu plików, numer i-węzła może być użyty bezpośrednio do wyszukiwania wpisów w tabeli metadanych.
Na przykład, jeśli na stronie pamięci mieści się 128 i-węzłów, to węzeł numer 600 będzie na piątej stronie.
Wadą takiego systemu jest to, że tabela musi być ciągła i zaalokowana na początku.
B-drzewo może być przydatne do implementacji indeksu, który pozwala przeglądać metadane pod kątem numeru i-węzła.
Dla niewtajemniczonych: b-drzewo jest metodą indeksowania, pozwalającą szybko przeglądać kolekcję danych pod kątem wartości lub przedziału wartości klucza.
B-drzewa są stronicową strukturą danych, co oznacza, że dane są grupowane tak, by zajmować całe strony i odnosić się do innych stron.
Wobec tego jeśli numer strony pamięci i klucz mają po 8 bajtów, początkowa strona o rozmiarze 4 KB może przechowywać odniesienia do dwustu pięćdziesięciu sześciu innych stron, z których każda może mieć odniesienia do dwustu pięćdziesięciu sześciu kolejnych itd.
Jak widzimy, nie potrzeba wielu stron, by przechowywać tysiące, a nawet miliony wartości klucza.
Ten spory zasięg każdej strony drzewa oznacza, że możemy znaleźć pojedynczą wartość klucza w b-drzewie z milionem wartości, przeglądając jedynie trzy strony.
Pobranie każdej strony z dysku może wymagać operacji pozycjonowania głowic, która jest bardzo powolna, więc minimalizacja liczby stron do przeszukania jest w tej grze kluczowa.
Dolne elementy b-drzew przechowują dane odpowiadające określonej wartości klucza, które mogą wskazywać jakąś inną strukturę danych lub być właściwymi danymi, jeśli są wystarczająco małe.
W przypadku systemów plików te dane to na przykład czas modyfikacji, właściciel, uprawnienia itp. - są na tyle niewielkie, że mogą być przechowywane bezpośrednio w b-drzewie.
Fakt, że b-drzewa są posortowane, może być wykorzystany przez system plików do zapewnienia wysokiej wydajności.
Całe to indeksowanie jest wspaniałe, ale wciąż nie rozwiązaliśmy problemu występującego przy odcięciu zasilania.
Istnieją dwie główne strategie utrzymywania spójności metadanych systemu plików: używanie dziennika, przechowującego listę zmian, oraz używanie b-drzewa Copy-On-Write (COW).
Jeśli system korzysta z dziennika, musi okresowo zmieniać swoje podstawowe struktury danych i zapisywać to w samym dzienniku.
Księgowanie (korzystanie z dziennika) metadanych jest zaimplementowane w systemach XFS, ext3 i ext4.
B-drzewa COW są wykorzystywane przez Btrfs.
Normalnie, jeśli aktualizujemy zawartość b-drzewa, strona pamięci zawierająca wartość klucza, której dotyczy zmiana, jest kopiowana do pamięci operacyjnej, tam zmieniana i potem z powrotem zapisywana na dysk twardy.
W b-drzewie COW wstawianie nowej wartości pozostawia stare drzewo nienaruszone i tworzy kopię strony, która ma być zmieniona.
By wstawić potem tę stronę do drzewa, kopie wszystkich stron nadrzędnych także muszą zostać wykonane.
Z powodów wydajnościowych system plików wykorzystujący b-drzewa COW próbuje wykonywać możliwie wiele operacji na drzewie w pamięci RAM i tylko okresowo synchronizować skopiowane strony, tworząc nowy korzeń drzewa.
Migawki dają możliwość zamontowania tylko do odczytu systemu plików w takim stanie, w jakim znajdował się w konkretnym momencie.
Przykładowo możemy zobaczyć, w jakim stanie znajdował się nasz katalog domowy miesiąc temu.
Jedno polecenie magistrali SATA może być użyte do upewnienia się, że dane znajdują się na talerzu dysku, a nie jeszcze w buforze.
Niestety, tym poleceniem jest polecenie opróżnienia całej pamięci podręcznej.
Nie możemy powiedzieć: „Upewnij się, że dane z poleceń 12, 45 i 99 są już na dysku”, a przynajmniej nie na każdym sprzęcie.
Musimy zakomunikować: „Zapisz na dysku wszystko, co masz w buforze”.
Opróżnianie bufora jest znane jako używanie barier dyskowych; systemy ext4, Btrfs i XFS domyślnie wykorzystują ten mechanizm.
Chociaż operacje wiążące się z masową modyfikacją metadanych, takie jak tworzenie lub usuwanie dużej liczby plików, będą wolniejsze, system plików będzie dużo bardziej odporny na problemy spowodowane utratą zasilania.
W tych systemach możemy wyłączyć bariery, jeśli chcemy, a ponadto musimy wiedzieć, że te bariery mogą nie działać z mechanizmem mapowania urządzeń (ang.
Da się zauważyć, że włączenie mechanizmu barier może spowolnić operacje związane z metadanymi i synchronizację systemu plików nawet dziesięciokrotnie.
Istnieje wiele sposobów przechowywania na dysku bajtów składających się na plik.
System plików, zapisując dane, musi wiedzieć, gdzie one lądują, by móc trafić do nich w przyszłości.
W przypadku małych plików lista bloków może być zapisana razem z danymi i-węzła.
Oprócz przechowywania listy bloków inną wadą alokacji bloków o stałym rozmiarze jest fakt, że wielkie pliki składają się z wielu bloków, które niekoniecznie muszą znajdować się na dysku fizycznie blisko siebie.
Drugie podejście, oparte na ekstentach (ang. extent), skupia się na ciągłych porcjach bajtów.
W idealnym świecie pojedynczy film o rozmiarze 10 GB mógłby być zapisany w jednym, ciągłym przedziale bajtów na dysku (czyli w jednym ekstencie).
Jak zapewne zauważyliśmy, użycie ekstentów i minimalna fragmentacja systemu plików powinny pozwolić na usunięcie dużego pliku znacznie szybciej niż przy alokacji bloków.
Dave Chinner w swojej prezentacji podczas Ottawa Linux Symposium 2006 pokazał, że usunięcie jednego pliku 60 GB wymagało pięćdziesięciu sekund w systemie ext3, dwóch sekund w ext4 i czterech dziesiątych sekundy w XFS.
Piętą achillesową takiego podejścia jest zjawisko fragmentacji plików.
Patologicznym przypadkiem jest pobieranie obrazu dystrybucji Linuksa za pomocą sieci peer-to-peer.
W miarę pobierania pojawiają się drobne fragmenty pliku znajdujące się pod różnymi offsetami i są zapisywane przez system plików.
By zapobiec fragmentacji plików, system plików może unikać zapisywania danych na dysku od razu; taka strategia nazywa się opóźnioną alokacją (ang. delayed allocation).
Na przykład, program może chcieć zapisać dane, otwierając plik, następnie w pętli wielokrotnie zapisując porcje danych po 64 KB i w końcu zamykając plik.
Jeśli system plików buforuje dane do chwili zamknięcia pliku przez program, może dokładnie określić, ile zajmą dane przed fizycznym zapisaniem ich na dysk.
System plików z ekstentami może spróbować znaleźć pojedynczy fragment o wielkości najbliższej pożądanej i zapisać tam cały plik za jednym razem.
W ten sposób nie tylko unika fragmentacji pliku, ale także wykonuje operację pozycjonowania głowic tylko raz.
Zjawisko fragmentacji plików występuje nawet przy korzystaniu z pomocy opóźnionej alokacji i fallocate.
Na przykład jeśli system plików zapełni się w dziewięćdziesięciu procentach, do zapisania dużego pliku może być potrzebny więcej niż jeden ekstent, więc fragmentacja będzie musiała wystąpić.
W systemie plików XFS możemy użyć programu xfs_fsr, służącego do optymalizacji alokacji miejsca dla plików.
Jedną z lepszych funkcji tego narzędzia jest możliwość określenia, jak długo ma działać.
xfs_fsr sam pamięta, gdzie skończył, gdy zostaje uruchomiony ponownie.
System plików ext4 dopiero zyskuje możliwość defragmentacji online.
Majac w głowie te wszystkie drzewa, COW b-drzewa i dzienniki, możemy zastanawiać się, który system będzie najlepszy.
Najprostsza odpowiedź brzmi: to zależy.
Systemy z rodziny ext przechowują i-węzły w tablicy, XFS w - b-drzewie, a Btrfs używa b-drzewa COW do wszystkiego.
Ext3, ext4 i XFS do zachowania spójności w przypadku utraty zasilania wykorzystują dziennik.
Systemy z rodziny ext lubią od czasu do czasu podczas uruchamiania systemu przeprowadzić krótkie sprawdzanie za pomocą fsck.
Wspólnym dla wszystkich systemów sposobem na przyzwoitą wydajność jest unikanie zbyt wielkiego zapełnienia dysku.
By zmniejszyć liczbę wystąpień „wyścigów blokowania”, wiele systemów plików jest dzielonych na mniejsze części.
Na przykład system XFS dzieli się na wiele „grup alokacji”, które działają jak samodzielne, niewielkie systemy plików.
To pozwala systemowi aktualizować dane współbieżnie, ponieważ zmiany w jednej grupie nie blokują pozostałych.
Jedyne, na co powinniśmy uważać, to ryzyko podzielenia jednego dużego pliku pomiędzy wiele grup alokacji.
Wiele systemów plików pozwala podczas formatowania wybrać rozmiar i-węzłów.
Jeśli zamierzamy używać rozszerzonych atrybutów i oczekujesz wysokiej wydajności za cenę niewielkiego zmniejszenia wolnej przestrzeni, możemy ustawić rozmiar i-węzłów większy niż domyślny.
Paradoksalnie, jeśli intensywnie korzystamy z rozszerzonych atrybutów, podwojenie rozmiaru i-węzłów może sprawić, że system plików będzie zużywał mniej przestrzeni na swoje metadane, i jednocześnie zwiększyć wydajność.
Przykładowo, w XFS lista ekstentów zawierająca mniej niż dziewiętnaście pozycji mieści się do i-węzła o domyślnym rozmiarze.
Po tym, jak dowiedzieliśmy się, jak Btrfs używa b-drzew z COW, łatwo zrozumieć całą ekscytację wokół tego systemu - systemu, który używa ekstentów i pozwala bardzo szybko tworzyć migawki i klony systemu plików.
Główną wadą Btrfs jest to, że jest on relatywnie nowy.
Wobec tego główną zaletę systemów z rodziny ext stanowi fakt, że są one dostępne od bardzo dawna.
Z drugiej strony system XFS znajduje się w jądrze od czasów serii 2.4, a dzięki ekstentom bardzo dobrze radzi sobie z dużymi plikami.
Podsumowując, jeśli będziemy przechowywali duże pliki i chcemy mieć możliwość ich defragmentacji, XFS to wspaniały wybór.
Jeśli dynamiczna alokacja i-węzłów i ekstenty nas nie ekscytują, wybierzmy ext3 - rozwiązanie, które przetrwało próbę czasu.
Ex...
| System | Najważniejsze cechy |
|---|---|
| ext3 | dziennik, sprawdzanie fsck, rozwiązanie, które przetrwało próbę czasu |
| ext4 | wyższa wydajność, większe woluminy, ekstenty, dziennik, defragmentacja online |
| Btrfs | b-drzewa COW, migawki, klony systemu plików, deduplikacja danych |
| XFS | b-drzewa, grupy alokacji, duże pliki, ogromne woluminy, defragmentacja |
| NTFS | dziennik, uprawnienia, duże woluminy, standard Windows |
| FAT32 | niemal pełna kompatybilność, ale ograniczenie 4 GB |
| APFS | szyfrowanie, klonowanie, migawki, optymalizacja dla SSD |
Jeśli wszystko poszło jak należy i masz już pobrany plik ISO jesteś prawie gotowy do rozpoczęcia instalacji.
Konieczne będzie także przygotowanie nośnika USB do wgrania plików instalacyjnych.
Tutaj polecam skorzystanie z narzędzia Rufus, które wykryje automatycznie podłączoną pamięć USB oraz typ wskazanego pliku ISO.
W przypadku systemów Linux polecam narzędzie Etcher, które pozwoli bardzo łatwo wgrać obraz instalacyjny ISO na pamięć USB.
Wystarczy wskazać plik ISO, docelowy dysk i kliknąć przycisk „Flash!”.
tags: #system #plikow #podczas #instalacji #linux
About the author