du -h возвращает 512, что это значит?

du -h возвращает 512, что это значит?

У меня есть несколько файлов, для которых du -hвозвращается 512, как я понимаю, он должен возвращать числа с единицами измерения. Что это значит? Какое фактическое дисковое пространство используется?

хороший файл

(base) -bash-4.2$ du -h 2020.110/drr0/X1.0060_0958
36K 2020.110/drr0/X1.0060_0958
(base) -bash-4.2$ ls -l 2020.110/drr0/X1.0060_0958
-rw-rw-rw- 1 user11 users 36628 Jul 29 18:43 2020.110/drr0/X1.0060_0958

плохой файл

(base) -bash-4.2$ du -h 2020.110/drr0/X1.0060_0957
512 2020.110/drr0/X1.0060_0957
(base) -bash-4.2$ ls -l 2020.110/drr0/X1.0060_0957
-rw-rw-rw- 1 user11 users 0 Jul 29 18:51 2020.110/drr0/X1.0060_0957

решение1

du никогда не показывает единицы измерения. Обратите внимание, чтов обоих случаяхв выводе нет «B» (для байтов) — в «человекочитаемом» режиме отображается толькопрефиксы множителей(K, M, G), но не сами единицы. И поскольку для чисел ниже 1024 нет префикса, то он не отображается.

Обычно 'du' измеряет файлы в блоках (см. страницу руководства), но с опцией '-h' единица всегда 1 байт. Поэтому, когда du -hпоказывает 512, это 512 байт.

Почему 512, а не 0? Смотрите ответ phuclv

решение2

Файлы не всегда занимают место на диске. Файлы с меньшим количеством блоков данных, чем реальный размер, будут сообщаться с меньшим количеством блоков

  • Разреженные файлыбудет иметь только ненулевые блоки, хранящиеся на диске. Таким образом, разреженный файл размером 50 ТБ с всего лишь 5 МБ ненулевых данных будет занимать всего ~5 МБ на диске
  • Встроенные файлытакже будет занимать 0 байт в области данных, потому что они хранятся прямо в самих метаданных. В NTFS это называетсярезидентные файлыи позже многие другие файловые системы Linux, такие как ext4 илиBtrfsтакже поддерживают подобную функцию
  • Сжатые файлытакже имеют меньшее количество блоков после сжатия

Вероятно, ваш файл вложен. Поскольку он не имеет выделенных блоков, число, сообщенное , lsбудет равно 0. Вы можете легко проверить это с помощью stat. В ext4 только файлы, очень маленькие по сравнению с размером inode (256+ байт), могут быть вложены, поэтому, вероятно, вы используете другую файловую систему, например NTFS или Btrfs

Вы можете использовать --apparent-sizeопцию, duчтобы увидеть реальный размер

--apparent-size

выводить видимые размеры, а не использование диска; хотя видимый размер обычно меньше, он может быть больше из-за дыр в («разреженных») файлах, внутренней фрагментации, косвенных блоков и т. п.

https://www.man7.org/linux/man-pages/man1/du.1.html

Связанный контент