Я telnetting в коробку Solaris 5.9, которая должна хранить нашу базу данных оракула. Я удалил старую версию базы данных, попытался перейти на новую версию (вся база данных составляет 90 ГБ), но я продолжал получать ошибки "диск заполнен". Я побежал

df -hk

и обнаружил, что раздел (называемый "/d02"), который я пытался переместить, имел общий объем 135 ГБ, использовалось 123 ГБ и доступно 10 ГБ. Тем не менее, когда я бегу

ls -lah /d02

Я получаю 4 каталога: 3 из них 512B и 1 8KB.

Когда я удалил старую базу данных oracle, пространство как-то не освободилось? Как я могу освободить пространство или хотя бы увидеть, как мое пространство занято?

Спасибо за ваше время.

3 ответа3

3

Я понял. Мне пришлось убить все процессы, которые удерживали эти данные - в данном случае Oracle.

Также я думаю, что должен был опубликовать это на сервере. Сожалею!

2

+1 за ответ @UnixGeek: удаление файла не освобождает дисковое пространство до тех пор, пока процесс (ы) с открытым файлом не исчезнут.

"Стандартным" инструментом для просмотра открытых файлов является lsof - я до сих пор не думаю, что он включен в Solaris (прошло несколько лет с тех пор, как я был администратором Solaris или даже использовал его), но доступен из sunfreeware.

Быстрый гугл находит, что утилиты Solaris pfiles могут делать что-то подобное (но я этим не пользовался).

Кроме того, fuser на имя файла, но вы должны проверить его, прежде чем удалить файл (ы). fuser также полезен для определения того, что порт открыт, когда процесс сообщает вам, что он уже используется.

Я подключу Unixersal Translator от A Sysadmin (ROSETTA STONE), очень полезное руководство для тех, кто использует несколько Unices и переводит между ними.

Бонусный трюк для восстановления удаленных файлов в системах /proc которые все еще открыты процессом:

cat /proc/<pid>/fd/<fd-of-delete-file>  > recovered.data

Я использовал это в Linux, где ls -l /proc/<pid>/fd показывает исходное имя файла (и [удалено]) в выводе.

2

Да, вы обнаружили причину. В Unix удаление файла удаляет ссылку из списка доступа в каталоге. Тем не менее, он не может удалить содержимое, пока не будет закрыт дескриптор файла, который связан с файлом. Это довольно распространенная проблема, которую трудно отследить после свершившегося факта.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .