Размер одного файла описывают три разных числа, и занятое место показывает только одно из них.
stat печатает все три рядом. Так выглядит пустой файл из кэша, который съел inode в начале урока:
Поле stat |
Что значит | Где ещё видно |
|---|---|---|
Size |
размер: сколько байт прочитает программа | ls -l |
Blocks |
место под содержимое, в единицах по 512 байт | du |
Inode |
номер записи о файле | ls -i |
Size — логический размер файла. У пустого файла размер и блоки нулевые, а inode есть. Сотни таких файлов почти не видны в df -h и du -h и при этом расходуют все inode.
Бывает и обратное расхождение: у разреженного файла размер большой, а блоков мало. Участки, куда ничего не записывали, места не занимают и при чтении дают нули. Создай такой файл сам:
ls -lh покажет размер 1.0G, du -h — 0: truncate задал размер, а данных в файл никто не писал. Так же устроен образ учебного тома.
На корне / кончается место. ls -lhS /var/lib/images первым в списке показывает образ vm.img размером 40G. Что сделаешь первым?
-
Архиву самому нужно место, а освободится не больше, чем образ занимает по
du. Сначала узнай это число:du -h vm.img. -
У файла один inode при любом размере.
df -iпоможет, когда кончились записи о файлах, а здесь вопрос в блоках. -
Размер учитывает и участки, куда ничего не записывали. Сколько места образ занимает на самом деле, покажет
du -h vm.img— у разреженного образа это может быть пара гигабайт.
Размер из ls -l учитывает и незаписанные участки разреженного файла, занятое место показывает du. Сравни du -h vm.img и du -h --apparent-size vm.img: вторая команда вернёт логический размер.
Главное в шаге
-
Размер файла, выделенные ему блоки и его inode — три разные величины,
statпоказывает все три. - Пустой файл расходует inode почти без блоков; у разреженного размер больше выделенного места.