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