3

У меня есть два тома, один NTFS (15028048 14213120 51544), который соответствует (блоки 1-K, используется, доступно), а другой - LUKS + ext4 (14895184 13869752 245752). Я проверил файлы внутри с помощью md5sum, и они одинаковы, однако, как может быть, что NTFS имеет 14213120, а другой 13869752? Я понимаю, что другое форматирование будет занимать разное количество места, но если у вас есть файл размером 1 МБ, этот файл размером 1 МБ будет одинаковым в NTFS, vfat, ext3, ext4 или любом другом используемом вами формате. Что мне не хватает?

2 ответа2

4

TL; DR → размер содержимого файла - это только часть истории, и то, как он хранится в файловой системе, влияет на ваше эффективное пространство.

Файл 1MiB может занимать различное количество служебных расходов, т. Е. Метаданных, а также распределяться по разному количеству блоков.

Длина содержимого файла - он же "inode" (обычный файл содержит одну или несколько записей в каталоге, жесткие ссылки и один индекс, содержащий содержимое) - должен быть одинаковым независимо от того, какая файловая система используется, но количество пространство, которое inode и метаданные вместе делают недоступными для использования другими файлами, может несколько отличаться.

Например, файловая система может выделять пространство в блоках по 4 КБ; в этом случае каталог может занимать 4 КБ даже с одной записью, а файл размером 1 байт может занимать 4 КБ. Файл размером 4097 байт в файловой системе с блоками размером 4 КБ занял бы эффективное 8 КБ пространства.

stat .emacs

  File: ‘.emacs’
  Size: 36303           Blocks: 72         IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 2097977     Links: 1

Вывод stat показывает, что мой дом находится в файловой системе с типичными блоками ввода / вывода размером 4 096 байт (4 КБ), поэтому файл размером ~ 36 кБ (36 303 Б) фактически занимает немного больше места, чем в системе 1970-х годов с 512-байтовые блоки ввода / вывода.

Число Blocks: в традиционных 512-байтовых (½ кБ) блоках Unix, поэтому, разделив размер IO Block на 512 (4 096 ÷ 512 = 8), вы обнаружите, что число блоков в этой файловой системе всегда кратно 8 , Эти накладные расходы занимают нерациональное пространство (72 × 512 = 36 864) - в этом случае 36 303 = 561 байт. (В файловой системе с 512-байтовыми блоками будет использоваться только 71 блок, поэтому издержки составляют всего 49 байт.)

В частности, файловые системы ext2/3/4 имеют некоторые оптимизации, позволяющие сделать символические ссылки очень маленькими файлами, занимающими меньше места, и особенно эффективно обрабатывать "разреженные" файлы (файлы с множеством блоков, состоящих только из нулей). Например, пустой файл занимает только место в своей записи каталога:

  File: ‘emptyness’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file                                                                 

Аналогично, короткая символическая ссылка может быть сохранена без фактического выделения каких-либо собственных блоков:

  File: ‘symlink’ -> ‘emptyness’
  Size: 9               Blocks: 0          IO Block: 4096   symbolic link                                                                      

9 байтов символической ссылки хранятся в файле каталога, поэтому он занимает 0 байтов.

Гораздо длиннее имя символической ссылки может потребоваться выделить место:

File: ‘long-symlink’ -> ‘a very very long symlink target name … …                                                                     
Size: 2000            Blocks: 8          IO Block: 4096   symbolic link                                                                    

Обратите внимание, что 8 "блоков Unix" - это наименьшее количество, которое может выделить эта файловая система (4096 ÷ 512), поэтому содержимое ~ 2k занимает ~ 4k.

Вот файл, в котором ничего нет, кроме нуля (созданный с помощью truncate -s 49M sparse-file), который также имеет логический размер, который не соответствует его размеру диска:

File: ‘sparse-file’
Size: 51380224        Blocks: 0          IO Block: 4096   regular file                                                                   

Обратите внимание, что файлы такого типа часто создаются программами с произвольным доступом, такими как базы данных, или загрузка в произвольном порядке, такими как BitTorrent.


Существует также ряд опций, которые вы можете установить при создании ("форматировании") файловой системы, что может сделать ее более эффективной для вашей конкретной рабочей нагрузки, если это вызывает серьезную озабоченность. (Руководство mke2fs содержит некоторые подробности.)

В дополнение к метаданным, относящимся к отдельным файлам (включая каталоги, обычные файлы, символические ссылки и специальные файлы устройств), таким как имена файлов, разрешения, списки ACL, расширенные атрибуты и т. П., На уровне файловой системы также есть некоторые метаданные, например "суперблок" (из которых ext2/3/4 хранит несколько резервных копий) и индекс журнала, который будет учитываться в вашем эффективном используемом (свободном) пространстве.

И, наконец, ext2/3/4 обычно резервирует процент от каждого тома только для использования суперпользователем (т. root) - это пространство не будет отображаться как "свободное", например, для du или большинства подобных программ, но оно все еще не используется. только для пользователя root . Это может быть изменено с помощью tune2fs в любое время - я обычно значительно уменьшаю его для томов типа "документы", но оставляю определенную сумму зарезервированной на / в случае какой-либо чрезвычайной ситуации.

Если вы действительно хотите увидеть больше деталей, чем обычно полезно, dumpe2fo напечатает довольно длинный отчет о различных параметрах, действующих в вашей файловой системе - например, часть этого отчета может выглядеть следующим образом:

Filesystem features:      has_journal ext_attr resize_inode dir_index f … …
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              128016
Block count:              512000
Reserved block count:     25600
Free blocks:              331865
Free inodes:              127631
0

Я думаю, что эта реклама от ответа Дока на вопрос SU " ext4 дороже, чем NTFS?"хорошо это освещает:

Каждая файловая система реализует свои структуры данных по-своему. Вы можете попытаться отформатировать раздел с различными файловыми системами и сравнить его. "Свободное" пространство будет отличаться. Кроме того, по мере их заполнения будет происходить различие в накладных расходах хранилища, и поэтому в некотором смысле объем памяти, необходимый для хранения одного и того же файла, может отличаться в зависимости от файловой системы. Обычно, когда вы форматируете файловую систему, вы также можете выбрать некоторые параметры для ее организации - это тоже оказывает влияние.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .