du -skh * in / возвращает размер, сильно отличающийся от df в centos 5.5
Вопрос
У меня есть vps slice под управлением centos 5.5, у меня должно быть 15 гигабайт дискового пространства, но, согласно df, это, похоже, удваивает использование моего дискового пространства.
когда я бегу du -skh *
в / as root я получаю:
[root@yardvps1 /]# du -skh *
0 aquota.group
0 aquota.user
5.2M bin
4.0K boot
4.0K dev
4.9M etc
2.5G home
12M lib
14M lib64
4.0K media
4.0K mnt
299M opt
0 proc
692K root
23M sbin
4.0K selinux
4.0K srv
0 sys
48K tmp
2.0G usr
121M var
это согласуется с тем, что я загрузил на компьютер, и в сумме составляет около 5 гигабайт.
, но когда я убегаю df
я получаю:
[root@yardvps1 /]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/simfs 15728640 11659048 4069592 75% /
none 262144 4 262140 1% /dev
он показывает, что я использую уже почти 12 гигабайт.
что является причиной этого несоответствия и могу ли я что-нибудь с этим поделать, я планировал сервер на основе 15 гигабайт, но теперь он в основном позволяет мне иметь на нем только около 7 гигабайт материала.
Спасибо.
Решение
Наиболее распространенной причиной этого эффекта являются открытые файлы, которые были удалены.
Ядро освобождает дисковые блоки удаленного файла только в том случае, если он не используется на момент его удаления.В противном случае это откладывается до тех пор, пока файл не будет закрыт или система не будет перезагружена.
Распространенный в мире Unix трюк, гарантирующий отсутствие временных файлов, заключается в следующем:
Процесс создает и открывает временный файл
Все еще удерживая открытый файловый дескриптор, процесс разблокирует ссылки (т.е.удаляет) файл
Процесс считывает и записывает данные в файл обычно с использованием файлового дескриптора
По завершении процесс закрывает файловый дескриптор, и ядро освобождает пространство
Если процесс (или система) неожиданно завершается, временный файл уже удален и очистка не требуется.
В качестве бонуса удаление файла снижает вероятность конфликтов именования при создании временных файлов, а также обеспечивает дополнительный уровень неизвестности запущенных процессов - для всех, кроме пользователя root, то есть.
Такое поведение гарантирует, что процессам не придется иметь дело с файлами, которые внезапно исчезают у них из-под ног, а также что процессам не придется консультироваться друг с другом, чтобы удалить файл.Однако это неожиданное поведение для тех, кто работает в системах Windows, поскольку там вам обычно не разрешается удалять используемый файл.
Тот Самый lsof
команда, запущенная от имени root, покажет все открытые файлы и конкретно укажет удаленные файлы, которые были удалены:
# lsof 2>/dev/null | grep deleted
bootlogd 2024 root 1w REG 9,3 58 917506 /tmp/init.0W2ARi (deleted)
bootlogd 2024 root 2w REG 9,3 58 917506 /tmp/init.0W2ARi (deleted)
Остановка и перезапуск виновных процессов или просто перезагрузка сервера должны решить эту проблему.
Удаленные файлы также могут оставаться открытыми ядром, если, например, это смонтированный образ файловой системы.В этом случае необходимо размонтировать файловую систему или перезагрузить сервер.
В вашем случае, судя по размеру "отсутствующего" пространства, я бы поискал любые ссылки на файл, который вы использовали для настройки VPS, напримеробраз DVD-диска Centos, который вы удалили после установки.
Другие советы
Другим случаем, с которым я сталкивался, хотя, не так, кажется, ваша проблема заключается в том, что если вы устанавливаете раздел «сверху» существующих файлов.
Если вы сделаете это, вы эффективно скрываете существующие файлы, которые существуют в каталоге на установленном разделу (точка монтирования) из установленного раздела.
Чтобы исправить: остановить любые процессы с открытыми файлами в установленном раздевании, разблокировку Mondount, найдите и переместить / удалить любые файлы, которые теперь появляются в каталоге точки монтирования.
У меня была та же проблема с сервером FreeBSD. Перезагрузка помогла.