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

Это согласуется с тем, что я загрузил в машину, и составляет около 5gigs.

Но когда я бегу 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 Гигов материала на нем.

Спасибо.

3 4

3 ответа:

Наиболее распространенной причиной этого эффекта являются открытые файлы, которые были удалены.

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

Распространенный трюк Unix-world, чтобы гарантировать, что вокруг не осталось временных файлов, заключается в следующем:

  • Процесс создает и открывает временный файл

  • Пока все еще держа в руках откройте файловый дескриптор, процесс разблокирует (т. е. удаляет) файл

  • Процесс считывает и записывает в файл, как правило, используя файловый дескриптор

  • Процесс закрывает файловый дескриптор, когда это сделано, и ядро освобождает пространство

  • Если процесс (или система) неожиданно завершается, временный файл уже удален и очистка не требуется.

  • В качестве бонуса, удаление файла уменьшает вероятность именования коллизии при создании временных файлов, а также обеспечивает дополнительный слой неизвестности над запущенными процессами - для любого, кроме пользователя 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, например, образ Centos DVD, который вы удалили после установки.

Еще один случай, с которым я столкнулся, хотя это не кажется вашей проблемой, - это если вы монтируете раздел "поверх" существующих файлов.

Если вы сделаете это, вы эффективно скроете существующие файлы, которые существуют в каталоге на смонтированном разделе (точка монтирования) из смонтированного раздела.

Чтобы исправить: остановите все процессы с открытыми файлами на смонтированном разделе, размонтируйте раздел, найдите и переместите/удалите все файлы, которые теперь появляются в каталоге точки монтирования.

У меня была такая же проблема с сервером FreeBSD. Перезагрузка помогла.