Hlavní obsah

Soubor o 1 bajtu může na disku zabrat víc. „Velikost“ a „velikost na disku“ nejsou totéž

Foto: Pexels

Windows u souborů ukazuje dvě velikosti z dobrého důvodu. Filesystém přiděluje prostor po blocích, takže drobný soubor může obsadit celý alokační cluster.

Č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

Máte na tohle téma jiný názor? Napište o něm vlastní článek.

Texty jsou tvořeny uživateli a nepodléhají procesu korektury. Pokud najdete chybu nebo nepřesnost, prosíme, pošlete nám ji na medium.chyby@firma.seznam.cz.

Související témata:
SSD disk
HDD disk
Pevný disk (HDD)

Sdílejte s lidmi své příběhy

Stačí mít účet na Seznamu a můžete začít publikovat svůj obsah. To nejlepší se může zobrazit i na hlavní stránce Seznam.cz