Почему разница в размере файла и его размере на диске больше 4 KiB?

Файловая система ext4 обычно использует 4 блока KiB. Таким образом, когда вы пишете небольшой файл, а размер меньше 4 KiB, вы увидите разницу в любом файловом менеджере. Обычно есть два значения: размер файла и размер на диске. Первый кусок имеет правильное значение, а другой – умножение на 4 KiB.

В случае больших файлов я всегда думал, что размер не может отличаться более чем на 4 KiB (последний, не полностью написанный блок). Но в случае некоторых файлов на моем диске я вижу, что разница составляет более 4 KiB, например 9425 байт. Поэтому вопрос прост, почему размеры отличаются более чем на 4 KiB. Это из-за фрагментации или чего-то еще? Разве не странно, что некоторые блоки в середине файла не полностью написаны?

  • восстановление / домашняя папка с неисправного диска
  • Почему dd меняет файловую систему на внешний диск?
  • Восстановление от плохого суперблока на внешнем диске
  • Как восстановить повреждение файловой системы?
  • ext4: Может ли чистая файловая система нуждаться в восстановлении журнала?
  • chmod не изменяет разрешения определенных каталогов
  • extundelete не завершает работу
  • Поддержка Ext4 в Grub 0.9X (наследие) и Grub 1.9X (Grub2)
  • 2 Solutions collect form web for “Почему разница в размере файла и его размере на диске больше 4 KiB?”

    Список блоков, которые составляют файл, должен быть где-то сохранен. Как правило, в inode немного места, но если в индексном дескрипторе имеется слишком много блоков, файловая система выделяет непрямые блоки для хранения адреса блоков, в дополнение к блокам, которые содержат данные файла. По крайней мере, для ext2 / ext3 / ext4 в Linux, и я думаю, что для большинства Unix-подобных файловых систем в большинстве Unix-подобных операционных систем косвенные блоки учитываются при использовании диска на диске.

    Ext4 использует деревья экстентов для хранения списков блоков. Если файл использует список последовательных блоков по порядку, это занимает одну запись в дереве. Таким образом, файл с небольшой фрагментацией не нуждается в каких-либо косвенных блоках, только одна запись в дереве, которая определяет первый блок и количество блоков. Для максимально фрагментированного файла требуется много непрямых блоков для хранения одной записи дерева на каждый блок. Если файл не фрагментирован или только очень немного, то не требуется косвенный блок, а использование диска на диске – это размер файла, округленный до целого числа блоков файловой системы. Фрагментированные файлы требуют косвенных блоков.

    Ext2 и ext3 имеют более простую схему, где список блоков не сжимается, поэтому количество записей немного больше, чем линейно, с размером файла, требующим косвенных блоков, если файл использует более 12 блоков (это количество блоков может быть записано непосредственно в inode).

    Вы можете изучить файловую систему ext2 / ext3 / ext4 с помощью команды debugfs . В debugfs, block blocks /path/to/file перечисляет блоки, используемые файлом; это показывает, насколько фрагментирован файл. Команда filefrag /path/to/file дает количество фрагментов; для ext4 это коррелирует с количеством непрямых блоков и, следовательно, с разницей между размером файла и использованием дискового пространства.

    Я думаю, это может произойти в этой ситуации :

    Если флаг FALLOC_FL_KEEP_SIZE указан в режиме, поведение вызова аналогично, но размер файла не изменяется, даже если offset + len больше размера файла. Предопределение нулевых блоков за пределами файла таким образом полезно для оптимизации загружаемых рабочих нагрузок.

    Interesting Posts

    Когда интерпретировать awk как команду или язык программирования?

    Правило iptables для локальной сети с бесплатным доступом в Интернет, блокирующее незапрашиваемое соединение из Интернета на сервер?

    Сравните аналогичный файл и не похожие файлы, отображаемые ниже вывода в awk?

    Что ядро ​​делает, когда я привожу интерфейс TUN / TAP

    bash и ожидать в том же скрипте?

    Трубчатые фрагменты документа с помощью различных команд

    GPU ускорил транскодирование

    Получить первый / второй столбец файлов

    почему EXPORT PS1 в моем .profile получает clobbered?

    Переключитесь на приложение, используя его PID

    Где локальные адреса APIC в QEMU?

    Как загрузить весь каталог с веб-сервера?

    Не осталось свободного места для раздела rootfs для обновления ядра

    Как определить, находятся ли два интерфейса Ethernet на одном и том же языке?

    ./Telegram :error при загрузке разделяемых библиотек

    Linux и Unix - лучшая ОС в мире.