Як розмір файлу на диску може бути 0 байт, якщо в ньому є дані?


106

У мене є файл в Windows 10 з 362 байтами даних, але "розмір на диску" становить всього 0 байт. Це проста програма "Hello world", написана в зборі та збережена в Notepad ++ .

Як можливо, що розмір на диску дорівнює нулю, коли розмір файлу становить 362 байти?

У мене SSD, а не звичайний жорсткий диск.

Знімок екрана діалогового вікна "Властивості":

Знімок екрана діалогового вікна "Властивості"


4
Коротка відповідь: Якщо на диску не потрібно додаткового місця на диску.
Девід Шварц

11
@Thomas Не дублікат. Назва звучить схоже, але це питання задає питання, чому Windows оголошує нульовий байт файлу нульового розміру, незважаючи на те, що десь вимагає реєстрації. Це питання задає, чому розмір на диску може бути нульовим, навіть якщо у файлі є дані.
Бен Н


@BenN Позначає це невідповідно, тому що ви праві, це, безумовно, не дублікат.
Вільям

Вітаю, Coder88, я вважаю, що людина, яка позначила вашу допис як дублікат, помилилася - в іншому питанні було задано щось інше; ви дійсно задали гарне запитання. Якщо ви хотіли вказати, що ваше питання вирішено, ви можете натиснути галочку біля відповіді тут.
Бен Н

Відповіді:


155

Це відбувається, якщо файл настільки малий, що його вміст та бухгалтерія файлової системи вміщуються в 1 КБ. Щоб заощадити місце на диску, NTFS зберігає невеликі файли «резидентом», зберігаючи їх вміст прямо у записі файлу, тому для нього не потрібно виділяти жодного кластеру. Тому розмір на диску дорівнює нулю, оскільки поза записом файлу немає нічого. Після того, як файл стає достатньо великим, NTFS робить його "нерезидентом", виділяє для нього один або більше кластерів (створюючи ненульовий "розмір на диску") та створює "картографічну пару" в записі файлів замість даних для вказують на кластер.

Жорсткі диски SSD або Windows 10 на це не впливають; це просто функція NTFS. Подальше читання: Чотири етапи зростання файлів NTFS .

Зауважте, що показник "розмір на диску" не зовсім правильний. Наприклад, він ніколи не включає постійний 1 КБ, який займає запис файлу NTFS. Методика була введена в Windows 95, яка не використовувала NTFS і тому не могла пояснити це явище; він просто показав розмір файлу, округлений до наступного кратного розміру кластера. Цей алгоритм оцінювання був переданий до Windows 7, хоча багато версій Windows між ними використовували NTFS та резидентне сховище. Нарешті оновлено в Windows 8 для підрахунку файлів із лише резидентними даними як нульового розміру на диску. Подальше читання: Що таке "Розмір на диску"?


1
На якусь мить я подумав, що ми дивимось на ефекти зменшення даних ( blog.fosketts.net/2012/01/03/… ), але я вважаю, що функція працює на рівні, прозорому, на зразок метрики "розмір на диску".
misha256

8
Але зачекайте ... Я не в змозі повторити поведінку ОП на моєму томі NTFS (Windows 7). Незалежно від того, як я створюю крихітні файли (деякі лише один байт), кожен займає "дисковий простір" 4 Кб відповідно до діалогового вікна "Властивості файлу". Хм ...
misha256

8
@ misha256 Так, я можу відтворити його з файлом під ~ 700 байтів у Windows 8.1. Я здогадуюсь, що алгоритм став розумнішим десь між Windows 7 та 8.1, оскільки спочатку він не знав про якісь химерні речі NTFS ( джерело ). Зауважте, що раз файл переходить на другий етап, він ніколи не скорочується назад.
Бен Н

6
@Philipp Я думаю, що можна посперечатися в будь-якому випадку. Традиційно "файл на диску" був "розміром виділених кластерів" (так, наприклад, ви могли бачити ефекти вибору занадто великого розміру кластера). Наскільки мені відомо, він ніколи не включав простір «каталогу», необхідний файловій системі (наприклад, розмір «запису в каталозі» або «довжина ланцюжка записів FAT»).
TripeHound

3
@Philipp: У будь-якому випадку, включаючи ведення бухгалтерського обліку в розмірі файлу, швидко стає волохатим: як би ви описали файл 1-кластера з 3-ма іменами?
Дедуплікатор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.