Trocha historie
První bloková záznamová zařízení měla velikosti bloku pevně dané hardwarem – blok v nich byl tvořen nějakým fyzickým blokem záznamového média, který měl pevně danou kapacitu. Jejich tvůrci volili velikost bloku podle dvou kritérií – buď tak, aby velikost odpovídala nějakému kulatému násobku délky záznamu (pokud šlo o systémy s pevnou délkou, třeba 80 bajtů), nebo tak, že zvolili rozumně efektivní velikost z binární posloupnosti (64, 128, 256, 512, …)
Záznam souboru dat do blokového zařízení totiž probíhá právě po blocích, a velikost bloku tedy zároveň udává granularitu záznamu. Pokud není velikost souboru dělitelná velikostí bloku, zabere poslední část souboru jen část bloku, a jeho zbytek zůstane nevyužitý. Pokud by byly bloky příliš velké, znamenalo by to, že se plýtvá volným místem. Pokud by byly bloky zase příliš malé, nedaly by se rozumně adresovat. Navíc u magnetických mechanik (pásky, disky) nebyly bloky vyznačeny nějak fyzicky (až na výjimky), ale pomocí určitých „služebních sekvencí“ – specifických kódů, které se v datech nevyskytovaly, a které v sobě nesly kromě synchronizačních údajů („zde začíná nový blok“) nebo záznamů pro opravu a detekci chyb (ECC/CRC) i např. informace o čísle bloku. A tyto informace by v případě velmi malých bloků opět zabraly podstatnou část média.
Známý „indexový otvor“ u disků udával pozici prvního sektoru na stopě. Všechny ostatní sektory byly označeny pomocí sekvencí dat, zaznamenaných přímo na disku při tzv. low-level formátování, kdy se zapisovala vždy celá stopa včetně těchto dat. Existovaly i disky, které měly speciální stopu s továrně vytvořeným záznamem o umístění jednotlivých sektorů – např. v podobě krátkých proužků, které byly snímány optoelektronicky.
S příchodem pružného disku (později diskety) se ustálila velikost sektorů na hodnotách 128 až 1024 bajtů. Počítače od Apple používaly např. sektory o velikosti 256 bajtů, u PC byla zvolena velikost 512 bajtů, ale nebylo to žádné dogma. V 90. letech byly poměrně běžné utility, které nabízely zformátování disket na vyšší maximální kapacitu, čehož se dosahovalo mj. i tím, že sektory byly zvětšené na 1024 bajtů (čímž se proti 512b sektorům ušetřila polovina služebních dat) a na stopu jich bylo vněstnáno víc – tehdejší floppy disky nevyužívaly záznamové médium kvůli zvýšení spolehlivosti a technologickým omezením ani zdaleka naplno.
Pevné disky v počítačích PC vyšly z disket nejen co do dělení na sektory, stopy (u disků nazývané válce) a strany (u disků nazývané hlavy), ale zachovaly i velikost sektoru 512 bajtů. Protože tehdy nejpoužívanější souborový systém FAT16 dokázal adresovat bloky v rozsahu 16 bitů (tj. do 65535), nemohly by disky mít větší kapacitu než 32768 kilobajtů. Proto jsou bloky vytvořeny spojením více sektorů do jednoho většího bloku (clusteru), a nejmenší alokační jednotkou je právě cluster.
S velikostí 512 bajtů si pevné disky v PC vystačily zhruba čtvrt století. Problémy s maximální adresovatelnou kapacitou se postupně řešily přechodem z trojrozměrného systému adresace CHS (cylinder-head-sector) na LBA (linear base address), vylepšenými HW řadiči, zvětšením clusteru, přechodem na FAT32 nebo na jiné souborové systémy. Velikost sektoru 512 však zůstávala stejná, a to vedlo mimo jiné i k tomu, že velké množství nízkoúrovňového software používalo (a používá) velikost sektoru 512 byte jako konstantu, ačkoli disky umožňují zjistit velikost sektoru.
Zvětšování kapacity disků
Výrobci pevných disků neustále přicházeli s většími a většími kapacitami disků. Kromě opravdového zvětšení (více ploten, zvýšení hustoty záznamu) používali i marketingové triky. Prvním z těchto triků bylo udávání velikosti v „nenaformátovaném tvaru“ – volné místo na disku bylo po naformátování o něco menší, protože část kapacity zabraly výše zmiňované servisní informace, čísla sektorů, opravné záznamy apod. Ovšem v tiskové zprávě vypadalo větší číslo zkrátka líp.
Prosadil se ale druhý trik, kterým bylo počítání se základem 1000 namísto obvyklého 1024 – výrobce uvedl kapacitu 320 MB a mínil tím 320 000 000 bajtů – což je nějakých 305 megabajtů, když je počítáme tak jak je běžným zvykem. Tlak výrobců záznamových zařízení byl tak silný, že vedl ke zpochybnění používání předpon kilo-, mega- apod., a následně (zhruba okolo roku 2000) k zavedení zkratek jako MiB a TiB (kromě MB a TB), které převzaly původní význam binárních předpon, tudíž 320 MB se mohlo opravdu rovnat 320 milionům, neboli 305 MiB (mebibyte). Na jednu stranu to je logické (proč by někde mělo být kilo- 1000 a někde 1024?), na druhou stranu panuje dnes v předponách v IT neskutečný chaos, kdy programátoři stále používají kilobajt pro 1024 bajtů, stejně tak naprostá většina programů a utilit, a výrobci disků počítají kilo jako 1000.
Já se v textu držím klasické a zažité terminologie, tedy když budu psát o 4kB sektoru, je to sektor o velikosti 4096 bajtů. Pokud je mezi čtenáři někdo, kdo chce používat nové předpony, nechť si všude představí KiB a čte kibibajt. – pozn.aut.
Zvětšíme sektor!
Současná technologie je podstatně vyspělejší, takže výrobci dokážou vyrobit kvalitnější médium, kvalitnější záznamové zařízení i kvalitnější řadiče. Není proto bezpodmínečně nutné, aby byly synchronizační informace na disku tak často. Navíc vzhledem k tomu, že se k disku přistupuje většinou na úrovni celých clusterů, tak někteří výrobci začali vyrábět disky, které mají sektory s velikostí 4 kilobajty (4096 byte, viz jazyková poznámka výše). Spojují tak osm starých sektorů do jednoho, čímž ušetří sedm „služebních oblastí“ a mohou tak opět o něco zvýšit kapacitu – udává se, že se tím ušetří cca 7–11 procent kapacity.
Kromě výhody vyšší možné kapacity přináší zvýšení velikosti sektoru i obrovské problémy u systémů, které s větším sektorem nepočítají, které zkrátka předpokládají, že sektor má 512 bajtů. A problém se netýká jen OS, ale i třeba firmware PC (BIOS) – naprostá většina, ne-li všechny, předpokládají, že disky mají sektor s velikostí 512 bajtů, a tak se k němu chovají, což přináší řadu problémů v nejrůznějších oblastech – od chybné detekce po neschopnost nabootovat. Totéž platí i pro nejrůznější nízkoúrovňové utility pro práci s diskem, od nástrojů pro dělení až po „disk doctory“, a platí to nejen pro svět Windows (kde verze až do XP včetně vůbec nepředpokládaly, že by disk mohl mít jinou velikost sektoru), ale i pro Linux, který je sice pro práci s disky s jinou velikostí sektoru teoreticky připraven, v praxi je tomu ale jinak, a problémy přináší také již výše zmíněné BIOSy či bootloadery.
Tyto problémy jsou tak zásadní, že by výrobci nedokázali takový disk na trhu vůbec prodat – kdo by si taky koupil disk, který nemůže připojit do svého počítače, protože je s ním nekompatibilní BIOS, bootloader, systém i utility?! Proto výrobci přistoupili k jednoduchému řešení – interně mají sektory velikost 4096 byte, ale navenek jsou přepočítány na 512 byte, vždy jeden fyzický na osm „logických“.
Přepočet sektorů s sebou nese ale jednu významnou komplikaci: pokud vychází pro OS bloky tak, že jsou zarovnány na 4kB, a jejich začátek odpovídá začátku fyzického sektoru, je vše v pořádku. Pokud ale tato podmínka splněná není, musí disk pro každý zápis do 512B sektoru někde uprostřed fyzického 4kB nejprve data přečíst do bufferu, změnit a opět celý sektor zapsat. To v důsledku vede k drastickému poklesu výkonu.
U některých disků hlásili uživatelé problémy, které se nakonec podařilo vyřešit pomocí podrobnějšího nastavení a zarovnání tak, aby data ve filesystému začínala na sektoru, jehož pořadové číslo je dělitelné osmi.
Výhoda? Zatím moc ne…
Změna velikosti sektoru na 4 kB je z hlediska efektivity pozitivním krokem. Disky budou moci mít vyšší kapacitu, a tentokrát bez marketingových triků s názvoslovím nebo s počítáním kapacity včetně nedostupných oblastí. Efektivitu je samosebou nutno brát s rezervou – dnešní souborové systémy samy o sobě nejsou moc šetřivé a malé soubory zaberou na disku stejně desítky kilobajtů.
Systémy ale žily donedávna ve světě, kdy se mohly spolehnout na to, že sektor bude mít 512 B, a programátoři na tuto „jistotu“ leckdy hřešili, od tvůrců BIOSů přes autory OS až po programátory nízkoúrovňových aplikací. Moderní OS (Windows Vista a 7, poslední verze Mac OS X, nové distribuce Linuxu) s takovými disky už počítají. Podpora v BIOSu a v utilitách je jen otázka času. Do té doby budou výrobci vybavovat své disky přepočtem sektorů. Není to žádný zásadní problém, jen je potřeba s tím počítat – tedy alespoň v systémech, v nichž s tím počítat lze.
Další články k tématu: The 4K Sector – Another Nail in XP's Coffin, 4K-sector drives and Linux.
Foto: agentura SXC