Использование дискового пространства не связано с df & du

13

Я пытаюсь освободить место на диске - если я это сделаю df -h, у меня есть файловая система / dev / mapper / vg00-var, которая говорит, что используется 4G, 3.8G, осталось 205M.

Это соответствует моему каталогу / var.

Если я спускаюсь в / var и делаю du -kscxh *, итого 2.1G

2.1G + 200M бесплатно = 2.3G ... Итак, мой вопрос, где остальные 1.7G?

Codecraft
источник
Что du -shx /varговорит?
Кайл Смит
1
Вы также можете удалить файлы, которые имеют дескрипторы открытых файлов. ОС не освободит место, пока не закроются дескрипторы, но вы не увидите их с "du". Вы можете запустить «lsof / var | grep Удален» (или что-то подобное), чтобы увидеть их. Это, на самом деле, не было бы неожиданным открытием, скажем, в / var / log, если журналы вращаются, но процесс ведения журнала не выполняется HUP правильно.
CJC
Я удалял некоторые файлы журнала, которые сошли с ума, казалось, что они не вращались, но в любом случае, я получил одно слово от друга «перезагрузка» - подумал, что он саркастичен, но, видимо, нет :) Я снова нашел место на диске .... предотвращена катастрофа (пока).
Codecraft
@Codecraft Да, перезагрузка определенно очистит любые дескрипторы открытых файлов, хотя это похоже на то, как разбить яйцо молотком.
CJC
@cjc до тех пор, пока я доберусь до желтого совершенства ...! Любые предложения о том, как я могу очистить дескрипторы открытых файлов, не забивая свое яйцо?
Codecraft

Ответы:

20

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

В Linux удаление файла просто отменяет связь с файлом. На самом деле он удаляется, когда к этому файлу больше не подключены файловые дескрипторы. Итак, если у вас есть файл журнала объемом 2 ГБ, который вы удаляете вручную с помощью rm, дисковое пространство не будет освобождено, пока вы не перезапустите демон syslog (или не отправите ему HUPсигнал).

Пытаться

lsof -n | grep -i deleted

и посмотреть, есть ли у вас какие-либо удаленные файлы зомби, которые все еще плавают вокруг

Янне Пиккарайнен
источник
Я не запустил вашу команду, но то, что вы сказали, похоже, сработало - я вручную убил несколько сумасшедших журналов, и, в конце концов, перезагрузка вызвала пересчет дискового пространства и его правильное отображение.
Codecraft
У нас это работало, когда журналы Apache заполняли каталог / var / log / apache /. Таким образом, вам может не потребоваться перезапускать весь сервер или системный журнал, а только службу, которую вы найдете в выходных данных команды выше.
Иван
Просто было это самим. У нас был tomcat6 catalina.out, который не был пойман logrotate, мы удалили его, когда он достиг 4Gb, и исправили logrotate. Несколько недель спустя мы задавались вопросом, почему 4Gb не вернулся. Эта lsofкоманда показала, что у нас было много файлов Tomcat в ожидании удаления. Перезапускаешь кота и вдруг у нас тонны космоса назад!
Ник
Наконец ответ, который работал для меня. В PostgreSQL произошел сбой, и он оставил открытыми соединения с 400 ГБ (!!!) несвязанных файлов на диске объемом 1 ТБ. Перезапуск Postgres исправил это.
Судо