Одна из причин, по которой диски могут заполняться без демонстрации того, что du
может видеть, связана с личными файлами. Процесс может открыть файл для записи, начать запись, а затем удалить файл из своего каталога. Это оставляет открытый файл, в который процесс все еще может записывать, который по-прежнему занимает место на диске, но его невозможно обнаружить при просмотре файловой системы. Звучит глупо, но это может быть очень полезно для выделения временного хранилища для конфиденциальной информации, которую вы не хотите раскрывать другим процессам.
Другие программы также могут удалять такие файлы, и программа, которая имеет файл, открытый для записи, ничем не лучше. Иногда пользователи пытаются освободить место, удаляя файлы журнала (или другие файлы ), которые обрабатывает владелец (, например.syslogd
) все еще открыты. В результате файлы продолжают занимать место и даже разрастаться, но их становится труднее найти.
Чтобы найти такие файлы, вам нужно просмотреть список открытых файлов ядра. lsof
является предпочтительным инструментом для этого. Он показывает все открытые файлы и смещение в файле, из которого ядро в данный момент читает или записывает.
Вот команда, которая может помочь:
lsof -o /dev/sdc | grep deleted
Давайте разберемся, что это делает:
lsof
список открытых файлов -o
означает всегда показывать смещения файлов /dev/sdc
ограничивает результаты файлами, которые находятся на блочном устройстве /dev/sdc Когда файл удален, lsof
будет отображать (deleted)
в конце строки после места, где раньше существовал файл. grep deleted
находит тех.
Некоторые из этих файлов могут быть нормальными. Однако 7-й столбец вывода показывает смещение; он имеет префикс 0t
. Если вы видите смещение с большим числом, которое также удалено, оно занимает кучу места на диске, которое вы не видите.
Чтобы освободить это пространство, вы должны завершить процесс. (В зависимости от процесса может потребоваться его перезапуск. )Вскоре после этого вы увидите, что место на диске увеличилось.
Нежелательные версии можно удалить по имени:
sudo apt remove openjdk-8-jdk
sudo apt remove openjdk-11-jdk
Они устанавливаются с разными пакетами.
Вы можете увидеть все доступные пакеты openjdk с помощью этой команды:
sudo apt update
apt-cache search openjdk
Вы можете просмотреть все пакеты openjdk в вашей системе с помощью:
dpkg -l | grep openjdk
Примечание. :Я пользователь RedHat, а не эксперт по Mint, но это практически одинаково для всех дистрибутивов. Я только что проверил имена пакетов в Mint, чтобы эти команды работали.
С помощью предоставленных инструкций я смог удалить все, что мне не нужно. Мне также пришлось удалить безголовые версии отдельно с помощью команд:
sudo apt remove openjdk-8-jre-headless
sudo apt remove openjdk-11-jre-headless