Cześć wszystkim! Nadal uruchamiamy nowe transmisje kursów, w których już się zakochałeś, a teraz spieszymy z ogłoszeniem, że uruchamiamy nowy zestaw kursów
Wirtualne systemy plików służą jako rodzaj magicznej abstrakcji, która pozwala filozofii Linuksa powiedzieć, że „wszystko jest plikiem”.
Co to jest system plików? Na podstawie słów jednego z pierwszych współpracowników i autorów Linuksa
Podstawy systemu plików
Jądro Linuksa ma pewne wymagania dotyczące jednostki, którą można uznać za system plików. Musi wdrożyć metody open()
, read()
и write()
dla trwałych obiektów, które mają nazwy. Z obiektowego punktu widzenia
Jeśli możemy otwierać, odczytywać i zapisywać w jednostce, to ta jednostka jest uważana za plik, jak widać na przykładzie w konsoli powyżej.
Zjawisko VFS tylko podkreśla uniksową obserwację, że „wszystko jest plikiem”. Pomyśl, jakie to dziwne, że ten mały przykład /dev/console powyżej pokazuje, jak faktycznie działa konsola. Rysunek przedstawia interaktywną sesję Bash. Wysłanie ciągu do konsoli (wirtualnego urządzenia konsoli) wyświetla go na wirtualnym ekranie. VFS ma inne, jeszcze dziwniejsze właściwości. Na przykład umożliwia wyszukiwanie według
Znane systemy, takie jak ext4, NFS i /proc, pełnią trzy ważne funkcje w strukturze danych C zwanej read()
jeden system plików, a następnie użyj metody write ()
inny system plików do wyprowadzania danych.
Definicje funkcji należące do podstawowych typów VFS znajdują się w plikach fs/
zawierać określone systemy plików. Rdzeń zawiera również podmioty, takie jak cgroups
, /dev
и tmpfs
, które są wymagane podczas procesu rozruchu i dlatego są zdefiniowane w podkatalogu jądra init/
. Zauważ, że cgroups
, /dev
и tmpfs
nie wywołuj funkcji „wielkiej trójki”. file_operations
, ale bezpośrednio odczytywać i zapisywać w pamięci.
Poniższy diagram pokazuje, w jaki sposób przestrzeń użytkownika uzyskuje dostęp do różnych typów systemów plików powszechnie montowanych w systemach Linux. Struktury nie pokazane pipes
, dmesg
и POSIX clocks
, które również implementują strukturę file_operations
, dostępne przez warstwę VFS.
VFS to „warstwa opakowująca” między wywołaniami systemowymi a implementacjami niektórych file_operations
Jak na przykład ext4
и procfs
. Funkcje file_operations
może wchodzić w interakcje ze sterownikami urządzeń lub urządzeniami dostępu do pamięci. tmpfs
, devtmpfs
и cgroups
nie używaj file_operations
, ale bezpośrednio uzyskać dostęp do pamięci.
Istnienie VFS zapewnia możliwość ponownego wykorzystania kodu, ponieważ podstawowe metody związane z systemami plików nie muszą być ponownie implementowane przez każdy typ systemu plików. Ponowne wykorzystanie kodu jest powszechną praktyką wśród inżynierów oprogramowania! Jeśli jednak kod wielokrotnego użytku zawiera
/tmp: Prosta wskazówka
Łatwym sposobem wykrycia obecności VFS w systemie jest wpisanie mount | grep -v sd | grep -v :/
, który pokaże wszystkie zamontowane (mounted
) systemów plików, które nie są rezydujące na dysku i nie są NFS, co jest prawdą na większości komputerów. Jeden z wymienionych wierzchowców (mounts
) VFS niewątpliwie /tmp
, prawo?
Każdy zna to miejsce do przechowywania / tmp
na nośniku fizycznym - szaleństwo!
Dlaczego przechowywanie jest niepożądane /tmp
na nośnikach fizycznych? Ponieważ pliki w /tmp
są tymczasowe, a urządzenia pamięci masowej są wolniejsze niż pamięć, w której tworzony jest tmpfs. Ponadto nośniki fizyczne są bardziej podatne na zużycie podczas nadpisywania niż pamięć. Wreszcie, pliki w /tmp mogą zawierać poufne informacje, więc ich usuwanie przy każdym ponownym uruchomieniu jest podstawową funkcją.
Niestety, niektóre skrypty instalacyjne dystrybucji Linuksa domyślnie tworzą /tmp na urządzeniu pamięci masowej. Nie rozpaczaj, jeśli stało się to również z twoim systemem. Wykonaj kilka prostych instrukcji z tmpfs
staje się niedostępny do innych celów. Innymi słowy, w systemie z gigantycznym tmpfs i dużymi plikami może zabraknąć pamięci i ulec awarii. Kolejna wskazówka: podczas edycji pliku /etc/fstab
, pamiętaj, że musi kończyć się znakiem nowej linii, w przeciwnym razie system się nie uruchomi.
/proc i /sys
Oprócz /tmp
, VFS (wirtualne systemy plików), które są najbardziej znane użytkownikom Linuksa /proc
и /sys
, (/dev
znajduje się w pamięci współdzielonej i nie ma file_operations
). Dlaczego akurat te dwa komponenty? Przyjrzyjmy się temu zagadnieniu.
procfs
tworzy migawkę jądra i procesów, które monitoruje userspace
, /proc
jądro drukuje informacje o tym, co ma do dyspozycji, takie jak przerwania, pamięć wirtualna i harmonogram. Oprócz, /proc/sys
to miejsce, w którym znajdują się parametry skonfigurowane za pomocą polecenia sysctl
, dostępne dla userspace
. Statusy i statystyki poszczególnych procesów wyświetlane są w katalogach /proc/
.
Tutaj /proc/meminfo
jest pustym plikiem, który mimo wszystko zawiera cenne informacje.
Zachowanie /proc
files pokazuje, jak różne mogą być systemy plików dysków VFS. Po jednej stronie, /proc/meminfo
zawierają informacje, które można wyświetlić za pomocą polecenia free
. Z drugiej strony jest pusty! Jak to działa? Sytuacja przypomina słynny artykuł pt /proc
, a właściwie w plikach /proc
nie ma nic, gdy nikt nie patrzy. Jak zostało powiedziane
Pozorna pustka procfs
ma sens, ponieważ informacje tam zawarte są dynamiczne. Nieco inna sytuacja z sysfs
. Porównajmy, ile jest plików o rozmiarze co najmniej jednego bajta /proc
i /sys
.
Procfs
ma jeden plik, a mianowicie wyeksportowaną konfigurację jądra, co jest wyjątkiem, ponieważ musi być wygenerowane tylko raz na rozruch. Z drugiej strony w /sys
istnieje wiele większych plików, z których wiele zajmuje całą stronę pamięci. Zwykle pliki sysfs
zawierają dokładnie jedną liczbę lub linię, w przeciwieństwie do tablic z informacjami uzyskanymi z odczytu plików takich jak /proc/meminfo
.
cel sysfs
- zapewniają właściwości odczytu/zapisu tego, co wywołuje jądro «kobjects»
w przestrzeni użytkownika. Jedyny cel kobjects
to liczenie linków: kiedy ostatni link do obiektu zostanie usunięty, system przywróci powiązane z nim zasoby. Niemniej jednak, /sys
stanowi większość znanych
Stabilny ABI jądra ogranicza to, co może się w nim pojawić /sys
, a nie to, co faktycznie jest obecne w danym momencie. Lista uprawnień do plików w sysfs zapewnia wgląd w to, jak konfigurowalne ustawienia dla urządzeń, modułów, systemów plików itp. mogą być konfigurowane lub odczytywane. Logicznym wnioskiem jest to, że procfs jest również częścią stabilnego ABI jądra, chociaż nie jest to wyraźnie stwierdzone w
Pliki w sysfs
opisują jedną konkretną właściwość dla każdej jednostki i mogą być odczytywalne, zapisywalne lub jedno i drugie. „0” w pliku oznacza, że dysk SSD nie może zostać usunięty.
Zacznijmy drugą część tłumaczenia od tego jak monitorować VFS za pomocą narzędzi eBPF i bcc, a teraz czekamy na Wasze komentarze i tradycyjnie zapraszamy na
Źródło: www.habr.com