UNIX 8. Systém souborů © Milan Keršlágerhttp:// Obsah: ● systém souborů, data, metadata ● pásky, diskety, pevné disky, SSD ● MBR, oddíl, CHS, LBA, sektor, cluster ● FAT, ext4 (skupiny, superblok, i-node, adresář) ● VFS, mount, fsck, mkfs ● fragmentace, žurnálování, děravé soubory, extenty ● rozsáhlé adresáře, síťové FS (NFS, GFS, AFS)
Systém souborů – FS ● též souborový systém, anglicky filesystem ● data organizovaná do souborů a adresářů ● uloženo na vhodné paměti pro FS ● přístupné přímo v počítači nebo přes síť ● obsahuje data a metadata ● metadata popisují organizaci dat ● uloženo ve vhodném formátu – FAT, ext4, NTFS,... ● v jádře OS ovladač souborového systému
Organizace FS ● soubory a adresáře ● metadata ● popisují organizaci dat a další informace – umístění dat, přístupová oprávnění, čas změny,... ● data ● souvislý blok dat – ideální stav, ale jak budeme doplňovat a mazat data? ● jednotlivé alokační jednotky – klasický přístup
Metadata ● „data o datech“ ● v reálném životě např. katalog v knihovně ● obsahují informace nutné pro orientaci ve FS ● popisují soubory, adresáře a další informace o FS ● konzistence metadat ● důležité pro činnost jádra OS ● při poškození nutno opravit ( fsck, chkdsk )
Paměť pro FS ● typicky nevolatilní RWM (Read-Write Memory) ● data lze zapisovat (přepisovat) a číst ● data jsou zachována i při odpojení napájení – pevný disk, flash – výjimky: FS v RAM (rychlost, export dat z jádra,...) ● možné typy pamětí ● magnetické – pevný disk (sekvenční a přímý přístup) ● optické – CD, DVD, Blu-ray ● polovodičové – RAM, Flash ● samozřejmě i jiné typy
Magnetická páska ● předek disket i pevných disků ● souvislý pás s magnetickou vrstvou ● vynalezeno 1935 firmy AEG a BASF ● pro data 1951 – UNIVAC I – v 2. polovině 20. století symbolizovala „počítač“ ● data zaznamenána souvisle ● lineární zápis (páska je vždy znovu celá přepsána) ● „soubory“ a mezi nimi speciální značky – magnetickopásková jednotka umí značky vyhledat – relativně pomalé přesuny → sekvenční přístup
Disketa – FDD ● evoluční krok od magnetické pásky ● blokové zařízení (512 bajt) – podle mg. pásky ● médium naneseno na kotoučku ● floppy disk – disketa (pružný disk) ● 1971 – 8 palců, 1976 – 5,25“, 1984 – 3,5“ ● ale i jiné (např. ZIP) ● snadný transport, rozumná kapacita ● relativně robusní ● 160, 360, 720 kiB, 1,2 MiB, 1,44 MiB a 2,88 MiB
Pevný disk – HDD ● evoluční krok od diskety ● 1956 – IBM ● plovoucí hlava – bezkontaktní čtení/zápis ● typicky pevně vestavěn ● specifická rozhraní ● 1986 – SCSI, 1986 – ATA (max. 128 GB) ● 2002 – ATA/100, 2003 – SATA, 2005 – SAS ● SSD disk ● používá flash paměť → bez mechanických částí
Organizace dat – HDD ● kvůli větší kapacitě zaveden MBR ● Master Boot Record ● logické členění disku na oddíly (partition) ● umístěn v prvních 512 bajtů (první blok) ● různé formáty – DOS MBR → limit 2 GiB – GPT → nástupce (součást EFI standardu) ● v rámci oddílu už stejná organizace jako u FDD ● boot sektor (512 bajtů) ● následuje oblast s vlastním FS (struktura dle typu)
Adresace dat na disku ● C-H-S ● Cylinder-Head-Sector ● cylindr, hlava, sektor ● používal se dříve ● LBA ● Logical Block Addresing ● lineární číslování ● současná metoda ● ATA/100 → 48 bitů → 128 PiB
Sektor a cluster ● sektor ● nejmenší fyzicky adresovatelný blok (disku) ● typicky 512 bajtů – CD/DVD → 2048 bajtů (2 kiB) – nové pevné disky → 4096 bajtů (4 kiB) ● cluster ● česky alokační jednotka ● nejmenší úsek dat adresovatelný na úrovni FS – 512 bajtů, 1024, 2048, 4096, kiB,...
SSD
FAT
● File Allocation Table ● 1986 použit v 86-DOS, koupil Microsoft → MS-DOS ● ECMA a ISO/IEC standard – dlouhé názvy částečně patentovány Microsoftem ● využívá spojový seznam ● struktura oddílu: 1) boot sektor (512 B) 2) FAT1, FAT2 3) kořenový adresář 4) datová oblast ● položka adresáře: ● jedna položka je 32 bajtů 1) jméno (8), přípona (3) 2) atributy, čas posl. modif. 3) první sektor dat
Spojový seznam FAT FAT Datové bloky Záznam v adresáři: soubor.txt02 Obsah souboru: ABCDE Obsah FAT: odpovídající položka ukazuje na další, ukončeno FF. Obsah souboru je čten po datových blocích odpovídajících zřetězeným položkám ve FAT
Popis funkce FAT ● velikosti položek FAT – FAT12 → 12 bitů, FAT16 → 16 bitů, FAT32 → 32 bitů ● FAT32 používá na číslo datového bloku jen 28 bitů ● velikosti datových bloků – podle formátování: 512, 1024 B, 2 kiB, 4, 8, 16, 32, 64 kiB – max. velikost položky ve FAT krát velikost datového bloku – je maximální velikost souborového systému ● dlouhé názvy v adresářích – používají se další (neplatné) položky v adresáři ● neefektivita při manipulaci s FAT – přesuny hlaviček z datové části na položky FAT a zpět
ext4
● Extended Filesystem ● čtvrtá generace FS pro Linux ● vychází z UFS (Unix File System) ● struktura: ● boot blok (512 B) ● skupina (opakuje se) – superblok a deskriptory – metadata popisující FS – bitmapa použitých i-uzlů (i-nodů) a datových bloků – i-uzly – metadata jednotlivých souborů – datové bloky – datové části souborů, adresáře
Skupiny ext4 ● Skupiny se opakují, mají konstantní velikost. ● Superblok a deskriptory jsou jen v některých blocích (při využití SPARSE_SUPER). ● Superblok a bitmapy jsou vždy 1 blok dlouhé. Ostatní položky jsou násobky bloků.
Metadata ext4 ● data a metadata ve skupinách ● umožňuje rychlejší přístup při čtení/zápisu ● rozprostírá metadata po celém disku (havárie) ● metadata o souboru v i-uzlu ● i-uzel není součástí adresáře – lze vytvářet pevné a symbolické odkazy – i-uzlů je konečné množství (definováno při formátování) ● je-li i-uzlů zbytečně mnoho, prodlužuje se fsck (ext3 a starší) ● adresář: ● název + číslo i-uzlu
Superblok ● metadata o celém souborovém systému ● opakuje se na začátku skupiny – v případě poškození lze použít jinou kopii – sparse-super → kopie jen u některých (zrychlení) ● struktura: ● stav souborového systému (clean, dirty) – při připojení test (+fsck) a nastavení na dirty – při odpojení nastavení na clean ● počet připojení, poslední fsck (automatické fsck) ● velikosti a umístění jednotlivých částí
I -uzel ● struktura i-uzlu: ● typ souboru a přístupová oprávnění ● počet odkazů (pro pevné linky, ale i adresáře) ● vlastník, skupina ● velikost ● časové značky – poslední přístup (atime), změna dat (mtime), změna metadat (ctime) ● 12 přímých odkazů na datové bloky ● 1 nepřímý odkaz na datové bloky (první úrovně) ● 1 nepřímý odkaz druhé úrovně ● 1 nepřímý odkaz třetí úrovně
Nepřímé odkazy v I-uzlu
Struktura adresáře ● adresář je vlastně speciální soubor ● pevně daná maximální délka názvu objektu – tj. název souboru nebo podadresáře ● číslo i-uzlu – odkaz na metadata popisující soubor – každý FS čísluje i-uzly vždy znovu od nuly ● obsah adresáře ● lineární seznam položek → pole ● položky někdy organizovány do stromu – kvůli rychlosti prohledávání (ext3, NTFS,...)
VFS ● Virtual Filesystem ● VFS implementuje jádro OS ● shora sjednocuje přístup ke všem FS (API) ● dle situace volá „ovladač“ konkrétního FS ● řeší cache pro soubory a adresáře ● další FS se připojují do existujících adresářů ● příkaz mount, umount, df $ df Souborový systém 1K bloků Použité Volné Uži% Připojeno do /dev/sda % / /dev/sda % /home tmpfs % /dev/shm
Správa FS
Připojení /home bin etc home huzva texty skripty jane fotky video lib usr / Kořen je připojen na základní FS. Do /home je připojen další disk. Připojený FS může mít odlišnou stavbu (NTFS, FAT, ext3, XFS, síťový NFS, …). VFS pak rozhoduje, jaký ovladač FS se při přístupu k datům použije.
Připojování FS ● mount ● typ FS, speciální soubor zařízení, adresář ● mount /dev/sda3 /home ● umount ● slouží k odpojení připojeného FS ● FS nesmí být používán – otevřený soubor, aktuální adresář ● /etc/fstab ● seznam FS připojovaných při startu systému – startovací skript spustí příkaz mount -a
fsck ● kontrola konzistence metadat ● změna dat (a metadat) v několika krocích ● dojde-li k havárii, nejsou data konzistetní – např. zrušíme název v adresáři, ale ne i-nod a dat. bloky – → do /lost+found ● fsck využívá záznamy v superbloku – automatizovaná detekce nutnosti kontroly ● plná kontrola trvá extrémně dlouho ● řeší ext4 (jen použité i-nody) ● preventivní kontroly je nutné plánovat – současné distribuce automatické opravy nepoužívají
mkfs ● vytváření souborových systémů ● typicky volá podřízené nástroje – mkfs.ext4, mkfs.ntfs, mkfs.vfat ● každý FS má vlastní sadu parametrů – nutno dohledat v manuálových stránkách ● mkfs -t ext4 /dev/sda3
Vlastnosti FS
Fragmentace ● vzniká při ukládání dat do alokačních jednotek ● nově přidělené A.J. spolu nesousedí ● pohyb hlaviček disku je relativně pomalý ● náhodná stopa = 10 ms, sousední stopa = 1 ms ● řešení: ● ukládat data tak, aby se omezila fragmentace (ext) ● defragmentovat dodatečně (NTFS) ● vnitřní fragmentace (fragmentace volného místa) ● poslední alokační jednotka není zcela obsazena ● řeší se pomocí „tail merge“ (subalokace bloků)
Žurnálování ● ochrana konzistence metadat (někdy i dat) ● po pádu systému opravujeme jen nekonzistence ● není nutné prohlížet všechna metadata ● neslouží jako záloha nebo záruka, že se zapíše vše ● princip funkce ● plánovanou operaci zapíšeme do žurnálu ● provedeme změny v souborovém systému ● zapíšeme do žurnálu záznam o dokončení operace ● zrušíme záznam v žurnálu
Děravé soubory ● anglicky „sparse file“ ● soubory obsahují prázdná místa ● ukládat nuly je zbytečné ● do metadat: odkud a jak je dlouhý prázdný úsek ● při čtení vrací systém nuly, jako by je četl ● umožňuje šetřit významně místem – např. databáze, logy, ukládání řídkých polí ● podporují jen některé FS: ● většina unixových FS, NTFS a další ● nepodporuje je FAT nebo HFS+ (Apple)
Extenty ● souvislý větší úsek alokovaný pro data ● spojení více alokačních jednotek v řadě za sebou ● snižuje režii → je potřeba méně metadat – zaznamenáme jen číslo prvního datového bloku + počet ● snižuje fragmentaci ● podpora jen v některých FS: ● ext4, Reiser4, XFS, JFS,... (Linux aj.) ● HPFS (OS/2), NTFS (Windows)
Rozsáhlé adresáře ● adresář je lineární seznam ● prohledávání trvá dlouho (počet/2) ● nalezení položky je velmi častá operace (otevírání) ● při rušení a přidávání položek vznikají „díry“ ● binární strom ● nejrychlejší hledání (je-li vyvážený → B-strom) ● nevýhodou je vyvažování ● ext3 → htree – specializovaný B-strom, nepotřebuje vyvažování ● NTFS též používá binární strom
Síťové souborové systémy ● zpřístupněny pomocí počítačové sítě ● vlastní data uložena v klasickém FS (ext, NTFS,...) ● různé vlastnosti ● clusterové, fail-over, LAN, globální (přes Internet) ● možnost lokálního cachování dat, synchronizace ● příklady: ● SMB, CIFS → síťové sdílení ve Windows ● NFS, GFS → unixové systémy ● AFS → globální souborový systém (celosvětový)
NFS ● Network Filesystem ● 1984 – první verze (firma Sun) → RFC 1094 ● dnes již 4. verze (NFSv4), IETF ● typické sdílení souborů mezi unixovými systémy ● evoluční vývoj ● doplňování nových vlastností – NFSv2 jen pro UDP, max. 2 GiB soubory, synchronní,... – NFSv4 – bezpečnost, stavový protokol, clustery – při použití se chováme obezřetně (není lokálním FS) ● využívá RPC (Remote Procedure Call)
GFS ● Global File System ● sdílený diskový souborový systém – více počítačů nabízí přes síť úložný prostor – úložný prostor vystupuje navenek jako jeden celek ● umožňuje však přímý přístup k úložnému zařízení ● není to tedy distribuovaný souborový systém ● dá se použít i jako lokální souborový systém – jednotlivé uzly jsou ve vztahu peer-to-peer – využíván distribuovaný správce zámků (v jádře) ● zajímavý vývoj: – 1997, 1998 jako open source pro Linux – 1999 Sistina, 2001 komerční, 2004 Red Hat → GPL
AFS ● Andrew File systém ● distribuovaný souborový systém – úložný prostor rozprostřen přes důvěryhodné servery ● využíván klienty, kteří se k němu připojují (desetitisíce) ● správce definuje svazky (volume) a jejich fyzické uložení v síti ● klient přistupuje ke sdíleným složkám jen přes názvy svazků – klient využívá lokální cache pro zvýšení rychlosti ● operace čtení a zápisu jsou prováděny nad lokální kopií ● klient si registruje u serveru callback ● při změně souboru jsou všichni klienti přes callback informováni ● zamykání jen na celý soubor ● správce vytváří read-only kopie dat → transparentní urychlení ● multiplatformní → OpenAFS (IBM 2000)