Ten artykuł jest przeznaczony do bardzo wysokopoziomowego omówienia koncepcji systemu plików w Linuksie. Nie ma on być niskopoziomowym opisem działania konkretnego systemu plików, takiego jak EXT4, ani samouczkiem poleceń systemu plików.
Każdy komputer ogólnego przeznaczenia musi przechowywać dane różnych typów na dysku twardym (HDD) lub jego odpowiedniku, takim jak pamięć USB. Jest ku temu kilka powodów. Po pierwsze, pamięć RAM traci swoją zawartość po wyłączeniu komputera. Istnieją nieulotne typy pamięci RAM, które mogą zachować przechowywane w niej dane po odłączeniu zasilania (takie jak pamięć flash RAM używana w pamięciach USB i dyskach półprzewodnikowych), ale pamięć flash RAM jest znacznie droższa niż standardowa, lotna pamięć RAM, taka jak DDR3 i inne, podobne typy.
Drugim powodem, dla którego dane muszą być przechowywane na dyskach twardych, jest to, że nawet standardowa pamięć RAM jest nadal droższa niż przestrzeń dyskowa. Zarówno koszty pamięci RAM, jak i dysków gwałtownie spadają, ale pamięć RAM nadal przoduje pod względem kosztu na bajt. Szybka kalkulacja kosztu na bajt, oparta na kosztach 16 GB pamięci RAM i 2 TB dysku twardego, pokazuje, że pamięć RAM jest około 71 razy droższa w przeliczeniu na jednostkę niż dysk twardy. Typowy koszt pamięci RAM wynosi około 0,00000043743750 USD za bajt dzisiaj.
Dla szybkiej notatki historycznej, aby umieścić obecne koszty RAM w perspektywie, w bardzo wczesnych dniach komputerów, jeden rodzaj pamięci był oparty na kropkach na ekranie CRT. To było bardzo drogie w około $1.00 za bit!
Definicje
Możesz usłyszeć ludzi mówiących o systemach plików w wielu różnych i mylących sposobów. Samo słowo może mieć wiele znaczeń, a ty możesz być zmuszony do rozpoznania właściwego znaczenia z kontekstu dyskusji lub dokumentu.
Postaram się zdefiniować różne znaczenia słowa „system plików” w oparciu o to, jak zaobserwowałem jego użycie w różnych okolicznościach. Zauważ, że podczas próby dostosowania się do standardowych „oficjalnych” znaczeń, moim zamiarem jest zdefiniowanie terminu w oparciu o jego różne zastosowania. Te znaczenia będą zbadane bardziej szczegółowo w następujących sekcjach tego artykułu.
- Cała struktura katalogów Linuksa zaczynająca się od górnego (/) katalogu głównego.
- Określony typ formatu przechowywania danych, taki jak EXT3, EXT4, BTRFS, XFS, i tak dalej. Linux obsługuje prawie 100 typów systemów plików, w tym kilka bardzo starych, jak również kilka najnowszych. Każdy z tych typów systemów plików używa własnych struktur metadanych do określenia sposobu przechowywania danych i uzyskiwania do nich dostępu.
- Partycja lub wolumin logiczny sformatowany z określonym typem systemu plików, który może być zamontowany na określonym punkcie montowania w systemie plików Linuksa.
Podstawowe funkcje systemu plików
Przechowywanie na dysku jest koniecznością, która niesie ze sobą pewne interesujące i nieuchronne szczegóły. Oczywiście, system plików jest zaprojektowany, aby zapewnić miejsce na nieulotne przechowywanie danych; to jest jego podstawowa funkcja. Jednak istnieje wiele innych ważnych funkcji, które wynikają z tego wymogu.
Wszystkie systemy plików muszą zapewnić przestrzeń nazw – to znaczy, nazewnictwo i metodologię organizacyjną. To definiuje, jak plik może być nazwany, w szczególności długość nazwy pliku i podzbiór znaków, które mogą być używane do nazw plików z całkowitego zestawu znaków dostępnych. Określa również logiczną strukturę danych na dysku, taką jak użycie katalogów do organizowania plików zamiast po prostu łączenia ich wszystkich razem w jeden, ogromny zlepek plików.
Po zdefiniowaniu przestrzeni nazw konieczna jest struktura metadanych, aby zapewnić logiczne podstawy tej przestrzeni nazw. Obejmuje ona struktury danych wymagane do obsługi hierarchicznej struktury katalogów; struktury do określania, które bloki przestrzeni na dysku są używane, a które są dostępne; struktury, które pozwalają na utrzymanie nazw plików i katalogów; informacje o plikach, takie jak ich rozmiar i czasy, w których zostały utworzone, zmodyfikowane lub ostatnio udostępnione; oraz lokalizacja lub lokalizacje danych należących do pliku na dysku. Inne metadane służą do przechowywania wysokopoziomowych informacji o podziałach dysku, takich jak woluminy logiczne i partycje. Te metadane wyższego poziomu i struktury, które reprezentują, zawierają informacje opisujące system plików przechowywane na dysku lub partycji, ale są oddzielone i niezależne od metadanych systemu plików.
Systemy plików wymagają również interfejsu programowania aplikacji (API), który zapewnia dostęp do wywołań funkcji systemowych, które manipulują obiektami systemu plików, takimi jak pliki i katalogi. API zapewnia dla zadań, takich jak tworzenie, przenoszenie i usuwanie plików. Zapewnia również algorytmy, które określają takie rzeczy jak to, gdzie plik jest umieszczony w systemie plików. Takie algorytmy mogą uwzględniać cele takie jak szybkość lub minimalizacja fragmentacji dysku.
Nowoczesne systemy plików zapewniają również model bezpieczeństwa, który jest schematem definiowania praw dostępu do plików i katalogów. Model bezpieczeństwa systemu plików Linuksa pomaga zapewnić, że użytkownicy mają dostęp tylko do własnych plików, a nie do plików innych osób lub samego systemu operacyjnego.
Ostatnim elementem składowym jest oprogramowanie wymagane do realizacji wszystkich tych funkcji. Linux wykorzystuje dwuczęściową implementację oprogramowania jako sposób na zwiększenie wydajności zarówno systemu, jak i programistów.
Rysunek 1: Dwuczęściowa implementacja oprogramowania systemu plików w systemie Linux.
Pierwszą częścią tej dwuczęściowej implementacji jest wirtualny system plików systemu Linux. Ten wirtualny system plików zapewnia pojedynczy zestaw poleceń dla jądra i programistów, aby uzyskać dostęp do wszystkich typów systemów plików. Oprogramowanie wirtualnego systemu plików wywołuje specyficzny sterownik urządzenia wymagany do interfejsu z różnymi typami systemów plików. Specyficzne dla systemu plików sterowniki urządzeń są drugą częścią implementacji. Sterownik urządzenia interpretuje standardowy zestaw poleceń systemu plików do tych specyficznych dla typu systemu plików na partycji lub woluminu logicznego.
Struktura katalogów
Jako zwykle bardzo zorganizowany Panna, lubię rzeczy przechowywane w mniejszych, zorganizowanych grup, a nie w jednym wielkim wiadrze. Używanie katalogów pomaga mi być w stanie przechowywać, a następnie zlokalizować pliki, które chcę, kiedy ich szukam. Katalogi są również znane jako foldery, ponieważ mogą być postrzegane jako foldery, w których pliki są przechowywane w rodzaju fizycznej analogii pulpitu.
W Linuksie i wielu innych systemach operacyjnych, katalogi mogą być zorganizowane w drzewo jak hierarchii. Struktura katalogów w Linuksie jest dobrze zdefiniowana i udokumentowana w Linux Filesystem Hierarchy Standard (FHS). Odwoływanie się do tych katalogów podczas uzyskiwania do nich dostępu odbywa się za pomocą sekwencyjnie głębszych nazw katalogów połączonych ukośnikami (/), takich jak /var/log i /var/spool/mail. Są to tzw. ścieżki.
Następująca tabela zawiera bardzo krótką listę standardowych, dobrze znanych i zdefiniowanych katalogów najwyższego poziomu systemu Linux oraz ich przeznaczenie.
Katalogi | Opis |
---|---|
/ (root filesystem) | Korzeń systemu plików jest katalogiem najwyższego poziomu systemu plików. Musi zawierać wszystkie pliki wymagane do uruchomienia systemu Linux, zanim inne systemy plików zostaną zamontowane. Musi zawierać wszystkie wymagane pliki wykonywalne i biblioteki wymagane do uruchomienia pozostałych systemów plików. Po uruchomieniu systemu, wszystkie inne systemy plików są montowane na standardowych, dobrze zdefiniowanych punktach montowania jako podkatalogi głównego systemu plików. |
/bin | Katalog /bin zawiera pliki wykonywalne użytkownika. |
/boot | Zawiera statyczny bootloader oraz pliki wykonywalne i konfiguracyjne jądra wymagane do uruchomienia komputera z systemem Linux. |
/dev | Katalog ten zawiera pliki urządzeń dla każdego urządzenia sprzętowego podłączonego do systemu. Nie są to sterowniki urządzeń, a raczej pliki reprezentujące każde urządzenie w komputerze i ułatwiające dostęp do tych urządzeń. |
/etc | Zawiera lokalne pliki konfiguracyjne systemu dla komputera-hosta. |
/home | Katalog domowy przechowujący pliki użytkownika. Każdy użytkownik ma podkatalog w /home. |
/lib | Zawiera pliki bibliotek współdzielonych, które są wymagane do uruchomienia systemu. |
/media | Miejsce do montowania zewnętrznych wymiennych urządzeń multimedialnych, takich jak dyski USB, które mogą być podłączone do hosta. |
/mnt | Tymczasowy punkt montowania dla zwykłych systemów plików (nie nośników wymiennych), który może być używany podczas gdy administrator naprawia lub pracuje nad systemem plików. |
/opt | Pliki opcjonalne, takie jak programy użytkowe dostarczane przez producenta, powinny znajdować się tutaj. |
/root | To nie jest system plików root (/). Jest to katalog domowy dla użytkownika root. |
/sbin | Pliki binarne systemu. Są to pliki wykonywalne używane do administrowania systemem. |
/tmp | Katalog tymczasowy. Używany przez system operacyjny i wiele programów do przechowywania plików tymczasowych. Użytkownicy mogą również tymczasowo przechowywać tu pliki. Należy pamiętać, że pliki przechowywane w tym miejscu mogą zostać usunięte w dowolnym momencie bez wcześniejszego powiadomienia. |
/usr | Są to udostępniane, przeznaczone tylko do odczytu pliki, w tym wykonywalne binaria i biblioteki, pliki man i inne rodzaje dokumentacji. |
/var | Pliki danych zmiennych są przechowywane w tym miejscu. Mogą to być takie rzeczy, jak pliki dziennika, MySQL i inne pliki baz danych, pliki danych serwera WWW, skrzynki pocztowe i wiele innych. |
Katalogi i ich podkatalogi pokazane w tabeli 1, wraz z ich podkatalogami, które mają tło w kolorze teal, są uważane za integralną część głównego systemu plików. Oznacza to, że nie mogą być utworzone jako oddzielny system plików i zamontowane podczas uruchamiania systemu. Dzieje się tak, ponieważ one (a konkretnie ich zawartość) muszą być obecne w czasie startu systemu, aby system mógł się poprawnie uruchomić.
Katalogi /media i /mnt są częścią głównego systemu plików, ale nigdy nie powinny zawierać żadnych danych. Są to po prostu tymczasowe punkty montowania.
Pozostałe katalogi, te, które nie mają koloru tła w Tabeli 1, nie muszą być obecne podczas sekwencji startowej, ale będą montowane później, podczas sekwencji startowej, która przygotowuje hosta do wykonywania użytecznej pracy.
Pewnie zapoznaj się z oficjalną stroną internetową Linux Filesystem Hierarchy Standard (FHS), aby uzyskać szczegóły na temat każdego z tych katalogów i ich wielu podkatalogów. Wikipedia ma również dobry opis FHS. Ten standard powinien być przestrzegany tak ściśle jak to możliwe, aby zapewnić spójność operacyjną i funkcjonalną. Niezależnie od typów systemów plików używanych na hoście, ta hierarchiczna struktura katalogów jest taka sama.
Ujednolicona struktura katalogów systemu Linux
W niektórych systemach operacyjnych dla komputerów innych niż Linux, jeśli istnieje wiele fizycznych dysków twardych lub wiele partycji, każdy dysk lub partycja ma przypisaną literę dysku. Konieczne jest, aby wiedzieć, na którym dysku twardym znajduje się plik lub program, na przykład C: lub D:. Następnie podajemy literę dysku jako polecenie, na przykład D:, aby przejść na dysk D:, a następnie używamy polecenia cd, aby przejść do właściwego katalogu w celu zlokalizowania żądanego pliku. Każdy dysk twardy ma swoje oddzielne i kompletne drzewo katalogów.
System plików Linuksa łączy wszystkie fizyczne dyski twarde i partycje w jedną strukturę katalogów. Wszystko zaczyna się na samej górze – w katalogu głównym (/). Wszystkie inne katalogi i ich podkatalogi znajdują się pod pojedynczym katalogiem głównym Linuksa. Oznacza to, że istnieje tylko jedno drzewo katalogów, w którym można szukać plików i programów.
To może działać tylko dlatego, że system plików, takich jak /home, /tmp, /var, /opt, lub /usr mogą być tworzone na oddzielnych dyskach twardych, innej partycji, lub innego woluminu logicznego z / (root) systemu plików, a następnie być montowane na mountpoint (katalog) jako część drzewa głównego systemu plików. Nawet dyski wymienne, takie jak dysk USB lub zewnętrzny dysk twardy USB lub ESATA zostaną zamontowane na głównym systemie plików i staną się integralną częścią tego drzewa katalogów.
Jeden dobry powód, aby to zrobić jest widoczne podczas aktualizacji z jednej wersji dystrybucji Linuksa do innego, lub zmiany z jednej dystrybucji do innej. Ogólnie, poza wszelkimi narzędziami do aktualizacji, takimi jak dnf-upgrade w Fedorze, mądrze jest od czasu do czasu sformatować dysk(i) twardy(e) zawierający(e) system operacyjny podczas uaktualnienia, aby pozytywnie usunąć wszelkie okruchy, które nagromadziły się z czasem. Jeśli /home jest częścią głównego systemu plików, zostanie również sformatowany i będzie musiał być przywrócony z kopii zapasowej. Posiadając /home jako oddzielny system plików, będzie on znany programowi instalacyjnemu jako oddzielny system plików i formatowanie go może być pominięte. Może to również dotyczyć /var, gdzie przechowywane są bazy danych, skrzynki pocztowe, strony WWW i inne zmienne dane użytkownika i systemu.
Istnieją inne powody utrzymywania pewnych części drzewa katalogów Linuksa jako oddzielnych systemów plików. Na przykład, dawno temu, kiedy nie byłem jeszcze świadomy potencjalnych problemów związanych z posiadaniem wszystkich wymaganych katalogów Linuksa jako część / (root) systemu plików, udało mi się wypełnić mój katalog domowy z dużą liczbą bardzo dużych plików. Ponieważ ani katalog /home, ani katalog /tmp nie były oddzielnymi systemami plików, ale po prostu podkatalogami systemu plików root, cały system plików root zapełnił się. System operacyjny nie miał już miejsca na tworzenie plików tymczasowych ani na rozszerzanie istniejących plików danych. Na początku programy użytkowe zaczęły narzekać, że nie ma miejsca na zapisywanie plików, a potem sam system operacyjny zaczął się bardzo dziwnie zachowywać. Uruchomienie systemu w trybie pojedynczego użytkownika i wyczyszczenie szkodliwych plików w moim katalogu domowym pozwoliło mi ponownie rozpocząć pracę. Następnie przeinstalowałem Linuksa używając całkiem standardowej konfiguracji z wieloma systemami plików i byłem w stanie zapobiec całkowitym awariom systemu od wystąpienia ponownie.
Miałem kiedyś sytuację, w której host Linuksa nadal działał, ale uniemożliwiał użytkownikowi zalogowanie się przy użyciu pulpitu GUI. Byłem w stanie zalogować się przy użyciu interfejsu wiersza poleceń (CLI) lokalnie przy użyciu jednej z wirtualnych konsol, oraz zdalnie przy użyciu SSH. Problem polegał na tym, że system plików /tmp zapełnił się i niektóre pliki tymczasowe wymagane przez pulpit GUI nie mogły zostać utworzone podczas logowania. Ponieważ logowanie za pomocą CLI nie wymagało tworzenia plików w katalogu /tmp, brak miejsca w tym katalogu nie uniemożliwił mi zalogowania się za pomocą CLI. W tym przypadku, katalog /tmp był oddzielnym systemem plików i było dużo wolnego miejsca w grupie woluminów, której częścią był wolumin logiczny /tmp. Po prostu rozszerzyłem wolumen logiczny /tmp do rozmiaru, który pomieścił moje świeże zrozumienie ilości miejsca na pliki tymczasowe potrzebne na tym hoście i problem został rozwiązany. Zauważ, że to rozwiązanie nie wymagało restartu, i jak tylko system plików /tmp został powiększony, użytkownik był w stanie zalogować się na pulpit.
Inna sytuacja miała miejsce, gdy pracowałem jako administrator laboratorium w jednej z dużych firm technologicznych. Jeden z naszych programistów zainstalował aplikację w niewłaściwej lokalizacji (/var). Aplikacja zawieszała się, ponieważ system plików /var był pełny, a pliki dziennika, które są przechowywane w /var/log na tym systemie plików, nie mogły być dołączane do nowych wiadomości z powodu braku miejsca. Jednak system działał nadal, ponieważ krytyczne systemy plików / (root) i /tmp nie zostały zapełnione. Usunięcie szkodliwej aplikacji i ponowne zainstalowanie jej w systemie plików /opt rozwiązało ten problem.
Typy systemów plików
Linux obsługuje odczyt około 100 typów partycji; może tworzyć i zapisywać tylko do kilku z nich. Ale jest możliwe – i bardzo powszechne – montowanie systemów plików różnych typów na tym samym głównym systemie plików. W tym kontekście mówimy o systemach plików w sensie struktur i metadanych wymaganych do przechowywania i zarządzania danymi użytkownika na partycji dysku twardego lub woluminu logicznego. Pełna lista typów partycji systemu plików rozpoznawanych przez linuksowe polecenie fdisk jest podana tutaj, abyś mógł się zorientować, jak wysoki stopień kompatybilności ma Linux z wieloma typami systemów.
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT
Głównym celem wspierania zdolności do odczytu tak wielu typów partycji jest umożliwienie kompatybilności i przynajmniej pewnej współdziałania z systemami plików innych systemów komputerowych. Wybory dostępne podczas tworzenia nowego systemu plików w Fedorze są pokazane na poniższej liście.
- btrfs
- cramfs
- ext2
- ext3
- ext4
- fat
- gfs2
- hfsplus
- minix
- msdos
- ntfs
- reiserfs
- vfat
- xfs
.
Inne dystrybucje wspierają tworzenie różnych typów systemów plików. Na przykład, CentOS 6 obsługuje tworzenie tylko tych systemów plików, które są zaznaczone pogrubioną czcionką na powyższej liście.
Montowanie
Termin „montować” system plików w Linuksie odnosi się do wczesnych dni informatyki, kiedy to taśma lub pakiet dysków wymiennych musiały być fizycznie zamontowane na odpowiednim urządzeniu napędowym. Po fizycznym umieszczeniu na dysku, system plików na dysku byłby logicznie zamontowany przez system operacyjny, aby zawartość była dostępna dla systemu operacyjnego, programów użytkowych i użytkowników.
Punkt montowania jest po prostu katalogiem, jak każdy inny, który jest tworzony jako część głównego systemu plików. Tak więc, na przykład, domowy system plików jest montowany na katalogu /home. Systemy plików mogą być montowane w punktach montowania na innych nie-korzeniowych systemach plików, ale jest to mniej powszechne.
Korzeniowy system plików Linuksa jest montowany na katalogu głównym (/) bardzo wcześnie w sekwencji startowej. Inne systemy plików są montowane później, przez programy startowe Linuksa, albo przez rc w SystemV lub przez systemd w nowszych wydaniach Linuksa. Montowanie systemów plików podczas procesu startowego jest zarządzane przez plik konfiguracyjny /etc/fstab. Łatwo zapamiętać, że fstab oznacza „tablicę systemu plików” i jest to lista systemów plików, które mają być montowane, ich wyznaczone punkty montowania i wszelkie opcje, które mogą być potrzebne dla konkretnych systemów plików.
Systemy plików są montowane na istniejącym katalogu/punkcie montowania za pomocą polecenia mount. Ogólnie rzecz biorąc, każdy katalog, który jest używany jako punkt montowania powinien być pusty i nie mieć żadnych innych plików zawartych w nim. Linux nie powstrzyma użytkownika przed montowaniem jednego systemu plików na innym, który już istnieje lub na katalogu zawierającym pliki. Jeśli zamontujesz system plików na istniejącym katalogu lub systemie plików, oryginalna zawartość zostanie ukryta i tylko zawartość nowo zamontowanego systemu plików będzie widoczna.
Podsumowanie
Mam nadzieję, że niektóre z możliwych nieporozumień wokół terminu system plików zostały wyjaśnione przez ten artykuł. Zajęło mi dużo czasu i bardzo pomocnego mentora, aby naprawdę zrozumieć i docenić złożoność, elegancję i funkcjonalność systemu plików Linuksa we wszystkich jego znaczeniach.
Jeśli masz pytania, proszę dodaj je do komentarzy poniżej, a ja postaram się na nie odpowiedzieć.
Następny miesiąc
Innym ważnym pojęciem jest to, że dla Linuksa wszystko jest plikiem. Ta koncepcja ma kilka interesujących i ważnych praktycznych zastosowań dla użytkowników i administratorów systemu. Powodem, dla którego o tym wspominam, jest to, że możesz chcieć przeczytać mój artykuł „Wszystko jest plikiem” przed artykułem, który planuję na przyszły miesiąc na temat katalogu /dev.
.