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

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

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

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 больше размера файла. Предопределение нулевых блоков за пределами файла таким образом полезно для оптимизации загружаемых рабочих нагрузок.

  • не удается добавить файлы на жесткий диск
  • Что означает эта строка ядра Linux?
  • найти причину повреждения файла при копировании файлов на сетевой ресурс на машине Ubuntu
  • Как получить доступ для чтения и записи (безопасный) к файловой системе ext4, используемой второй ОС, запущенной из виртуального
  • Изменение размера (увеличения) основного раздела ОС
  • В чем разница между параметрами fsck -y и -p?
  • Как исправить прерывистые ошибки «Нет места на устройстве» во время mv, когда у устройства достаточно места?
  • Есть ли способ измерить прогресс ext4lazyinit?
  • Самый безопасный способ запуска ext4 fsck на внешний диск
  • Как читать / изменять контекст SELinux на смонтированном изображении ext4 из системы, отличной от SELinux?
  • Как узнать, является ли раздел ext2, ext3 или ext4?
  • Файлы, скопированные из Win7 в Linux ext4, пустые / поврежденные
  • Interesting Posts

    Виртуальная консоль приостанавливает воспроизведение видео и аудио в KDE

    Bash для обнаружения системы контроля версий путем проверки статуса возврата команды

    Проверка работоспособности жесткого диска

    GRML не загружается автоматически

    Расширение общей памяти MIT или MIT-SHM над ssh

    Построение и установка пакетов из нестабильных

    wine – Могу ли я заставить SWTOR использовать обратную косую черту и AltGr в keybinds?

    Каковы другие алгоритмы управления перегрузками, специально разработанные для беспроводных сетей с потерями, таких как LTE и WiMax?

    encfs с ожиданием доступа отказано

    Просмотр имен хостов в сети

    Make: рецепт для целевого 'pcap-bt-monitor-linux.o' не выполнен

    Как заставить rsync перезаписывать архивные файлы только для чтения?

    К каким файлам применяется `patch -p1` патч в этом примере?

    «Меньше текстового файла» col` и `cat textfile` то же самое?

    Как я могу использовать setfacl, чтобы не предоставлять доступ к «другим» пользователям?

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