# Obecné principy OS a embedded systémy
## Co je operační systém a jaké má hlavní funkce?
Operační systém (OS) je základní softwarová vrstva, která zajišťuje správu hardwarových prostředků a poskytuje služby aplikačním programům.
**Hlavní funkce:**
- Správa procesů (proces scheduling, multitasking)
- Správa paměti (alokace, ochrana, stránkování)
- Správa vstupně/výstupních zařízení (I/O)
- Správa souborového systému
- Správa bezpečnosti a přístupu (uživatelé, práva)
- Abstrakce hardwaru (poskytuje aplikačnímu softwaru jednotné rozhraní)
---
## Porovnej real-time a general-purpose operační systémy
| Vlastnost | Real-time OS (RTOS) | General-purpose OS (např. Linux, Windows) |
|------------------|--------------------------------------|-------------------------------------------|
| Účel | Zaručení včasné odezvy | Všeobecné použití, výkon a univerzálnost |
| Determinismus | Vysoký (předvídatelné chování) | Nízký až střední |
| Scheduler | Priority-based, často preemptivní | Obecný, např. fair-share, round-robin |
| Latence | Nízká a deterministická | Vyšší a variabilní |
| Použití | Průmyslové řídicí systémy, automobily| PC, servery, mobily |
---
## Jaké jsou hlavní charakteristiky embedded systémů?
- **Specifický účel**: navržený pro konkrétní funkci (např. mikrovlnka, automobil).
- **Real-time požadavky**: často potřebují garantovat odezvu v časových limitech.
- **Omezené zdroje**: málo paměti, výpočetního výkonu, energie.
- **Spolehlivost**: často nasazeno v kritických aplikacích.
- **Nízká spotřeba energie**: důležité pro mobilní nebo bateriově napájená zařízení.
- **Často bez uživatelského rozhraní.**
---
## Kdy a proč použít general-purpose systém?
Používá se, když:
- Je potřeba univerzální prostředí pro běh různých aplikací.
- Reálný čas není kritický.
- Je dostupný dostatek zdrojů (RAM, CPU).
- Je požadováno komplexní GUI, síťové funkce, kompatibilita s desktopovým SW.
**Příklad**: vývojové platformy, servery, pracovní stanice.
---
## Rozdíl mezi hard a soft real-time systémem
- **Hard real-time**: Nedodržení časového limitu je **nepřijatelné** a může způsobit selhání systému.
*Příklad: airbag v autě.*
- **Soft real-time**: Nedodržení limitu není fatální, ale snižuje kvalitu služby.
*Příklad: přehrávání videa.*
---
## Co znamená „predictability“ v kontextu embedded systémů?
„Predictability“ (předvídatelnost) znamená, že lze **spolehlivě odhadnout chování systému v čase** – konkrétně dobu odezvy a dobu vykonání úloh.
Je klíčová pro **real-time aplikace**, kde je důležité splnění časových požadavků.
---
## Role více-jádrových procesorů v embedded systémech
- Umožňují **paralelní zpracování úloh**, zvyšují výkon bez zvyšování frekvence.
- Mohou být použity pro **oddělení kritických a méně důležitých úloh**.
- Umožňují **nižší energetickou spotřebu** při vyšším výkonu (nižší takt na více jádrech).
- Vhodné např. v automotive nebo multimédiích.
---
## Rozdíl mezi P-cores a E-cores (heterogenní multiprocesorové systémy)
- **P-cores (Performance cores)**: Výkonná jádra, vysoký výkon, vyšší spotřeba.
- **E-cores (Efficiency cores)**: Úsporná jádra, nízká spotřeba, menší výkon.
- **Heterogenní architektura** (např. ARM big.LITTLE, Intel Alder Lake): umožňuje efektivní rozdělení zátěže – těžké úlohy na P-cores, lehké/úsporné na E-cores.
- **Redukovaná instrukční sada**: E-cores mají často redukovanou jejich instrukční sadu
---
## Co jsou to „zero power systems“?
- Systémy, které **neodebírají žádnou energii**, když nejsou aktivní.
- Využívají ultra-nízkopříkonové komponenty a techniky, např. **wake-up circuits**, **event-driven design**.
- Používají se ve **senzorových sítích**, IoT, wearables.
---
## Co říká Mooreův zákon a jak se vztahuje k vývoji embedded systémů?
- Mooreův zákon říká, že počet tranzistorů na čipu se **přibližně zdvojnásobuje každých 18–24 měsíců**.
- Umožňuje miniaturizaci, vyšší výkon a levnější čipy.
**Dopad na embedded systémy:**
- Integrace více funkcí do jednoho čipu (SoC)
- Vyšší výpočetní výkon při nižší ceně
- Možnost použití komplexních OS (např. Linux) i na malých zařízeních
# Správa procesů a systémová volání
## Vyjmenuj a stručně popiš hlavní komponenty operačního systému
- **Správa procesů (Process Management)**: vytváření, ukončování a plánování procesů.
- **Správa paměti (Memory Management)**: přidělování paměti, stránkování, ochrana paměti.
- **Správa souborového systému (File System Management)**: přístup k souborům, adresářová struktura.
- **Správa zařízení (Device Management)**: ovladače zařízení, I/O fronty.
- **Správa uživatelů a zabezpečení**: přístupová práva, autentizace.
- **Systémové volání a API**: prostředník mezi uživatelskými programy a jádrem.
---
## Co je proces a jaké činnosti s procesy OS provádí?
**Proces** je běžící instance programu, která má vlastní adresní prostor, registr CPU, otevřené soubory atd.
**OS s procesy provádí:**
- Vytváření a ukončení procesů
- Naplánování na CPU (scheduler)
- Správa kontextu procesů
- Synchronizaci a komunikaci mezi procesy
- Ochranu paměti a izolaci
---
## Co je PCB (Process Control Block) a co obsahuje?
**PCB** je datová struktura, kterou OS používá k reprezentaci procesu.
**Obsahuje např.:**
- ID procesu (PID)
- Stav procesu (running, ready, waiting...)
- Registry CPU
- Ukazatel na paměťové oblasti
- Otevřené soubory
- Informace pro plánování (priorita, kvanta)
- Informace o rodiči/potomcích
---
## Jaký je rozdíl mezi procesem a vláknem (thread)?
| Vlastnost | Proces | Vlákn(o) (Thread) |
|-----------------|-----------------------------|---------------------------------|
| Adresní prostor | Vlastní | Sdílí s ostatními vlákny |
| Izolace | Úplná (paměť, data) | Minimální |
| Vytváření | Nákladnější (fork/exec) | Levnější (např. pthread_create) |
| Použití | Běh oddělených programů | Paralelizace v rámci programu |
---
## Jaký je rozdíl mezi API a systémovým voláním?
- **API (Application Programming Interface)**: Rozhraní knihoven, které usnadňuje používání systémových volání (např. POSIX `open()`).
- **Systémové volání (System Call)**: Přímý přechod z uživatelského režimu do režimu jádra k provedení chráněných operací (např. `int 0x80`, `syscall`).
---
## Jak funguje systémové volání na úrovni CPU (trap, interrupt, návrat)?
1. **Trap**: Software generuje přerušení (`trap` instrukce) pro volání jádra.
2. CPU přepne režim na **privilegovaný (kernel mode)**.
3. Provádí se obsluha systémového volání (dispatcher volá příslušnou funkci).
4. Po dokončení dojde k návratu do uživatelského režimu (`iret`, `sysret`).
---
## Jaký je rozdíl mezi user mode a system mode?
| Vlastnost | User Mode | System Mode (Kernel Mode) |
|-----------------|-------------------------------|---------------------------------------------|
| Přístup k HW | Omezený | Plný |
| Paměť | Izolována | Přístup ke všem částem paměti |
| Nebezpečí chyb | Nižší | Vysoce rizikové (může způsobit pád systému) |
| Volání jádra | Nepřímo přes systémové volání | Nativně |
---
## Jak OS zabraňuje procesům v přístupu k paměti jiných procesů?
- Pomocí **hardwarové podpory paměťové ochrany**:
- Stránkování (paging)
- Segmentace
- Každý proces má svůj **virtuální adresní prostor**.
- Přístupy mimo přidělený prostor vedou k **segmentation fault**.
- **MMU (Memory Management Unit)** mapuje virtuální adresy na fyzické.
---
## Co jsou ochranné prstence (rings) v x86?
- Prstence určují úroveň oprávnění:
- **Ring 0**: jádro OS (nejvyšší privilegia)
- **Ring 3**: běžné uživatelské aplikace
- Prstence 1 a 2 se běžně nepoužívají v běžných OS.
- Slouží k **ochraně systému před neautorizovaným přístupem**.
---
## Popiš základní fáze bootování x86 systému
1. **Reset**: CPU se spustí z reset vectoru (např. 0xFFFF0).
2. **BIOS/UEFI**: Inicializace HW a načtení zavaděče.
3. **Bootloader** (např. GRUB): Načte a spustí jádro OS.
4. **Kernel**: Inicializace jádra a ovladačů.
5. **Init systém** (např. systemd): Spustí uživatelské služby.
---
## Jaké jsou rozdíly mezi BIOS, UEFI, Coreboot a Libreboot?
| Vlastnost | BIOS | UEFI | Coreboot | Libreboot |
|---------------|----------------|--------------------|-----------------------|------------------------|
| Typ | Zastaralý | Moderní firmware | Open-source firmware | Plně svobodný firmware |
| Disk support | Do 2TB (MBR) | >2TB (GPT) | GPT podpora možná | GPT podpora |
| Grafické UI | Ne | Ano | Ne | Ne |
| Cíl | Kompatibilita | Výkon + bezpečnost | Open HW/rychlost | Svobodný SW |
---
## Co je to reset vector?
- Adresa v paměti, na které procesor po zapnutí/RESETU **začne vykonávat instrukce**.
- U x86: typicky fyzická adresa **0xFFFFFFF0** (BIOS) nebo definovaná v UEFI.
---
## Co je to kernel module a jaký je rozdíl oproti built-in části jádra?
- **Kernel module**: načitatelná komponenta jádra za běhu (např. ovladač).
- **Built-in**: pevně zkompilováno v jádře, nelze odebrat bez rekompilace.
- Výhoda modulů: **flexibilita, nižší paměťová náročnost, dynamické načítání**.
---
## Co je potřeba udělat při přepnutí kontextu?
1. Uložit stav běžícího procesu:
- Registry CPU
- Ukazatel zásobníku
- Program Counter
2. Obnovit stav nového procesu:
- Načíst registry
- Nastavit paměťový kontext
- Nastavit instrukční čítač
---
## Kdy ke kontextovému přepnutí dochází a proč?
Nastává při:
- Vypršení časového kvanta (u preemptivního plánovače)
- Čekání na I/O
- Dobrovolném uvolnění CPU (např. `sleep()`)
- Vyšší priorita jiného procesu
**Cíl**: efektivní sdílení CPU mezi více procesy.
# Výkon, spotřeba a plánování úloh
## Vztah mezi výkonem a energií
- **Výkon (performance)**: jak rychle se úloha dokončí (např. MIPS, FLOPS).
- **Energie (energy)**: celková spotřeba elektrické energie = příkon × čas.
- **Příkon (power)**: okamžitá spotřeba energie (Watt = Joule/s).
💡 Energie = Příkon × Čas
Zvýšení výkonu (zkrácení doby výpočtu) může snížit celkovou energii, i když příkon je vyšší.
---
## Kdy platí, že rychlejší výpočet znamená nižší spotřebu?
- Pokud úloha běží **rychleji**, může se systém dříve přepnout do úsporného režimu (sleep).
- Např.:
- **Race-to-sleep** strategie: co nejrychleji dokončit výpočet a přejít do hlubokého spánku.
- Platí, pokud rozdíl v příkonu není příliš velký.
---
## Vysvětli rozdíl mezi nízkým příkonem (low power) a nízkou spotřebou energie (low energy)
| Vlastnost | Low Power | Low Energy |
|-------------------|-------------------------------------|------------------------------------------|
| Co znamená | Nízký okamžitý příkon (W) | Nízká celková spotřeba (J) |
| Důraz | Dlouhodobý běh, úsporné komponenty | Rychlé dokončení výpočtu a vypnutí |
| Příklad | Hodinky, senzory | Mobilní CPU, které rychle vypočítá a spí |
---
## Z čeho se skládá spotřeba CMOS obvodů?
1. **Dynamická spotřeba (dominantní):**
- Nabíjení/vybíjení kapacitních zatížení (C × V² × f)
- Závislá na frekvenci a napětí
2. **Statická spotřeba:**
- Průsakové proudy (leakage current)
- Rostoucí problém u menších technologií (< 20nm)
---
## Co je to power gating a jak pomáhá?
- Technika vypínání **nepoužívaných částí čipu** (např. jádro CPU, cache).
- Odpojí napájení pomocí tranzistorů (tzv. sleep transistor).
- Výrazně sníží **statickou spotřebu**.
- Vyžaduje rychlé „probuzení“ při potřebě.
---
## Jak funguje Dynamic Voltage Scaling (DVS) a jak ovlivňuje výkon a spotřebu?
- **Snížení napětí (V)** snižuje výkon CPU, ale i spotřebu (díky kvadratické závislosti spotřeby na napětí: P ∝ V² × f).
- Lze jej použít, když není potřeba maximální výkon.
- Při nízkém zatížení šetří energii, ale může prodloužit výpočet.
---
## Co je DVFS (Dynamic Voltage and Frequency Scaling)?
- Rozšíření DVS – mění se **napětí i frekvence** CPU.
- Vysoká frekvence = vyšší výkon, ale vyšší spotřeba.
- Nízká frekvence + nízké napětí = úspora energie.
- Dynamicky řízeno OS (např. **cpufreq** v Linuxu).
---
## Jak se plánují úlohy na heterogenních procesorech (např. big.LITTLE architektura)?
- OS nebo plánovač rozhoduje:
- Která úloha se má spustit na **P-core** (výkonné) nebo **E-core** (úsporné).
- Cílem je **vyvážení mezi výkonem a spotřebou**.
- Např. nízkoprioritní úlohy → E-core, interaktivní úlohy → P-core.
---
## Jak se rozdělují úlohy podle energetických domén?
- Energetické domény = části čipu s vlastním napájením (např. GPU, CPU, DSP).
- Úlohy se přidělují tak, aby:
- Využívaly domény s optimálním poměrem výkon/energie.
- Nedocházelo k přetížení jednoho subsystému.
- Příklad: zpracování videa v DSP místo CPU → nižší spotřeba.
---
## Jaký je rozdíl mezi: Race-to-sleep vs. Crawl-to-sleep
| Strategie | Race-to-sleep | Crawl-to-sleep |
|-------------------|-----------------------------------|---------------------------------------|
| Princip | Rychlé dokončení a usnutí | Pomalý běh se sníženým výkonem |
| Výhoda | Krátký čas běhu, delší spánek | Nízký příkon |
| Použití | Když je přechod do spánku levný | Když je wake-up drahý nebo omezený |
---
## Co je DPM a jaké má režimy (RUN, IDLE, SLEEP)?
**DPM (Dynamic Power Management)** – techniky pro řízení napájení za běhu systému.
**Typické režimy:**
- **RUN** – plný výkon, maximální spotřeba.
- **IDLE** – CPU nic neprovádí, ale je připraven ihned reagovat.
- **SLEEP** – hlubší režim úspory, dlouhá reakční doba (vyžaduje „wake-up“).
# Plánování procesů – algoritmy a víceprocesorové systémy
## Rozdíl mezi preemptivním a nepreemptivním plánováním
- **Preemptivní**: proces může být **přerušen** OS ve prospěch jiného (např. vyšší priorita).
- **Nepreemptivní**: proces běží až do konce nebo do vlastní blokace (např. I/O).
**Výhoda preemptivního**: lepší odezva, férovost
**Nevýhoda**: vyšší režie (context switch)
---
## Jaké jsou žádoucí vlastnosti plánovače?
- **Férovost**: rovnocenná šance sdílení CPU
- **Efektivnost**: procesor trvale jede na 100%
- **Doba odezvy**: minimální odezva pro interaktivní uživatele
- **Doba běhu**: minimální čas čekání na vykonání zadání uživatele (dávky)
- **Průchodnost**: maximální čas procesů vykonaných během jedné čas. jednotky
---
## Co je stárnutí (aging) a jak pomáhá proti hladovění?
- **Aging** = postupné **zvyšování priority** dlouho čekajících procesů.
- Chrání proti **hladovění** (starvation) u algoritmů, které preferují krátké/urgentní procesy.
---
## Jaké problémy mohou nastat bez správného plánování?
- **Hladovění (starvation)**: proces nikdy nedostane CPU.
- **Zablokování (deadlock)**: skupina procesů čeká na zdroje od sebe navzájem.
- **Nízká propustnost**, **nefér přístup**, špatná odezva systému.
---
## Algoritmy plánování procesů
### FCFS (First-Come-First-Served) - FIFO lool
- **Princip**: úlohy se provádí v pořadí příchodu.
- **Preemptivní?**: Ne
- **Výhody**: jednoduchost
- **Nevýhody**: dlouhá čekací doba, **convoy effect**
- **Použití**: dávkové systémy
---
### SJF / SRTF (Shortest Job First / Shortest Remaining Time First)
- **SJF (Nepreemptivní)**: běží proces s nejkratší dobou provedení
- **SRTF (Preemptivní)**: běží proces s nejkratší zbývající dobou
<br/>
- **Výhody**: optimální průměrná čekací doba
- **Nevýhody**: potřeba znát délku procesu, náchylné k hladovění
- **Použití**: simulace, analytické systémy
---
### Priority scheduling
- **Princip**: procesy mají prioritu, běží ten s nejvyšší.
- **Preemptivní?**: Ano i Ne
- **Výhody**: řízení naléhavosti
- **Nevýhody**: hladovění nízkých priorit
- **Řešení**: aging
---
### Round Robin
- **Princip**: každý proces dostane **časové kvantum**.
- **Preemptivní?**: Ano
- **Výhody**: férové, dobrá odezva
- **Nevýhody**: závislost na délce kvanta
- **Použití**: interaktivní systémy
---
### Multilevel Queue Scheduling
- **Princip**: fronty podle typu úloh (např. systémové, uživatelské).
- Každá fronta má vlastní plánovací algoritmus.
- **Nevýhody**: statické, neumožňuje pohyb mezi frontami.
---
### Multilevel Feedback Queue
- **Princip**: jako multilevel queue, ale **umožňuje přesun** mezi frontami na základě chování procesu.
- **Výhody**: adaptivní, flexibilní
- **Nevýhody**: složitá implementace
- **Použití**: Unix/Linux plánovače
---
### Lottery Scheduling
- **Princip**: každému procesu přiděleny "lístky", náhodné losování.
- **Preemptivní?**: Ano
- **Výhody**: jednoduché, probabilisticky férové
- **Nevýhody**: náhodnost
- **Použití**: výzkumné OS, experimenty
---
## Co je technologie big.LITTLE? Jaké jsou její výhody a rizika?
- **big.LITTLE**: kombinace výkonných (big) a úsporných (LITTLE) jader. (efficiency a power cores)
- **Výhody**: úspora energie, možnost paralelního zpracování
- **Rizika**:
- Složitější plánování
- Nekompatibilita v registrech/ISA (např. různé výkonové charakteristiky)
- Možné problémy se synchronizací
---
## Rozdíl mezi asymetrickým a symetrickým víceprocesorovým plánováním
| Typ | Asymetrické (AMP) | Symetrické (SMP) |
|-----------------|----------------------------|-------------------------------|
| Plánování | Pouze jeden CPU plánuje | Každý CPU má vlastní plánovač |
| Komplexita | Nižší | Vyšší, nutná synchronizace |
| Výhoda | Jednoduché, predikovatelné | Lepší škálování, využití CPU |
---
## Co je procesorová afinita (soft vs hard)?
- **Procesorová afinita**: určuje, na kterých jádrech smí běžet proces.
| Typ | Popis |
|----------|--------------------------------------------|
| **Soft** | preferované jádro, ale OS může změnit |
| **Hard** | pevně vázané, OS nesmí měnit |
---
## Jak funguje load balancing mezi procesory (push vs pull migration)?
- **Push migration**: plánovač aktivně přesune proces z přetíženého CPU.
- **Pull migration**: nevyužitý CPU si "vytáhne" úlohu z jiného.
- Cíl: rovnoměrné zatížení všech CPU.
---
## Jaké problémy řeší locky, cache coherence a sdílená data v SMP (Symetric MultiProcessing) systémech?
- **Locky**: zabránění kolizím při přístupu ke sdíleným datům. (řešení kritické sekce)
- **Cache coherence**: zajištění konzistence dat mezi více CPU cache.
- **Sdílená data**: riziko race conditions, potřeba synchronizace.
---
## Co jsou C-stavy (C0–Cn) – lokální režimy spánku CPU?
- **C-stavy** definují úroveň nečinnosti jednotlivých CPU.
- **C0**: aktivní běh
- **C1–Cn**: stále hlubší režimy spánku (nižší spotřeba, vyšší latence probuzení)
- Volí se podle vytížení a požadavků na odezvu.
---
## Co jsou S-stavy (S1–S5) – globální systémové stavy?
- **S-stavy** (ACPI power states) určují **globální** napájecí režim systému.
| Stav | Popis |
|------|--------------------------------|
| S0 | Systém běží |
| S1 | CPU stopped, RAM aktivní |
| S2 | CPU no power, RAM aktivní |
| S3 | Suspend to RAM (sleep) |
| S4 | Suspend to disk (hibernace) |
| S5 | Vypnuto |
# Souborové systémy – obecně i specificky (FAT, ext, NTFS)
## Co je souborový systém a jaké funkce plní?
Souborový systém (FS) je metoda organizace, ukládání a správy dat na úložišti.
**Funkce:**
- Ukládání a načítání souborů
- Hierarchická struktura (adresáře)
- Přístupová práva a metadata
- Správa volného místa
- Odolnost proti chybám (žurnálování apod.)
---
## Jak jsou organizovány data na úložišti?
- **Sektor**: nejmenší adresovatelná jednotka HW (např. 512 B, 4 KB)
- **Blok (Cluster)**: 1 nebo více sektorů
---
## Jak funguje hierarchická struktura adresářů?
- Stromová struktura: složky mohou obsahovat soubory i další složky.
- Každý adresář obsahuje záznamy s názvy a ukazateli (např. inode čísla).
- Cesta k souboru může být absolutní (od rootu) nebo relativní.
---
## Co je to root filesystem? Jak se liší od kernelu?
- **Root filesystem** je hlavní adresářová struktura systému, dostupná pod `/`.
- Obsahuje např. `/bin`, `/etc`, `/usr`, `/home`.
- **Kernel** je součást OS, stará se o nízkoúrovňové operace; není to souborový systém. Je to jiná entita
---
## Co je VFS (Virtual File System) a jakou roli hraje?
- Abstrakce nad konkrétními FS – jednotné API (např. `open()`, `read()`).
- OS může používat různé FS (ext4, FAT, NTFS…) bez změny v aplikacích.
---
## Jaké typy souborových systémů Linux podporuje?
- **Nativní**: ext2, ext3, ext4, XFS, Btrfs, ReiserFS
- **Virtuální**: procfs, sysfs, tmpfs, devtmpfs
- **Síťové**: NFS, SMB, SSHFS
- **Cizí**: FAT, NTFS (přes FUSE nebo ntfs3)
---
## Co je FUSE a jak umožňuje uživatelské implementace FS?
- **FUSE (Filesystem in Userspace)**: rozhraní pro tvorbu FS mimo kernel.
- Vývojáři mohou napsat FS v uživatelském prostoru (např. v Pythonu).
- Jádro komunikuje s uživatelským démonem přes FUSE modul.
---
## Jaké jsou typické aplikace FUSE souborových systémů?
- EncFS, SSHFS, archivní FS (ZIP jako FS), síťové FS, šifrování na úrovni FS
---
## Jak probíhá bootování z pohledu souborového systému?
1. **Bootloader** načte kernel a případně initramfs.
2. **Kernel** připojí rootfs.
3. Spustí init proces (`/sbin/init`, `systemd`).
---
## Co je initramfs, rootfs, a jak se používají?
- **initramfs**: dočasný kořenový FS (v RAM), obsahuje init skripty a ovladače.
- initramfs slouží k inicializaci HW, pak se připojí skutečný root.
- **rootfs**: cílový FS připojený jako `/`.
---
## Co je MBR (Master Boot Record) a jak je strukturován?
- Prvních 512 B disku.
- Obsahuje:
- **bootloader** (446 B)
- **partition table** (4 záznamy po 16 B)
- **boot signatura** (2 B) - 0x55aa
- Omezení: max. 4 primární oddíly, disk do 2 TB.
---
## Co je GPT (GUID Partition Table) a jaké výhody přináší?
- Novější standard (součást UEFI).
- Podpora až 128 oddílů, disky větší než 2 TB.
- Redundantní záznamy pro vyšší odolnost.
- Každý oddíl má **GUID**, název, atributy.
- Struktura
- Na začátku Protective MBR (ochrana pro legacy toolky)
- Hlavička GPT
- GUID disku
- Kde tabulky oddílů?
- Primární i backup
- Velikost položky
- Kolik místa zabírá jeden záznam o partition v této tabulce
- Počet položek oddílů
- Kolik lze na disku udělat partitions?
- CRC (corrupted -> použij backup)
- Tabulka oddílů
- Jednotlivé záznamy
- GUID typu oddílu
- EFI sys oddíl?
- Windows data oddíl?
- Linux oddíl?
- GUID oddílu
- Počáteční a koncová LBA oddílu
- Prostě kde je (od - do)
- Atributy oddílu
- Např bootable?
- Název (human readable - až 36 unicode)
- Záloha GPT
- Na konci -> nejdřív tabulka, pak header
---
## Rozdíl mezi MBR a GPT? Kdy se používají?
| Vlastnost | MBR | GPT |
|----------------|-----------------------|---------------------------|
| Max. velikost | 2 TB | > 2 TB |
| Počet oddílů | 4 primární | až 128 |
| Redundance | Ne | Ano (záložní tabulka) |
| Použití | Starší BIOS systémy | Nové systémy s UEFI |
---
## Jak funguje FAT12/16/32 – struktura a princip práce?
- **struktura**: MBR, FAT table, (Root direcotry), Data
- Používá **FAT tabulku**, která sleduje řetězec bloků souboru.
- **FAT12**: pro disky do 32 MB
**FAT16**: do 2 GB
**FAT32**: až 32 GB (někdy i víc, omezeno OS)
---
## Co je FAT tabulka? Jak se používá?
- Tabulka s ukazateli na další cluster souboru (formou linked-listu).
- Každý záznam říká, kde pokračuje obsah souboru.
---
## Jak FAT řeší dlouhé názvy souborů?
- Používá **VFAT**: speciální záznamy v adresáři s Unicode jmény.
- Soubory mají stále 8.3 (AAAAAAAA.BBB) kompatibilní jméno (DOS-style).
---
## Jaké jsou výhody a nevýhody FAT16/FAT32?
**Výhody:**
- Široká podpora (OS, zařízení)
- Jednoduchost
- Efektivnost zvlášť pro zařízení menší než 256MB
**Nevýhody:**
- Fragmentace
- Bez žurnálování
- FAT16: malá max. velikost
- FAT32: omezení velikosti souboru (4 GB)
---
## Jaké novinky přináší exFAT oproti FAT32?
- Vyšší limity velikosti souborů i oddílů
- Vylepšená alokace (bitmapa volných clusterů)
- Podpora větších clusterů
- Licencováno Microsoftem (Linux: exfat-utils, exfat-fuse)
---
## Co je inode a co obsahuje? Proč není jméno souboru součástí inode?
- **inode** je datová struktura popisující soubor.
- Obsahuje:
- Velikost, přístupová práva, časová metadata
- Ukazatele na datové bloky
- **Jméno není součástí** inode → umožňuje hardlinky
---
## Jak funguje adresář v ext2/ext3?
- Adresář je soubor obsahující páry:
- **jméno souboru** + **číslo inode**
- Vyhledání probíhá porovnáním jmen.
---
## Popiš strukturu souborového systému ext2
- **Superblok** – metadata FS (velikost, počet inode…)
- **Skupiny bloků (block groups)**:
- Bitmapy bloků a inode
- Tabulka inode
- Datové bloky
---
## Jak se ext2/ext3/ext4 liší v použitelnosti a výkonu?
| Vlastnost | ext2 | ext3 | ext4 |
|-----------|--------------|-------------------|---------------------------------|
| Žurnál | Ne | Ano | Ano |
| Výkon | Rychlý zápis | Odolný vůči pádům | Lepší škálování |
| Funkce | Základní | Spolehlivý | Extents, multibloky, timestamps |
-----
## Srovnání souborových systémů Ext2, Ext3 a Ext4
| Vlastnost / Souborový systém | Ext2 (1993) | Ext3 (2001) | Ext4 (2008) |
| :--------------------------- | :---------- | :---------- | :---------- |
| **Základní vlastnosti** | Tradiční Unix inode; funkce z Unix File System | Vše z Ext2 + žurnálování | Vše z Ext3 + extenty, 48bit adresace |
| **Žurnálování (Journaling)** | Ne | Ano (3 typy: writeback, ordered, data) | Ano (výchozí: ordered) |
| **Maximální velikost svazku** | 32 TB | 32 TB | 1 EB (Exabajt) |
| **Maximální velikost souboru** | 2 TB | 2 TB | 16 TB (s 4 KiB bloky) |
| **Extenty** | Ne | Ne | Ano (souvislé bloky, zlepšuje výkon a snižuje fragmentaci) |
| **Počet podadresářů** | Omezeno (max 32 000) | Omezeno (max 32 000) | Neomezeno (dříve 64 000) |
| **Indexování adresářů** | Ne | HTree (32bit) | HTree (64bit) |
| **Online zvětšování FS** | Ne | Ano | Ano |
| **Rezerva pro superuživatele**| \~5% bloků | \~5% bloků | Nastavitelné (výchozí 5%) |
| **Volitelná velikost bloku** | Ano (1, 2, 4 KiB) | Ano (1, 2, 4 KiB) | Ano (1, 2, 4 KiB) |
| **Sledování stavu FS** | Ano | Ano | Ano |
| **Časová razítka** | Modifikace dat | Modifikace dat | Zlepšená přesnost (nanosekundy), vytvoření, přístup, modifikace |
| **Atributy souborů/adresářů** | Ano | Ano | Ano |
| **Checksumming (kontrola integrity)** | Ne | Ne (pouze žurnál) | Žurnál, metadata (volitelné) |
| **Perzistentní pre-alokace** | Ne | Ne | Ano (rezervace místa na disku pro soubor, zabraňuje fragmentaci) |
| **Transparentní šifrování** | Ne | Ne | Ano (od jádra Linux 4.1, prostřednictvím fscrypt) |
| **Odložená alokace (Delayed allocation)** | Ne | Ne | Ano (data nejsou zapsána okamžitě, ale po nashromáždění, zlepšuje výkon) |
| **Rychlejší kontrola FS (fsck)** | Pomalejší | Pomalejší | Rychlejší (díky inode tabulkám a skupinám) |
| **Zpětná kompatibilita** | Kompatibilní s Ext3/Ext4 | Kompatibilní s Ext2; s Ext4 lze připojit | Kompatibilní s Ext2/Ext3 (lze připojit jako Ext3) |
-----
### Další rozdíly a detaily
| Vlastnost | Detaily |
| :------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Typy žurnálování (Ext3)** | **Writeback:** Zapisuje pouze metadata do žurnálu. Nejrychlejší, ale při pádu může dojít ke zmatení metadat a dat. \<br\> **Ordered:** Zapisuje metadata do žurnálu a zajišťuje, že data jsou zapsána na disk před metadaty. Dobrý kompromis mezi bezpečností a výkonem. \<br\> **Data:** Zapisuje jak metadata, tak i data do žurnálu. Nejpomalejší, ale nejbezpečnější, zajišťuje nejvyšší integritu dat. |
| **HTree Indexování** | Zlepšuje výkon pro velké adresáře tím, že organizuje položky adresářů do hashovaných stromů, což urychluje vyhledávání. |
| **Inode size (Ext4)** | Standardně 256 bytů (oproti 128 bytů u Ext2/Ext3), což umožňuje více místa pro atributy a časová razítka s vyšší přesností. |
| **Online defragmentace (Ext4)** | Existují nástroje jako `e4defrag`, které umožňují defragmentaci za běhu systému, i když extenty snižují její nutnost. |
| **Záměna souborů (Ext4)** | `fallocate()` systémové volání pro efektivní alokaci místa pro soubory, což je užitečné pro databázové aplikace a virtuální stroje. |
| **Odolnost proti chybám** | Ext4 je díky checksummingu žurnálu a metadat, perzistentní pre-alokaci a dalším vylepšením robustnější proti korupci dat při výpadcích napájení. |
| **Podpora velkých souborů** | Díky 48bitové blokové adresaci a extentům Ext4 výrazně navyšuje limity pro velikost souborů a celých svazků, což je klíčové pro moderní datová centra. |
---
## Co dělají nástroje fsck, debugfs a kdy se používají?
- **fsck**: kontrola a oprava konzistence FS (po pádu, chybě).
- **debugfs**: nástroj pro ruční prohlížení/ext2/3/4 FS (analýza, vývoj).
---
## Jaký je účel žurnálu u ext3/ext4?
- Zajišťuje **konzistenci FS po výpadku**.
- Změny se nejdříve zapisují do žurnálu → po potvrzení se aplikují do FS.
- Zrychluje obnovu po pádu (není třeba úplný fsck).
---
## Jak se obnovuje konzistence FS po pádu systému?
- Pomocí:
- **Journalingu** (ext3/ext4)
- **fsck**: provádí kontrolu a opravu
- U non-journal FS (ext2) trvá déle a může dojít ke ztrátám.
---
## Jaké klíčové vlastnosti přináší NTFS?
- **Žurnálování**
- **ACL (Access Control Lists)**
- **Šifrování (EFS)**
- **Diskové kvóty**
- **Komprese**
- **Alternativní datové streamy**
---
## Co je $MFT a jak je strukturováno?
- **Master File Table (MFT)**: hlavní databáze NTFS
- Každý soubor = záznam v MFT
- Obsahuje:
- Metadata (název, velikost)
- Ukazatele na datové bloky
- Atributy (bezpečnost, timestamps)
---
## Co je MTD zařízení a proč se nepoužívá klasické blokové FS?
- **MTD (Memory Technology Device)**: rozhraní pro přístup k flash pamětem
- Používá se pro **raw flash** (bez řadiče)
- Potřebuje specifické FS: JFFS2, YAFFS, UBIFS
---
## Jak funguje zápis do flash (circular log, wear leveling)?
- Flash paměti nelze přepisovat po jednotlivých bajtech.
- Nutné:
- **Mazat celé bloky**
- **Wear leveling**: rovnoměrné opotřebení
- **Log-structured FS**: nové zápisy do volného místa, staré se označí jako neplatné
# Flash paměti a specifické souborové systémy
## Proč klasické FS nejsou vhodné pro flash čipy?
Klasické souborové systémy (např. ext4, FAT) předpokládají:
- Náhodný přístup,
- Časté přepisování bloků,
- Žádné omezení na počet zápisů.
**Flash paměti však:**
- Mají **omezený počet zápisů/mazání** na blok,
- Vyžadují **mazání po větších blocích** (např. 128–512 KB),
- Nelze přepsat záznam přímo → nutnost přepsat celý blok.
📌 Výsledkem by byla rychlá degradace flash paměti a nízká životnost.
---
## Co je MTD zařízení a proč se nepoužívá klasické blokové FS?
- **MTD (Memory Technology Device)** je rozhraní v Linuxu pro **raw flash** paměti (bez FTL – flash translation layer).
- Přímo zpřístupňuje paměť typu NOR/NAND (bez simulace bloku).
- Klasické FS (ext4, FAT) **neumí pracovat s požadavkem mazání po blocích** a s wear levelingem → selhání a poškození paměti.
📌 Proto se používají speciální FS, které s těmito omezeními počítají.
---
## Jak funguje zápis do flash (circular log, wear leveling)?
- **Log-structured FS**: místo přepisování zapisuje nová data **na nové místo**.
- Staré bloky jsou označeny jako **neplatné**, mazány později (garbage collection).
- **Wear leveling**: algoritmus, který se snaží **rovnoměrně opotřebovávat** bloky flash paměti.
- Dva typy:
- **Static**: přesun i často neměněných dat
- **Dynamic**: rotace pouze měněných bloků
---
## Příklady FS vhodných pro flash
| FS | Vhodný pro | Vlastnosti |
|------------|----------------|------------------------------------------------------------|
| **JFFS2** | NAND/NOR (MTD) | Log-struktura, komprese, pomalé mountování |
| **YAFFS2** | NAND (MTD) | Rychlejší než JFFS2, jednoduchost |
| **UBIFS** | NAND (MTD) | Nahrazuje JFFS2/YAFFS2, lepší škálování |
| **F2FS** | eMMC/SD (s FTL)| Flash-friendly FS od Samsungu, běží nad blokovým zařízením |
---
## Shrnutí rozdílů mezi klasickými a flash-friendly FS
| Vlastnost | Klasické FS (ext4, FAT) | Flash-friendly FS (UBIFS, F2FS) |
|-----------------------|--------------------------|----------------------------------|
| Zápis na místo | Ano | Ne – vždy nový záznam |
| Mazání před zápisem | Neřeší | Ano – správa bloků |
| Wear leveling | Není | Ano |
| Pomalý zápis | Možný | Optimalizovaný pro flash |
| Žurnálování | ext3/4 – ano | Různé přístupy (log, checkpoint) |
# Letem světem Filesystémy
## FAT - File allocation table
- klasicky 2 kopie FAT
- FAT12, 16, 32 -> význam -> kolik bitů pro FAT entry
- Boot sector - reserved sectors - FAT1 - FAT2 - Root folder - Data
- 4 oblasti zvlášť pro každou partition
- Boot record - na začátku partition
- Definuje partition a říká, kde jsou ostatní 3 oblasti dané partition
- Jestli je to bootable, obsahuje taky kód potřebný pro boot
- FAT (1, 2) - lookup table jako linked list
- Root dir
- Fixed délka, hned za FAT ve FAT12 a FAT16
- Data
- Partition je rozdělena do clusterů (2 kB ~ 32 kB)
- Soubor je chain clusterů
- **Stavy clusteru** ve FAT
- Unused
- Used by a file (neposlední - ukazuje dál)
- Last cluster in a file
- Bad cluster
- FAT entry
- Name (8.3)
- Atributy (1 byte)
- Create time, date (3 + 2 bytes)
- Last access date (2 bytes)
- Last modified time, date (2+2)
- Starting cluster (2 nebo 4)
- File size (4)
- Long names
- Pro VFAT -> nemají nativně 12 a 16
- 32 už má VFAT v sobě, takže tam už nativně
- Další entries (jsou před tím reálným entry, ta první (resp. poslední - jsou v opačném pořadí) má název ORnutý s 0x40), každý má 13 dalších unicode znaků
- Pak teprv ten reálný s 8.3, kde se nechá přípona a na poslední místa fname (8) se dává "-1"
- Atribut LFN
- Pozná se to podle checksumu asi - každý má checksum toho 8.3
- Limity
- Max 512 root entries
- FAT16 max 65536 clusterů
- Neefektivní na větších partitionech
- Žádná komprese a securita
### exFAT
- File size: 16 EB
- Disk size: 128 PB
- Metadata integrity - checksums
- Performance++ (allocation bitmap)
- Podpora transakcí (optional)
- Stream extension
- File directory entry (atributy, timestamp)
- Stream extension entry
- Data length (velikost souboru)
- Valid data length (kolik je platných dat - zbytek může být naalokovaný, ale ještě nevynulovaný)
- First cluster
- Cluster count
- Flags (souvislé nebo je nutné projít FAT?)
- Souvislý - start + count
- Nemusí být ve FAT - pro hledání free místa je bitmapa, takže se nemusíme srát s FAT
- Nesouvislý - FAT
## Ext - Extended file system
### Ext
- File size: 2 GB
- Partition size: 2 GB
- První systém
- Fname: 255
- Jen jedna timestamp (created)
- Přesnost na sekundy
- Pro free space --> linked-list
### Ext2
- File size: 2 TB
- Volume size: 32 TB
- **Cca 5 % bloků je rezervovaných pro superusera**
- ACL (oprávnění)
- Extended Attributes
- Logický blok může nastavit admin (1, 2, 4 kiB)
- Modification timestamp
- Přesnost na sekundy
- Data structure
- Místo rozděleno na bloky --> block groups
- Boot sector - [block groups]
- Block group
- Superblock (v pozdějších revizích jen některé groupy)
- Group descriptor
- Block bitmap
- Inode bitmap
- Inode table
- Data blocks
- **Bitmapy** mapují, které bloky a které inodes jsou použity
- **Superblock**
- **Metainfo o celém FS**
- **Popisuje basic size and shape**
- Co to je za fs?
- Jak velké jsou bloky?
- Kolik bloků (obsazených / volných) tam je?
- Kolik inodes (obsazených / volných)?
- **Inode** = základní stavební kámen
- **Každý soubor (složka) je popsán právě jedním inode (128 bytů)**
- Název nemá - inode je basically link na ten soubor - podporuje tak hardlinky jednoduše
- Složky (resp. entries) jsou ve formátu "**inode** - rec_len - name_len - file_type - **name**"
- Každý řádek je link
- Soubory se hledají pomocí full path a po levelech se takhle sestupuje po inodech
- Obsahuje všechny důležité informace:
- Mode
- Owner info
- 3 timestampy
- **Datablocky**
- Pointery na bloky s daty
- 12 direct blocků (ptr -> data)
- Každý z nich má kapacitu 1 * block_size
- single indirect (ptr -> blok pointerů -> data)
- Když máme 4kB block a ptr délky 4B, tak to je 1024 pointerů na block -> 1024 * 4kb = 4 MB pro 1 single indirect
- double indirect (ptr -> blok pointerů -> blok pointerů -> data)
- 1024 * 1024 * 4096 = 4 GB
- triple indirect
- 1024 * 1024 * 1024 * 4096 = 4 TB
- Limit ext2/3 je 2TB, protože je tam 32bit field "i_blocks" -> kolik má inode bloků. A tam se vleze jen 2^32 => 2 TB
- Superblock + Inodes -> jsou systémové propky -> mají fixed format a nejdou přímo upravovat
### Ext3
- File size: 2 TB
- Volume size: 32 TB
- Jde předělat na ext2 a naopak bez backup / repartitioning
- Ext2 je furt lepší na flashky, protože míň zápisů (ne journal)
- Nové featury
- **Žurnál**
- **Online FS growth**
- HTree indexing pro větší složky (32bit)
- Žurnál levely
- **Journal** (lowest risk) - vše se píše do žurnálu před commitem do FS
- **Ordered** (medium risk) - jen metadata do žurnálu; nejdřív zápis dat, pak commit metadat
- **Writeback** (highest risk) - jen metadata do žurnálu
- Block allocator
- Začíná ze stejné groupy, kde je daná inode struktura (kde je složka, do které píšu) - ať je to blízko u sebe
- **Konkurence**
- -> block reservation
- Pořád bitmapy na free block reservation
- Nevýhody
- Max 31 998 podsložek ve složce
- Není online defrag
- Čas jako 32bit unix (max 2038)
### Ext4
- File size: **16TB**
- Volume size: **1EB**
- obojí pro 4kB block size
- **48bit block adresace**
- **Extent**
- Mapuje části souborů na oblasti (range bloků)
- Větší soubory - extent tree
- Neomezený počet podsložek
- **Checksum**
- Metadata a Journal
- Alokace bloků
- **Multiblock allocator**
- **Persistent prealloc**
- Aplikace řekne
- **Delayed alloc**
- Alokuje až na flush(), ne na write()
- Spojí se tak víc alokací do jendoho requestu -> menší fragmentace, šetří CPU
- Online defrag
- Lepší timestamps
- Nanosekundy
- Transparent encryption
### FSCK - File System ChecK
- A taky chdsk
- Když systém crashne - disk nemusí být konzistentní
- Scan všech inodů -> každý blok musí náležet právě jednomu inodu, NEBO je na free listu
- Počet linků na každý soubor musí být korektní (prohledání všech složek)
- Většinou nabízí fix
- Plus další checky
## NTFS
- **Nástupce FAT**
- **Journaling**
- **Encryption**
- **ACL**
- **ADS (Alternativní data streamy)**
- **Komprese**
- **Sparse files**
- **Disk quotas**
- **Reparse points**
### NTFS
- Vše je soubor
- **$MFT** - Master File Table
- Záznam pro každý soubor a složku (včetně sebe)
- Záznamy 1024 B
- Header "FILE" pro identifikaci záznamu
- Struktura záznamu
- Header - Attributes
- Common atributy
- $Standard_Information
- Má flagy, timestampy apod
- $File_Name
- Názvy souboru -> normální název i 8.3 pro zpětnou kompatibilitu
- $Data
- Ukazuje na data souboru
- **Formát "start cluster - length" pro každý soubor**
- Pokud je soubor malý - data jsou přímo v $Data
- 12 % disku je alokováno pro $MFT
- 64bit timestampy -> stovky nanosekund od 1601
- Created
- Modified
- Accessed
- MFT entry modified
- Velikost souboru
- Logická => Jak velký se ten soubor tváří pro aplikaci (sparse files)
- Initialized => kolik dat tam reálně je zapsaných
- Fyzická => kolik místa to zabírá (bloky)
- Sparse files
- Časté pro virtuální disky (virtualbox)
- Taky pro databáze apod
- Soubor může mít plno volného místa, jen některé oblasti s reálnými daty
- Real oblasti se smrsknou k sobě a zapíšou na disk
- Prázdné oblasti (sparse zeros) -> nejsou zapsány na disku -> když se na ně aplikace zeptá, FS vrátí nuly
- ADS - Alternativní Data Streamy
- Každý soubor má $Data stream (nepojmenovaný) - ten jde normálně vidět
- Další pojmenované streamy
- example.txt:stream1
- Viditelné jen pro NTFS volumes
- Často pro metadata apod.
- Lze zobrazit např. pomocí dir /r
- Normálně (obyč. dir nebo explorer) vidět nejsou
- Umožňuje takhle nenápadně schovávat např. malware nebo jiná data (moderní toolky to ale prozkoumávají)
- USN Journal a $LogFile
- USN = Update Sequence Number
- Při vytvoření / smazání / změně souboru (složky) se udělají entries do \$UsnJrnl:\$J
- Featura pro rychlý recover
- $LogFile
- Pro obnovu konzistence metadat po sys failu
- Má INDX, MFT a LNK records
## MTD - Memory technology device
- FTL - Flash Translation Layer (řadič flash paměti)
- Stará se o flash paměť
- Eraseblock - data lze mazat jen po velkých blocích
- Wear levelling
- Detekce a správa špatných bloků
- Když flash paměť nemá FTL (řadič) - musí se o to postarat FS -> MTD
- MTD je abstrakční vrstva pro flash paměti
- Umožňuje práci
- **Nestará se o wear levelling ani o špatné bloky**
- Zpřístupňuje zařízení jako character nebo block devices
- /dev/mtdX
- /dev/mtdblockX -> ještě k tomu neefektivní zápis (mazání po blocích)
- Aby to zajišťovalo flash-aware funkce, je potřeba FS, který to řeší
- JFFS2, YAFFS, UBIFS
- Při použití klasických FS dochází k rychlému opotřebení a neefektivní práci
### JFFS
- Log structured FS
- Operuje přímo na flash pamětech
- Stará se o wear levelling
- **Enforcuje to - chová se k tomu jako k circular logu**
- Každá změna se zapisuje na konec logu v nodech
#### JFFSv1
- V logu jenom jeden typ node (jffs_raw_inode)
- Každý node asociovaný s jedním inode
- Header s inode num, sys metadata pro inode, může mít trochu dat
- **Každý node má verzi - zapisuje se vždy verze vyšší než mají ostatní nody pro tu samou inode**
- Inode nums - 32bit - nikdy se nerecyklují
- Každý zápis upravuje ten log
- Node 1 - zapiš data
- Node 2 - přidej data
- Node 3 - přepiš část dat ...
- Některé nody jsou zbytečné (dirty space) - byly přepsány
- Garbage collector - nechá jen ty reálně potřebné nody
- Smaže všechny a ty užitečné napíše na nové místo na konec - circular
#### JFFSv2
- Podporuje NAND flashky
- Hard links
- Komprese
- **Bloky** - velikost = erase segment flash média
- Něco málo si drží v RAM (jffs2_raw_node_ref)
- Bloky se postupně plní (jeden za druhým)
- Clean - má jen validní nody
- Dirty - má aspoň jeden obsolete node a bude potřebovat garbage collection
- Free - žádné nody
## FS Summary
### Klasické
- Linked FS
- Všechna data jako singly linked list (data + odkaz na další cluster)
- FAT
- Allocation table - linked list je v FAT, data zvlášť samostatně
- NTFS
- Všechny soubory a složky v MFT, odkaz na data jako seznam dvojic "start, len"
- Inode
- Data v inode (právě 1 pro každý soubor) a 12 direct pointerů a 3x indirect (single, double, triple)
### Mobile devices
- Block devices
- Ext2 - vše super, jen není úplně space efficient
- cramfs - malý FS (compressed rom fs), good pro embedded, **read onlyš**
- squashfs - Větší (pokročilejší), super komprese ale horší performance
- romfs - malý kernel module, nemá kompresi
- Flash
- JFFS2 - Ok, ale slabý výkon (hlavně mount + write time)
- YAFFS2 - NAND flashky, taky trošku lackuje výkon
- Memory
- initramfs - kompletní support na permissions a ownership, načítá se do ram při startu systému (není persistent)