Это использованное пространство для записи каталога
Каждый каталог на самом деле является специальным файлом, который содержит другие файлы и каталоги, поэтому он должен где-то хранить этот список вместе с другими необходимыми метаданными, если это необходимо. Некоторые файловые системы выделяют обычные кластеры и сохраняют метаданные в этой области данных.
В NTFS небольшие файлы могут оставаться резидентными в записи MFT , поэтому вы можете видеть некоторые нулевые папки, поскольку для метаданных каталога не нужны отдельно выделенные блоки
Вы можете проверить это с помощью fsutil file layout directory_path
и посмотреть на $I30:$INDEX_ALLOCATION
поток
Например, вот вывод с моего компьютера. Одинаковый размер можно увидеть в %~zI
и fsutil
output
C:\>for /d %I in (*) do @echo %~aI %~fI ^<%~zI byte^(s^)^>
d---------- C:\ESD <0 byte(s)>
d---------- C:\Intel <0 byte(s)>
d---------- C:\OLYMPUS <0 byte(s)>
d---------- C:\PerfLogs <0 byte(s)>
dr--------- C:\Program Files <16384 byte(s)>
dr--------- C:\Program Files (x86) <12288 byte(s)>
dr--------- C:\Users <4096 byte(s)>
d---------- C:\Windows <16384 byte(s)>
PS C:\> ls -Attributes Directory | ForEach-Object {
$_.Name
fsutil file layout $_ | bash -c 'grep -A 20 INDEX_ALLOCATION' | `
sls -Pattern 'INDEX_ALLOCATION|Size' | select-object -First 2 }
ESD
Intel
OLYMPUS
PerfLogs
Program Files
Stream : 0x0a0 :$I30:$INDEX_ALLOCATION
Size : 16,384
Program Files (x86)
Stream : 0x0a0 :$I30:$INDEX_ALLOCATION
Size : 12,288
Users
Stream : 0x0a0 :$I30:$INDEX_ALLOCATION
Size : 4,096
Windows
Stream : 0x0a0 :$I30:$INDEX_ALLOCATION
Size : 16,384
То же самое происходит в * nix, когда размер, отображаемый ls -l
, не является общим размером файлов в каталоге: