Článek
Windows ukazuje dvě čísla a obě mohou být správně
Kliknu ve Windows pravým tlačítkem na soubor, otevřu Vlastnosti a vidím dvě položky: „Velikost“ a „Velikost na disku“. U velkého videa mohou být skoro stejné. U tisíců drobných souborů se ale součet může rozjet překvapivě výrazně.
Důvod není skrytý obsah souboru. První číslo říká, kolik bajtů tvoří vlastní data. Druhé se snaží popsat, kolik prostoru pro ně filesystém skutečně alokoval. A filesystém běžně nepřiděluje místo po jednom bajtu, ale po větších jednotkách – clusterech neboli alokačních jednotkách.
Jeden bajt a celý cluster
Microsoft u NTFS vysvětluje, že cluster je skupina souvislých sektorů a že alokace souborového prostoru probíhá v násobcích velikosti clusteru. V ukázce dokumentace má svazek alokační jednotku 4096 bajtů.
V nejjednodušším modelu tedy může soubor s jedním bajtem dat potřebovat jednu alokační jednotku. Jeho logická velikost je 1 B, ale vyhrazený prostor může odpovídat 4096 B. Soubor o 4097 bajtech už v takovém modelu potřebuje dva clustery, tedy 8192 bajtů alokovaného prostoru.
Proč filesystém nepřiděluje každý bajt zvlášť
Kdyby systém spravoval disk po jednotlivých bajtech, musel by vést obrovské množství velmi jemných záznamů. Cluster je kompromis: větší jednotka zjednodušuje správu alokace a může pomoci výkonu, ale u malých souborů vzniká nevyužitý zbytek posledního clusteru.
Proto může adresář plný ikon, malých textových souborů nebo drobných datových fragmentů zabrat na disku víc prostoru, než odpovídá prostému součtu jejich logických velikostí.
4 KB je běžný příklad, ne univerzální zákon
Tady je největší past podobných vysvětlení. Microsoft uvádí 4KB clustery jako běžnou a u řady konfigurací výchozí hodnotu, NTFS ale podporuje i jiné velikosti alokačních jednotek. Konkrétní hodnota závisí na formátování a konfiguraci svazku.
Navíc existují výjimky, které jednoduché pravidlo komplikují. NTFS může používat kompresi, řídké soubory a u velmi malých dat mohou některé informace zůstat rezidentně v záznamu MFT. Proto se nedá bez kontroly konkrétního souboru říct, že „každý 1B soubor zabere přesně 4 KB“.
Tohle není totéž jako pomalé kopírování malých souborů
Je snadné spojit dva jevy dohromady. Tisíce malých souborů se opravdu mohou kopírovat pomaleji než jeden velký soubor stejného objemu, protože vzniká režie s vytvářením souborů, metadaty a dalšími operacemi. To jsem už rozebíral zvlášť.
Rozdíl „Velikost“ versus „Velikost na disku“ je ale jiný problém. Neříká, jak dlouho se něco bude kopírovat. Říká, jaký vztah je mezi množstvím uživatelských dat a prostorem, který pro ně filesystém alokoval.
Dvě čísla proto nejsou chyba Windows
Když se tedy v dialogu Vlastnosti liší „Size“ a „Size on disk“, Windows si nevymýšlí druhou velikost. Jen ukazuje dvě různé otázky: kolik dat soubor obsahuje a kolik úložného prostoru pro něj filesystém vyhradil.
Právě u obrovského množství drobných souborů se ten rozdíl může nasčítat. A je to pěkná připomínka, že „soubor má 300 bajtů“ a „soubor zabírá na disku 300 bajtů“ nemusí být stejná věta.
Zdroje a prameny





