sed
имеет небуферизованный режим, поэтому следующее должно работать также:
... | sed -u -r '/%[^\n]*\n/d'
Другие возможные объяснения:
chroot
или пространстве имен монтирования и не имеете доступа ко всей файловой системе. Вы можете узнать, запустив ls -id /
, который дает 2
, если вы не находитесь в пространстве имен chroot
/ mount. debugfs
и выполнить некоторые stat <3>
, stat <4>
... для проверки. losetup -a
для проверки). Обратите внимание, что нет причин, по которым разреженные файлы могут способствовать несоответствию между du
и df
.
Существует множество вещей, на которые файловая система может тратить дисковое пространство, не связанное с содержимым файлов.
df
берет количество использованных и доступных блоков непосредственно из файловой системы, а du
просто суммирует размер блоков, выделенных каждому файлу, поэтому любые не связанные с ФС структуры данных не учитываются.
Совершенно нормально, что du
показывает меньше используемого пространства, чем df
. Странно, что разница так велика, особенно для редко изменяемого корневого раздела. Вы как-то настраивали свою ФС? Вы также пробовали du --inodes
для сравнения с df -i
?