ls -lh и du -h дают разные размеры файлов при использовании усечения

Возникло множество проблем

  • Gigabyte X570 AORUS ELITE :Проблема с клавиатурой устранена путем отключения CSM (Модуль поддержки совместимости )в BIOS
  • Бета-установка Fedora 31 исправлена ​​путем добавления параметра загрузки nomodeset после тихого
0
13.11.2020, 10:44
1 ответ

Это вариант Как Linux управляет смещениями файлов . И ls, и duверны, они измеряют разные вещи.

При запуске truncateразмер файла уменьшается до 0 байт. Однако yesнемедленно записывает в него снова, со смещением, следующим за тем, где он записывался раньше; все отсутствующие данные заменяются нулями, а полностью отсутствующие блоки заменяются редко. В результате видимый размер файла продолжает увеличиваться, но фактическое место на диске, которое он занимает на диске, возвращается к 0 каждый раз, когда вы запускаете truncate, и хотя он снова увеличивается, когда yesзаписывает в него, разреженные блоки не учитываются.

lsпоказывает видимый размер файла по умолчанию, тогда как duпоказывает потребляемое дисковое пространство, поэтому lsбудет показывать большее значение, чем du, после первого truncate, при котором теряется целый блок. Вы можете заставить lsпоказывать выделенный размер с флагом -s.

Если вы попросите оболочку добавить к yeslog(yes >> yeslog), то файл будет открыт с O_APPENDи yesбудет писать с начала файла после его усечения, вместо продолжения для записи с тем же смещением, что и раньше.

4
18.03.2021, 22:49

Теги

Похожие вопросы