Superblok v Linuxu: co to je, co ukládá a jak ho opravit

  • Superblok ukládá metadata globálního souborového systému (velikost, bloky, inody, stav, UUID, žurnál) a bez něj jádro nemůže interpretovat oddíl.
  • Ext2/ext3/ext4 udržují více záloh superbloků; nástroje jako mke2fs -ny dumpe2fs pomáhají tyto zálohy najít pro použití s ​​fsck/e2fsck.
  • Příkazy fsck a e2fsck v kombinaci s volbami jako -b, -c, -no -py a utilitami jako badblocks, debugfs a tune2fs umožňují diagnostikovat, opravovat a posilovat integritu systému.
  • Koncept superbloku se objevuje také v softwarovém RAIDu (mdadm) a v dalších souborových systémech, jako je XFS, kde redundantní metadata umožňují rekonstrukci poškozených polí a svazků.

Co je to superblok Linuxu a jak funguje?

Pokud jste se někdy při spouštění Linuxu setkali s chybou „ vadný superblok“, „BusyBox“ nebo „initramfs“ , víte, že je to jeden z těch okamžiků, kdy si říkáte: „Co jsem to teď rozbil?“ Za těmito chybami se skrývá klíčová součást souborových systémů: superblok . Pochopení toho, co to je, co ukládá a jak ho opravit, vám může ušetřit spoustu problémů, zvláště když se notebook vašeho přítele rozhodne zemřít hned poté, co dokoukal pořad.

V tomto článku si prakticky a srozumitelně vysvětlíme , co je superblok v Linuxu, co obsahuje, proč je tak důležitý, co znamená, když je poškozený (špatný superblok), a jak jej zkontrolovat a opravit pomocí nástrojů jako fsck, e2fsck, mke2fs, debugfs a dalších. Také se podíváme, jak zapadá do zbytku struktury souborového systému (inody, datové bloky, RAID atd.) a jaké příkazy jsou užitečné pro diagnostiku skutečných problémů.

Co je superblok v Linuxu a kam v souborovém systému patří?

V souborových systémech ext2, ext3 a ext4 je superblok „mozkem“ souborového systému . Je to struktura metadat, která popisuje, jak je vše organizováno: velikost souborového systému, velikost bloku, počet inodů, stav, časová razítka a mnoho dalších důležitých informací. Bez tohoto bloku informací by jádro nevědělo, jak interpretovat, co se na oddílu nachází.

Souborový systém Linuxu se skládá z několika odlišných částí a superblok je jen jednou z nich, i když klíčovou. Obecně řečeno, typický systém ext2/ext3/ext4 má tři hlavní komponenty : samotný superblok, tabulku inodů a datové bloky, kde je uložen obsah souborů a adresářů.

Pro lepší představu je dobré si uvědomit, že Linux nepoužívá disky „C:, D:“ jako Windows, ale spíše jednu hierarchii adresářů , kde jsou fyzická zařízení reprezentována jako speciální soubory (například /dev/sda1, /dev/nvme0n1p3, /dev/md0 ). Souborové systémy se vytvářejí nad těmito zařízeními a každý souborový systém má svůj vlastní superblok.

Atributy souborů v Linuxu
Související článek:
Bottles v Linuxu: praktický průvodce spouštěním aplikací pro Windows

Základní struktura souborového systému Linux (ext2/ext3/ext4)

V souborových systémech odvozených od ext2 Linux organizuje disk do bloků pevné velikosti (obvykle násobků 512 bajtů, často 1K, 2K nebo 4K). Zatímco FAT se zaměřoval na „klastr“, zde je klíčovou jednotkou blok. Systém je strukturován následovně (ve zjednodušené podobě):

  • Spouštěcí blok (blok 0): vyhrazeno pro bootovací kód nebo speciální metadata.
  • Superblok (blok 1 a záložní kopie): data globálního souborového systému.
  • Tabulka inodů: struktury, které popisují každý soubor a adresář.
  • Datová oblast: bloky, kde je obsah skutečně uložen.

Takzvaný načítací blok nebo blok nula je obvykle rezervován pro malý program nebo informaci, která pomáhá systému spravovat zbytek struktury. Bezprostředně za ním následuje hlavní superblok, který systému říká, jak interpretovat vše, co následuje. Dále následuje tabulka inodů a nakonec datové bloky, kde se nacházejí soubory a adresáře.

Každý adresář je jednoduše speciální soubor, jehož „seznam obsahu“ spojuje názvy (souborů nebo podadresářů) s čísly inodů. Díky tomuto mapování může jádro lokalizovat inode a odtud najít datové bloky, kde jsou uloženy skutečné informace.

Inody: „technické specifikace“ každého souboru

V rámci této architektury jsou inody struktury, které popisují každý soubor nebo adresář . Neukládají název (který je v položce adresáře), ale všechna důležitá metadata: oprávnění, vlastníka, velikosti, časová razítka a ukazatele na datové bloky. Každý inode obsahuje přibližně následující informace:

  • Identifikátor dispozitivu kde se nachází souborový systém.
  • Číslo inodu unikátní v rámci souborového systému.
  • Velikost souboru v bajtech.
  • UID majitele a GID skupiny.
  • Přístupový režim: oprávnění pro čtení, zápis a spouštění pro vlastníka, skupinu a další.
  • Marcas de Titempoposlední modifikace (mtime), poslední přístup (atime) a změna samotného inodu (ctime).
  • Počet pevných odkazů (tvrdé odkazy), které ukazují na daný inode.

Tento čítač pevných odkazů je klíčový: souborový systém skutečně uvolní inode a jeho bloky pouze tehdy, když počet odkazů dosáhne nuly. Pokud má soubor několik různých názvů odkazujících na stejný inode (pevné odkazy), jsou všechny ekvivalentní, bez privilegovaného „originálu“, na rozdíl od zástupců nebo symbolických odkazů ve Windows, které závisí na podkladovém fyzickém souboru.

Zatímco inode obsahuje základní informace, superblok obsahuje celkové informace o souborovém systému , od celkového počtu inode až po stav připojení a interval mezi vynucenými kontrolami pomocí fsck. Pokud se tyto celkové informace poškodí, začneme při spuštění vídat nepříjemné chybové zprávy.

Co přesně superblok obsahuje a proč je tak důležitý?

Superblok souborového systému ext2/ext3/ext4 uchovává velkou sadu základních metadat . Aniž bychom se snažili vyjmenovat všechna pole nízké úrovně, obsahuje informace jako například:

  • Celková velikost souborového systému (v blocích).
  • velikost bloku který se používá.
  • Celkový počet inodů a bloků a kolik jich je zdarma.
  • Stav souborového systému (čistý, s chybami, sestavený atd.).
  • UUID souborového systému a popisku, pokud nějaký existuje.
  • Jak často by se měl spouštět fsck? (maximální počet sestav, časové intervaly).
  • Informace o časopise v ext3/ext4 (pokud existuje, velikost atd.).

S těmito daty jádro nebo ověřovací nástroj ví, jak procházet tabulku inodů, jak interpretovat skupiny bloků, kde najít zálohy samotného superbloku a další podrobnosti. Když se hlavní superblok poškodí (v důsledku výpadku napájení, chyby, fyzického selhání nebo náhlého vypnutí), systém ztratí orientaci ohledně vnitřní struktury oddílu.

Pokud je tedy superblok nečitelný nebo obsahuje nekonzistentní data, systém se obvykle po spuštění nepodaří správně připojit / , což vás ponechá v shellu BusyBox/initramfs s hlášeními jako „nelze připojit /root“ nebo chybami týkajícími se /sys, /proc, /root/dev/console . V podstatě se initramfs pokusí připojit kořenový souborový systém, ale zhroutí se, protože základní metadata (superblok) jsou poškozena.

Co je to „špatný superblok“ a proč se objevuje?

superblok v Linuxu

Když nízkoúrovňové nástroje hovoří o špatném superbloku , říkají tím, že superblok, který se pokoušejí číst, je považován za neplatný: buď jej nelze fyzicky číst (krátké čtení, chyby I/O), nebo data, která vidí, nesplňují očekávání platného souborového systému ext.

Typickým případem je spuštění příkazu fsck.ext4 nebo e2fsck přímo na poškozeném oddílu a zobrazení chyby, například: „Pokus o čtení bloku souborového systému vedl k krátkému čtení… Mohlo by se jednat o oddíl s nulovou délkou?“ . Tato zpráva obvykle znamená, že kontrolní program nevidí konzistentní superblok na standardní pozici a má podezření, že oddíl je prázdný, oříznutý nebo vážně poškozený.

Obvyklé důvody, proč superblok degraduje nebo selhává, jsou poměrně rozmanité, ale mezi nejčastější patří náhlé vypnutí s velkou aktivitou zápisu , náhlé vybití baterií v noteboocích, vadné sektory na disku, chyby v zapojení, chyby ovladačů nebo souborového systému a v menší míře nesprávná manipulace s oddíly.

Dobrou zprávou je, že tvůrci ext2/ext3/ext4 mysleli dopředu: kromě hlavního superbloku systém ukládá záložní kopie superbloku v různých blocích na disku. Tyto kopie umožňují „vzkřísit“ souborový systém, který se jeví jako zcela poškozený, spoléháním se na jeden z těch alternativních superbloků, které jsou stále neporušené.

Zálohy superbloků: jak je najít

Při vytváření souborového systému pomocí nástrojů, jako je mkfs.ext4 , se automaticky vygeneruje několik záloh superbloků . Samotná zpráva o vytvoření obvykle obsahuje řádek typu „Zálohy superbloků uloženy v blocích: 32768, 98304, 163840, …“, který označuje bloky, kde jsou tyto zálohy uloženy.

Pokud již nemáte po ruce počáteční zprávu mkfs, můžete na zařízení použít trik `mke2fs -n /dev/XXX` (s `-n`, "zkušební spuštění"): tímto způsobem nástroj nepřepisuje souborový systém, pouze simuluje jeho vytvoření a ukazuje vám, které bloky by obsahovaly superbloky , které se obvykle shodují s těmi, které již existují. Tento seznam pozic je neocenitelný, když se hlavní superblok stane nepoužitelným.

Jakmile znáte umístění záloh (například blok 32768), můžete příkazu fsck sdělit , aby je použil, a to pomocí volby -b , která určí alternativní superblok. Typický příkaz by vypadal například takto: fsck -y -b 32768 /dev/nvme0n1p3 , což příkazu říká, aby se pokusil o opravu systému na základě kopie superbloku umístěné v daném bloku.

Jak funguje fsck/e2fsck při opravě systému s poškozeným superblokem

Když spustíte fsck na souborovém systému ext a narazí na nekonzistence, interně deleguje na e2fsck (pro ext2/ext3/ext4). Tento nástroj provádí několik kontrol : kontroluje strukturu inodů, zkoumá adresáře, porovnává počet volných bloků, ověřuje křížové odkazy atd. Pokud jste zadali volbu -y nebo -p , pokusí se automaticky opravit vše, co nevyžaduje složité destruktivní rozhodnutí.

V konkrétním případě vadného superbloku , pokud zadáte alternativní superblok s parametrem `-b` , e2fsck použije tuto kopii jako referenci pro organizaci systému. Poté kontroluje a opravuje poškozené struktury, označuje skutečně vadné bloky, aby se znovu nepoužily, a rekonstruuje souborový systém, dokud nebude co nejkoherentnější.

V závislosti na rozsahu poškození může být oprava téměř bezproblémová (souborový systém se znovu připojí a data zůstanou neporušená), nebo v závažných případech může dojít ke ztrátě některých souborů nebo adresářů. I tak, pokud je problém omezen na jeden poškozený superblok a zálohy jsou neporušené, je šance na obnovení oddílu poměrně vysoká.

Pokročilé nástroje pro diagnostiku superbloků a inodů

Kromě nástrojů fsck a e2fsck nabízí ekosystém Linuxu několik specializovaných nástrojů pro hloubkové zkoumání souborových systémů ext , včetně informací o superblokech, chybných blocích a parametrech připojení.

Nástroj dumpe2fs poskytuje podrobný přehled konfigurace a stavu souborových systémů ext2/ext3/ext4. I když jej lze spustit s připojeným systémem, doporučuje se jej spustit s odpojeným oddílem. Mimo jiné umožňuje zobrazit seznam bloků označených jako chybné (-b) , dotazovat se pouze na informace o superbloku pomocí -h , explicitně určit, kterou kopii superbloku použít pomocí -o superblock= a vynutit určitou velikost bloku pomocí -o blocksize= v případě závažného poškození.

Nástroj tune2fs se používá k úpravě několika parametrů souborového systému , z nichž mnohé souvisí s daty, která se objevují v superbloku. Můžete mimo jiné nastavit, jak často má být fsck nucen k připojení ( -c a -C ), jak dlouhý by měl být maximální interval připojení ( -i ), změnit procento bloků rezervovaných pro root ( -m nebo -r ), přidat žurnál do souborového systému ext2 ( -j ) nebo rezervovat bloky pro konkrétní skupinu ( -g ).

Co je to superblok Linuxu a jak funguje?
Související článek:
Nástroje pro benchmarking hardwaru v Linuxu pro spolehlivé testování

Dalším zajímavým nástrojem je debugfs , interaktivní debugger pro souborový systém ext. Lze jej otevřít v režimu pouze pro čtení nebo pro čtení/zápis a obsahuje příkazy pro zobrazení statistik superbloku (show_super_stats, stats) , kontrolu inodu přidruženého k souboru pomocí stat , zobrazení seznamu smazaných inodů pomocí lsdel a v některých případech dokonce i vrácení smazání pomocí příkazů undel . Umožňuje také extrahovat soubory z poškozeného souborového systému pomocí write internal-file external-file , což je velmi užitečné, když dáváte přednost obnově dat před připojením oddílu.

Vadné bloky a jejich vztah k superbloku

Častou příčinou poškození superbloku a dalších metadat jsou vadné fyzické bloky na disku . Pokud se vadný sektor shoduje s jakoukoli pozicí superbloku nebo jeho kopií, oddíl se stává velmi křehkým. Proto jsou nástroje jako badblocks důležité pro diagnostiku skutečného stavu zařízení.

Pomocí příkazu `badblocks` můžete skenovat oddíl nebo disk a lokalizovat fyzicky nebezpečné bloky, a to buď v režimu pouze pro čtení ( `-n` ), nebo v režimu destruktivního zápisu ( `-w` ). Podporuje úpravu velikosti bloku ( `-b` ), čtení známých seznamů vadných bloků ( `-i` ), zápis výsledků do souboru ( `-o` ) a zobrazení procentuálního průběhu ( `-s` ). Tento seznam bloků pak lze předat příkazu `e2fsck` nebo integrovat do interního seznamu vadných bloků souborového systému, aby se tyto bloky nikdy nepoužívaly v nových souborech.

Pokud zkombinujete e2fsck s volbou -c , kontrola použije chybné bloky k vyhledání a přidání chybných bloků do seznamu chybných bloků. Dvojité opakování volby -c provede důkladnější nedestruktivní kontrolu čtení/zápisu. Volbou -k můžete navíc nastavit, aby se již registrované chybné bloky zachovaly a přidaly pouze nové nalezené během kontroly.

fsck a e2fsck: praktické aspekty a klíčové možnosti

Generický příkaz `fsck` je ve skutečnosti frontend, který deleguje úkoly na příslušný kontrolní systém v závislosti na typu souborového systému ( e2fsck pro ext*, ostatní pro XFS atd.). Typ můžete explicitně specifikovat pomocí `-t` nebo naopak vyloučit konkrétní pomocí `-t no` . Volby jako `-A` umožňují zkontrolovat všechny systémy označené k ověření v `/etc/fstab` , zatímco `-M` se vyhne kontaktu na připojené systémy a `-R` vylučuje kořenový adresář (`/`) při použití `-A`.

Je důležité si uvědomit, že příkaz fsck by měl být spuštěn na nepřipojených souborových systémech nebo maximálně na připojených systémech s povolením pouze pro čtení. Vynucení spuštění na připojeném oddílu s povolením pro čtení i zápis s sebou nese vážné riziko dalšího poškození systému. U produkčních systémů se obvykle používají automatické kontroly spouštění nebo plánovaná údržba.

Při práci přímo s e2fsck je k dispozici několik užitečných doplňkových voleb. Například -p (nebo -a, nyní zastaralé) se pokusí o automatickou nápravu bez zásahu, zatímco -n se otevírá v režimu pouze pro čtení a na všechny otázky odpovídá „ne“, což je ideální pro diagnostiku bez jakéhokoli ručního zásahu. Pokud jde o superbloky, volba -b superblock_number umožňuje použití alternativní kopie a -B size vynucuje specifickou velikost bloku v případě podezření na poškození.

Superbloky za hranicemi ext: Softwarový RAID a XFS

Termín „superblok“ se neomezuje pouze na souborové systémy ext; objevuje se například také v kontextu softwarového RAIDu v Linuxu . Když je pomocí mdadm vytvořeno pole RAID (ať už RAID-0, RAID-1 nebo vyšší úrovně), subsystém md ukládá metadata na disky, které toto pole tvoří, a tato metadata se také nazývají superbloky pole.

Příkaz jako `mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc` vytvoří logické zařízení RAID-0 ze dvou disků a ve výstupu `mdadm --detail /dev/md0` uvidíte pole jako „Superblock is persistent“, což znamená, že toto pole ukládá na disku stabilní superblok RAID . Něco podobného se děje s RAID-1 vytvořeným pomocí `mdadm --create /dev/md1 --level=1 ...` , kde každý disk uchovává metadata popisující pole: UUID, název, úroveň, velikost, stav atd.

Tyto superbloky RAID umožňují jádře automaticky rozpoznat a sestavit pole při spuštění, a to i v případě, že byly disky přesunuty z jednoho serveru na druhý. Pro jistotu je však běžnou praxí zálohovat konfiguraci pomocí souboru `/etc/ mdadm/ mdadm.conf` pomocí příkazů jako `mdadm --misc --detail --brief /dev/md?` , které generují řádky ARRAY s metadaty, UUID a názvem pole.

Ve světě XFS , dalšího souborového systému široce používaného na serverech, jsou běžná také komplexní metadata a struktury podobné superblokům. Nástroje jako xfs_info zobrazují technické informace o souborovém systému (vyžadují jeho připojení), zatímco xfs_metadump umožňuje uložit metadata do souboru pro analýzu a xfs_check a xfs_repair hrají podobnou roli jako fsck/e2fsck pro XFS. Kromě toho xfs_admin funguje jako „brute force“ verze tune2fs pro XFS, což umožňuje změnit popisek nebo UUID, vždy s odpojeným systémem.

Jotta-cli v Linuxu
Související článek:
Jak naplánovat automatické úlohy pomocí Crontabu v Linuxu

Ve všech těchto případech, ačkoli se interní formát liší, je základní myšlenka stejná: existuje blok nebo sada bloků, která popisuje globální strukturu systému nebo pole , a pokud je poškozena, nástroje se uchylují ke kopiím nebo redundantním metadatům k obnovení integrity.

Celá tato síť superbloků, záloh, tabulek inodů a testovacích nástrojů se může zpočátku zdát matoucí, ale jakmile pochopíte, že superblok je část, která systému říká, „jak je celá sestava nastavena “, zbytek vám mnohem snáze zapadne na své místo: pochopíte, proč vás výpadek proudu může nechat v BusyBoxu, proč e2fsck ukládá zdánlivě mrtvé oddíly pomocí záloh, k čemu slouží příkazy jako dumpe2fs, tune2fs, badblocks nebo debugfs a jak metadata RAID nebo XFS sledují stejný princip „mozku“, který popisuje celek, což vám umožňuje mnohem snadněji diagnostikovat a obnovovat poškozené systémy. Sdílejte tyto informace, aby se o tomto tématu mohlo dozvědět více uživatelů.


Přidat jako preferovaný zdroj v Googlu