Ahoj všichni! Pokračujeme ve spouštění nových streamů na kurzech, které již máte rádi, a nyní ve spěchu oznamujeme, že spouštíme novou sadu kurzů
Virtuální souborové systémy fungují jako druh magické abstrakce, která umožňuje filozofii Linuxu říkat, že „všechno je soubor“.
Co je souborový systém? Na základě slov prvního linuxového přispěvatele a autora
Základy souborového systému
Linuxové jádro má určité požadavky na entitu, kterou lze považovat za souborový systém. Musí implementovat metody open()
, read()
и write()
pro trvalé objekty, které mají jména. Z objektově orientovaného hlediska
Pokud můžeme otevřít, číst a zapisovat do entity, pak je tato entita považována za soubor, jak můžeme vidět z příkladu v konzole výše.
Fenomén VFS jen zdůrazňuje pozorování společné pro unixové systémy, že „všechno je soubor“. Přemýšlejte o tom, jak je divné, že tento malý příklad výše s /dev/console ukazuje, jak konzola skutečně funguje. Obrázek ukazuje interaktivní Bash session. Odeslání řetězce do konzole (virtuální konzolové zařízení) jej zobrazí na virtuální obrazovce. VFS má jiné, ještě podivnější vlastnosti. Umožňuje například vyhledávat podle
Systémy, které známe, jako je ext4, NFS a /proc, mají v datové struktuře C tři důležité funkce, tzv. read()
jeden souborový systém a poté použijte metodu write ()
jiný souborový systém pro výstup dat.
Definice funkcí, které patří k základním typům VFS, se nacházejí v souborech fs/
obsahují specifické systémy souborů. Jádro dále obsahuje entity jako např cgroups
, /dev
и tmpfs
, které jsou vyžadovány během zaváděcího procesu a jsou proto definovány v podadresáři jádra init/
. Vezměte prosím na vědomí, že cgroups
, /dev
и tmpfs
nevolejte funkce "velké trojky". file_operations
, ale přímo číst a zapisovat do paměti.
Níže uvedený diagram ukazuje, jak uživatelský prostor přistupuje k různým typům souborových systémů běžně nainstalovaných v systémech Linux. Stavby jako např pipes
, dmesg
и POSIX clocks
, které také realizují strukturu file_operations
, přístupný přes vrstvu VFS.
VFS je "obalová vrstva" mezi systémovými voláními a implementacemi určitých file_operations
Jako je ext4
и procfs
. Funkce file_operations
může komunikovat buď s ovladači zařízení, nebo se zařízeními pro přístup do paměti. tmpfs
, devtmpfs
и cgroups
nepoužívat file_operations
, ale přímý přístup k paměti.
Existence VFS poskytuje možnost opětovného použití kódu, protože základní metody spojené se souborovými systémy nemusí být znovu implementovány každým typem souborového systému. Opětovné použití kódu je mezi softwarovými inženýry široce používaná praxe! Pokud však opakovaně použitelný kód obsahuje
/tmp: Jednoduchá nápověda
Jednoduchým způsobem, jak zjistit přítomnost VFS v systému, je zadat mount | grep -v sd | grep -v :/
, který zobrazí všechny připojené (mounted
) souborové systémy, které nejsou rezidentní na disku a ne NFS, což platí na většině počítačů. Jeden z uvedených držáků (mounts
) VFS nepochybně bude /tmp
, že jo?
To úložiště zná každý / tmp
na fyzických nosičích - šílené!
Proč není vhodné skladovat /tmp
na fyzickém médiu? Protože soubory v /tmp
jsou dočasné a úložná zařízení jsou pomalejší než paměť, kde se vytváří tmpfs. Fyzická média jsou navíc při přepisování náchylnější k opotřebení než paměť. A konečně, soubory v /tmp mohou obsahovat citlivé informace, takže jejich zmizení při každém restartu je integrální funkcí.
Bohužel některé instalační skripty distribuce Linuxu ve výchozím nastavení vytvářejí /tmp na úložném zařízení. Pokud se to stane i vašemu systému, nezoufejte. Postupujte podle několika jednoduchých pokynů s tmpfs
stane nepřístupným pro jiné účely. Jinými slovy, systém s obřím tmpfs a velkými soubory v něm může spotřebovat veškerou paměť a spadnout. Další tip: při úpravě souboru /etc/fstab
, nezapomeňte, že musí končit novým řádkem, jinak se váš systém nespustí.
/proc a /sys
kromě /tmp
VFS (virtuální souborové systémy), které jsou uživatelům Linuxu nejznámější /proc
и /sys
, (/dev
je umístěn ve sdílené paměti a nemá file_operations
). Proč tyto dvě složky? Podívejme se na tento problém.
procfs
vytvoří snímek stavu jádra a procesů, které řídí userspace
. V /proc
Jádro vydává informace o tom, jaké funkce má, jako jsou přerušení, virtuální paměť a plánovač. Kromě, /proc/sys
– zde se konfigurují parametry pomocí příkazu sysctl
, dostupné pro userspace
. Stav a statistiky jednotlivých procesů se zobrazují v adresářích /proc/
.
Zde /proc/meminfo
je prázdný soubor, který přesto obsahuje cenné informace.
Chování /proc
files ukazuje, jak různé mohou být diskové souborové systémy VFS. Na jedné straně /proc/meminfo
obsahují informace, které lze zobrazit pomocí příkazu free
. Na druhou stranu je to prázdné! Jak se to stane? Situace připomíná slavný článek s názvem /proc
a vlastně v souborech /proc
není nic, když se tam nikdo nedívá. Jak jsem řekl
Zdánlivá prázdnota procfs
dává smysl, protože informace jsou dynamické. Trochu jiná situace s sysfs
. Porovnejme, kolik souborů alespoň jednoho bajtu obsahuje /proc
a /sys
.
Procfs
má jeden soubor, konkrétně exportovanou konfiguraci jádra, což je výjimka, protože ji stačí vygenerovat pouze jednou za boot. Na druhou stranu v /sys
existuje mnoho větších souborů, z nichž mnohé zabírají celou stránku paměti. Obvykle soubory sysfs
obsahují právě jedno číslo nebo řetězec, na rozdíl od tabulek informací získaných čtením souborů jako např /proc/meminfo
.
terč sysfs
– poskytovat čitelné a zapisovatelné vlastnosti toho, co jádro volá «kobjects»
v uživatelském prostoru. Jediný cíl kobjects
je počítání referencí: když je vymazán poslední odkaz na kobject, systém obnoví zdroje s ním spojené. Nicméně, /sys
tvoří většinu slavných
Stabilní ABI jádra omezuje to, co se může objevit /sys
, spíše než to, co je v daném okamžiku skutečně přítomno. Výpis oprávnění k souborům v sysfs poskytuje přehled o tom, jak lze konfigurovat parametry zařízení, modulů, systémů souborů atd. lze konfigurovat nebo číst. Děláme logický závěr, že procfs je také součástí stabilního ABI jádra, i když to není výslovně uvedeno v
Soubory v sysfs
popisují jednu konkrétní vlastnost pro každou entitu a mohou být čitelné, zapisovatelné nebo obojí. "0" v souboru znamená, že SSD nelze vyjmout.
Druhou část překladu začneme tím, jak monitorovat VFS pomocí nástrojů eBPF a bcc a nyní čekáme na vaše komentáře a tradičně vás zveme na
Zdroj: www.habr.com