Disky a filesystémy

lsblk, oddíly, mkfs, mount, fstab, LVM.

Data na disku nejsou uložená jen tak „volně". Aby se v nich systém vyznal, jsou navrstvené jako cibule: fyzický disk → rozdělený na oddíly → každý oddíl naformátovaný na souborový systém → ten připojený (mount) do jednoho velkého stromu, který začíná v /. Když pochopíš těchto pár vrstev a jak do sebe zapadají, přestane ti disk v Linuxu nahánět strach — a zjistíš, proč tolik věcí vypadá jako soubor.


Pár pojmů na úvod

  • Blokové zařízení = disk (nebo jeho část), do kterého se čte/zapisuje po blocích. V Linuxu se tváří jako soubor v /dev — třeba /dev/sda nebo /dev/nvme0n1.
  • Oddíl (partition) = kus disku vyhrazený pro jeden účel. Jeden fyzický disk můžeš rozdělit na víc oddílů (/dev/sda1, /dev/sda2…). Oddíly popisuje tabulka oddílů (dnes GPT).
  • Souborový systém (filesystem) = formát, jakým jsou v oddílu uložené soubory a složky (ext4, btrfs, xfs). Určuje, jak se data organizují — oddíl je „police", filesystém je „způsob, jak do ní skládáš krabice".
  • Mount (připojení) = navěšení naformátovaného oddílu na nějaké místo ve stromu (mount point), třeba / nebo /home. Teprve po mountu vidíš soubory.
  • /etc/fstab = tabulka, která říká, co se má připojit automaticky při bootu a kam.
  • LVM / LUKS = volitelné vrstvy mezi diskem a filesystémem — LVM pro flexibilní správu místa, LUKS pro šifrování. K nim se dostaneme dál.

Vrstvy: od disku k souboru

Každý řádek je jedna vrstva a žádnou nemůžeš přeskočit: prázdný disk nejdřív rozdělíš na oddíly, oddíl naformátuješ na filesystém, ten připojíš do stromu — a teprve pak do něj ukládáš soubory. Když něco nefunguje, skoro vždy se ptáš „na které vrstvě je problém?".


Bloková zařízení: jak vypadají disky

Disky najdeš v /dev. Pojmenování ti hned řekne, o co jde:

  • /dev/sda, /dev/sdb — klasické SATA/USB disky. sda = první, sdb = druhý (podle pořadí, jak je jádro našlo — a to se může mezi boot změnit, viz UUID níže).
  • /dev/nvme0n1 — NVMe SSD (moderní rychlé disky). nvme0 = první NVMe řadič, n1 = první disk.
  • Oddíly se připisují na konec: sda1 = první oddíl na sda; u NVMe se vkládá p: nvme0n1p3 = třetí oddíl na nvme0n1.

Přehled ti dá lsblk (list block devices) — stromově ukáže disky a jejich oddíly:

lsblk                      # strom disků a oddílů, velikosti, mount pointy
lsblk -f                   # navíc typ filesystému, UUID a kam je co připojeno

Detaily o formátu a UUID vytáhne blkid:

blkid                      # UUID, typ (ext4/btrfs…) a label každého oddílu
blkid /dev/nvme0n1p3       # jen jeden konkrétní oddíl

💡 lsblk -f je asi nejužitečnější „co tu vlastně mám" příkaz. Než něco uděláš s diskem, vždycky se nejdřív podívej sem — abys omylem nesáhl na špatný disk.


Oddíly a tabulka oddílů

Aby systém věděl, kde jeden oddíl končí a druhý začíná, drží disk na začátku tabulku oddílů. Dnes standard je GPT (GUID Partition Table) — nahradil starší MBR, který uměl max 4 primární oddíly a disky do 2 TB. GPT tyhle limity nemá a je robustnější (drží si zálohu tabulky).

Oddíly se dělají nástroji fdisk nebo parted (případně GUI jako GParted):

sudo fdisk -l              # jen VYPÍŠE oddíly na všech discích (bezpečné, čte)
sudo parted /dev/sdb print # totéž pro jeden disk přes parted

⚠️ Editace tabulky oddílů maže data. Interaktivní režim fdisk /dev/sdX nebo parted umí oddíl smazat či přepsat. Dokud si nejsi jistý, používej jen -l / print (čtení). A stokrát si ověř písmeno disku (lsblk) — sdb místo sda je rozdíl mezi „nový prázdný disk" a „můj systém".


Souborový systém: formát, ne oddíl

Tohle je nejčastější zmatek: oddíl je jen vyhrazené místo; souborový systém je formát, kterým se do toho místa ukládá. Prázdný oddíl neumí držet soubory, dokud ho nenaformátuješ. Nejběžnější volby v Linuxu:

  • ext4 — výchozí, roky prověřený, spolehlivý, nenáročný. Když nevíš, co zvolit, zvol ext4.
  • btrfs — moderní, umí snapshoty (zamrznutý obraz stavu) a subvolumes (logické oddíly uvnitř jednoho filesystému). Výchozí na řadě distribucí (Fedora, openSUSE). Za flexibilitu platíš trochu vyšší složitostí.
  • xfs — výborný na velké soubory a vysokou zátěž (často na serverech, výchozí na RHEL).

Formátuje se rodinou příkazů mkfs (make filesystem):

sudo mkfs.ext4 /dev/sdb1    # naformátuje oddíl sdb1 na ext4
sudo mkfs.btrfs /dev/sdb1   # ...nebo na btrfs

🚩 mkfs je nevratné — přepíše celý oddíl a smaže všechno, co v něm bylo. Není „formátovat jestli chceš". Než ho spustíš, lsblk -f a ujisti se, že cílíš na správný a prázdný oddíl.


Mount: připojení do stromu

Naformátovaný oddíl ještě není vidět. Musíš ho připojit (mount) na nějaké místo ve stromu — na mount point (což je obyčejná složka). V Linuxu totiž není C: a D: jako ve Windows — všechno je jeden strom začínající v /, a další disky se do něj „navěšují" jako složky.

mount                              # co je aktuálně připojené (dlouhý výpis)
sudo mount /dev/sdb1 /mnt          # připoj oddíl sdb1 do složky /mnt
sudo umount /mnt                   # odpoj ho zase

Po mount /dev/sdb1 /mnt uvidíš obsah disku pod /mnt. Po umount složka /mnt zase zeje prázdnotou — disk je pořád tam, jen není navěšený. /mnt a /media jsou tradiční místa pro ruční/dočasné mounty (USB flashky ti dnes desktop připojí sám do /run/media/...).

💡 Právě proto platí „všechno je jeden strom": /home může fyzicky ležet na jiném disku než /, a ty to při běžné práci vůbec nepoznáš — vidíš jen souvislé složky.


/etc/fstab: automatické připojení při bootu

Ruční mount po každém rebootu by byl nesmysl. Co se má připojit automaticky, je zapsané v souboru /etc/fstab (filesystem table). Každý řádek = jeden mount: co, kam, jaký filesystém, volby.

# <zařízení>                              <mount point> <typ>  <volby>          <dump> <pass>
UUID=1a2b3c4d-...-9f8e   /            ext4   defaults           0      1
UUID=aa11bb22-...-cc33   /home        ext4   defaults           0      2

Všimni si, že se tam píše UUID=..., ne /dev/sda1. Proč? Protože jména /dev/sdaX nejsou zaručeně stálá — přehodíš disky, přidáš USB, jindy je jádro najde v jiném pořadí, a z sda je najednou sdb. Kdyby fstab říkal „připoj /dev/sda1 jako /", po přehození kabelů by systém připojil špatný disk nebo nenabootoval. UUID je unikátní identifikátor konkrétního filesystému a nemění se — proto je to bezpečná volba. UUID zjistíš přes lsblk -f nebo blkid.

⚠️ Špatný řádek ve /etc/fstab = systém nenabootuje a spadne do emergency módu. Po každé úpravě to otestuj bez rebootu: sudo mount -a zkusí připojit vše z fstabu; když to projde bez chyby, jsi (skoro jistě) v pohodě. Na systemd navíc udělej sudo systemctl daemon-reload, ať si systemd přegeneruje mount unity z nové verze fstabu. Nikdy nerebootuj s neověřeným fstabem.


Kolik je místa a co ho žere

Když dojde místo, dva příkazy vyřeší 90 % situací.

df -h (disk free) — kolik volného místa mají filesystémy (-h = čitelné jednotky):

df -h                      # přehled všech připojených filesystémů a jejich zaplnění
df -h /                    # jen kořenový filesystém

du -sh (disk usage) — kolik zabírají konkrétní složky, ať víš, co mazat:

du -sh *                   # velikost každé položky v aktuální složce (souhrn)
du -sh /var/* | sort -h    # co žere místo ve /var, seřazené od nejmenšího

💡 df odpovídá na „kolik mi zbývá?", du na „kdo mi to sežral?". Když je / plný, nejdřív df -h (potvrď, který filesystém), pak du -sh v podezřelých místech (/var/log, /home, ~/.cache).


LVM: pružná vrstva navíc

Klasický oddíl má pevnou velikost — zvětšit ho jde těžko. LVM (Logical Volume Manager) vloží mezi disk a filesystém mezivrstvu, díky které můžeš svazky zvětšovat, zmenšovat a přesouvat za běhu a skládat víc disků do jednoho logického celku. Tři pojmy:

  • PV (Physical Volume) = fyzický zdroj — oddíl nebo celý disk, který dáš k dispozici LVM.
  • VG (Volume Group) = „bazén" místa poskládaný z jednoho či víc PV.
  • LV (Logical Volume) = kus vykrojený z VG, který se chová jako oddíl — naformátuješ ho a připojíš.

Proč to chtít: potřebuješ /home větší? Když je na LV a ve VG je volno, zvětšíš ho jedním příkazem bez přerozdělování disku. LVM navíc umí snapshoty (zamrznutý stav pro zálohu). Pro jeden notebook to nemusíš řešit; na serverech je to standard.


Šifrování (LUKS) — jen na okraj

Mezi oddíl a filesystém můžeš vložit i šifrovací vrstvu — LUKS. Oddíl je pak na disku „nečitelná kaše" a teprve po zadání hesla se odemkne a nad ním se objeví normální filesystém, který připojíš. Tak funguje full-disk encryption (celý disk zašifrovaný, heslo se ptá při bootu). Detailně to rozebereme v samostatné kapitole o šifrování — tady jen věz, že je to další vrstva ve stejné cibuli: disk → oddíl → LUKS → filesystém → mount.


Failure modes — čím si nejčastěji rozbiješ disk

  • Špatný řádek ve /etc/fstab → boot do emergency módu. Překlep v UUID nebo v typu filesystému a systém při startu nedokáže připojit / nebo /home → spadne do záchranného režimu. Prevence: sudo mount -a po každé úpravě, nikdy nerebootovat naslepo.
  • mkfs na špatný disk → smazaná data. Zaměníš /dev/sdb za /dev/sda a naformátuješ systémový disk. mkfs se neptá dvakrát. Prevence: lsblk -f a ověř velikost + label + že je oddíl prázdný.
  • umount: target is busy. Nejde odpojit, protože v tom mountu má někdo otevřený soubor nebo tam „stojí" (má tam cd). Zjistíš viníka přes lsof /mnt nebo fuser -vm /mnt, ukončíš proces / odejdeš ze složky, pak umount. (Nouzově umount -l = lazy, ale radši najdi příčinu.)
  • Plný / → systém se chová divně. Nejde se přihlásit, aplikace padají, logy se nezapisují. Diagnostika: df -h (který FS je na 100 %) → du -sh (co ho žere). Časté oběti: /var/log, staré balíčky, ~/.cache, zapomenuté Docker image.
  • Zmatení /dev/sda vs /dev/sdb. Jména podle pořadí detekce nejsou stálá — po přehození disků nebo připojení USB se mění. Proto se ve fstabu i skriptech používá UUID, ne /dev/sdX.

🛠️ Cvičení

  1. Zmapuj si disky. Spusť lsblk -f a přečti z výstupu: kolik máš fyzických disků, kolik oddílů, jaký filesystém je na kořenovém oddílu (/) a jaké má UUID. Zkus totéž přes blkid — kde je rozdíl?
  2. Najdi žrouta místa. Pomocí df -h zjisti, který filesystém je nejvíc zaplněný, a pak v jeho rámci najdi přes du -sh tři největší složky. Napiš, co konkrétně u tebe zabírá nejvíc.
  3. Rozmysli fstab (bez editace!). Otevři /etc/fstab jen ke čtení (cat /etc/fstab) a u každého řádku popiš: co, kam a jak se připojuje. Proč je tam UUID, a ne /dev/sdaX?
  4. Vrstvy vlastními slovy. Popiš cestu od holého nového disku k tomu, aby na něm ležel tvůj soubor: které příkazy (a v jakém pořadí) použiješ a co dělá každý z nich?
  5. Simuluj „busy" mount (nepovinné, bezpečně). Vejdi terminálem do nějaké připojené složky (cd), z jiného terminálu zkus tu jednotku umount a sleduj chybu. Pak přes lsof najdi, kdo ji drží.
Náčrt řešení — rozbal, až si cvičení zkusíš sám
  1. Mapa diskůlsblk -f ukáže strom disků/oddílů s typem FS, UUID a mount pointem; kořenový je ten s mount pointem /. blkid dá stejné UUID/typy, ale plochým výpisem bez stromu a bez zaplnění. Pozor: lsblk je na rychlý přehled nejlepší, blkid se hodí do skriptů na jedno UUID.
  2. Žrout místadf -h najde nejplnější filesystém (sloupec Use%), pak v podezřelé cestě du -sh * | sort -h (nebo du -sh /var/* | sort -h) seřadí složky podle velikosti. Pozor: du na / bez omezení může běžet dlouho a sahat i tam, kam nemáš práva — cil konkrétní podsložky.
  3. Fstab — každý řádek má 6 polí: zařízení (UUID=...), mount point, typ FS, volby (defaults), dump a pass (pořadí kontroly při bootu, / má 1). UUID se používá, protože je stálé — /dev/sdaX se může po přehození disků/USB změnit a fstab by pak připojil špatný oddíl. Pozor: fstab se needituje naslepo — po změně sudo mount -a.
  4. Cesta k souborusudo fdisk/parted vytvoří oddíl → sudo mkfs.ext4 /dev/sdXN ho naformátuje na filesystém → sudo mount /dev/sdXN /mnt připojí do stromu → teprve teď do /mnt uložíš soubor (pro trvalé připojení přidáš řádek s UUID do /etc/fstab). Pozor: fdisk i mkfs jsou nevratné, ověř písmeno disku přes lsblk.
  5. Busy mountumount vypíše target is busy, protože v adresáři „stojíš" (nebo tam máš otevřený soubor). lsof /cesta (nebo fuser -vm /cesta) ukáže proces, který ji drží; po cd pryč / ukončení procesu umount projde. Pozor: umount -l (lazy) to „odpojí na oko", ale skrytý problém nechá být — radši najdi příčinu.

🧠 Otázky & odpovědi

Jaký je rozdíl mezi oddílem a souborovým systémem?

Oddíl je vyhrazené místo na disku (kus disku popsaný v tabulce oddílů, třeba /dev/sda1). Souborový systém je formát, jakým se do toho místa ukládají soubory a složky (ext4, btrfs, xfs) — vytvoříš ho příkazem mkfs. Prázdný oddíl neumí držet soubory, dokud ho nenaformátuješ. Přirovnání: oddíl je police, filesystém je způsob, jak do ní skládáš a značíš krabice. Teprve naformátovaný oddíl se dá připojit (mount) a používat.

Proč se ve fstabu používá UUID místo /dev/sda1?

Protože jména jako /dev/sda1 nejsou zaručeně stálá — jádro přiděluje písmena podle pořadí, jak disky najde, a to se změní, když přehodíš kabely, přidáš disk nebo připojíš USB. Z sda se pak stane sdb. Kdyby fstab říkal „připoj /dev/sda1 jako /", po takové změně by systém připojil špatný disk nebo vůbec nenabootoval. UUID je unikátní a napevno svázané s konkrétním filesystémem — nemění se, takže mount vždycky trefí ten správný oddíl. UUID zjistíš přes lsblk -f nebo blkid.

Co znamená chyba target is busy při umount a jak ji vyřešit?

Znamená, že mount právě někdo používá — buď v té složce „stojíš" (máš tam cd), nebo v ní má nějaký program otevřený soubor. Linux ti proto odmítne jednotku odpojit, aby nepřišel o rozepsaná data. Řešení: odejdi ze složky (cd ~) a najdi viníka přes lsof /mnt nebo fuser -vm /mnt — ukáže procesy, které tam sahají. Ty ukonči (nebo počkej, až doběhnou) a umount projde. Existuje i umount -l (lazy), ale ten problém jen zamete pod koberec — radši najdi příčinu.

Systém hlásí plný disk, jak zjistím čím to je?

Dvěma příkazy. Nejdřív df -h — ukáže všechny filesystémy a jejich zaplnění (sloupec Use%), takže víš, který je na 100 %. Pak v jeho rámci du -sh * (nebo cíleně du -sh /var/* | sort -h), který ukáže, které složky místo žerou, ať víš, co mazat. Časté oběti: /var/log (nabobtnalé logy), stažené balíčky, ~/.cache, zapomenuté Docker image. Zkráceně: df říká „kolik zbývá", du říká „kdo to sežral" — a používají se v tomhle pořadí.

K čemu je LVM a proč bych ho chtěl?

LVM (Logical Volume Manager) je mezivrstva mezi diskem a filesystémem, díky které nejsi svázaný pevnou velikostí oddílů. Poskládáš fyzické disky/oddíly (PV) do společného fondu (VG) a z něj krájíš logické svazky (LV), které se chovají jako oddíly. Výhoda: LV zvětšíš, zmenšíš nebo přesuneš za běhu a snadno spojíš víc disků do jednoho celku — plus umí snapshoty (zamrznutý stav pro zálohu). Pro jeden notebook to není nutnost; na serverech, kde se místo mění a plánuje, je to standard.