
У меня странное несоответствие. С помощью "df" я вижу, что мой корневой диск использует почти 229G.
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/dm-2 241G 229G 13G 96% /
но «du» говорит мне, что у меня занято всего около 12 ГБ (округленно).
# du -sh /* | grep G
3.2G /run
2.1G /usr
6.0G /var
Обе команды были запущены как root. Я могу себе представить, что в каталоге, куда сейчас смонтирован ресурс NFS, есть «скрытые» данные. Если это так. Как мне узнать, какие файлы там «скрыты». Или у вас есть другие идеи, почему эти числа так сильно различаются?
решение1
Вероятно, у вас есть приложение/процесс, который держит этот файл открытым. Когда вы удаляете файл, который удерживается открытым приложением, ОС все еще видит размер файла в df, поскольку файл все еще открыт в памяти.
Вот документация, которую я написал для коллеги, и которая должна помочь вам.
Обрезать большие открытые файлы
Вы удалили файлы, чтобы освободить место, но место не освободилось после этого. Теперь df -lah и du -lah показывают разные размеры
Используйте LSOF для получения удаленных, но удерживаемых файлов
lsof |grep deleted
Здесь будут показаны все файлы, удаленные, но открытые приложением.
java 2943 gateway 410w REG 253,3 50482102 139274 /opt/span/app/node/default/var/attachments/att180368_0.part (deleted)
java 2943 gateway 411w REG 253,3 46217973 139284 /opt/span/app/node/default/var/attachments/att182230_0.part (deleted)
java 2943 gateway 412w REG 253,3 50483894 139280 /opt/span/app/node/default/var/attachments/att181920_0.part (deleted)
Вы можете перезапустить приложение, чтобы разблокировать файлы, или обрезать файлы.
Чтобы обрезать файлы, вам придется посмотреть на вывод выше, чтобы получить PID и fd (номер дескриптора файла).
обрезать файл с помощью
echo > /proc/PID/fd/fd_number
Пример: чтобы обнулить размер трех файлов, перечисленных выше, вам нужно ввести следующее
echo > /proc/2943/fd/410
echo > /proc/2943/fd/411
echo > /proc/2943/fd/412
если у вас много подлежащих обрезанию файлов, bash придет на помощь.
for n in {410..412}; do 'echo > /proc/2943/fd/$n'; done;
df -lah теперь должен показывать свободное место, НО файлы будут отображаться в lsof |grep удалены, но будут иметь размер 1
java 2943 gateway 410w REG 253,3 1 139274 /opt/span/app/node/default/var/attachments/att180368_0.part (deleted)
java 2943 gateway 411w REG 253,3 1 139284 /opt/span/app/node/default/var/attachments/att182230_0.part (deleted)
java 2943 gateway 412w REG 253,3 1 139280 /opt/span/app/node/default/var/attachments/att181920_0.part (deleted)
Дескрипторы файлов будут освобождены при следующей перезагрузке или перезапуске/перезагрузке приложения, открывшего файлы.
Конечно, вам придется скорректировать ваши команды, чтобы они соответствовали выводу ваших заблокированных файлов.
решение2
В моем случае (и вы помогли мне в ЛС, рассказав мне то же самое) это была проблема с over-mount. У меня были некоторые данные в каталоге на разделе, которые я du
не мог видеть, потому что монтирование скрыло их.
Так что постарайтесьразмонтировать все монтированияи ищите данные в оставшихся каталогах.
Желаю вам приятного времяпрепровождения и спасибо!