Я пытался разобраться с этим уже несколько дней, но безуспешно. На этом и других форумах я вижу много дискуссий по этому поводу, но ни одно из решений не помогло мне.
Моя текущая ситуация такова, что у меня «пропало» несколько гигабайт, которые я нигде не могу освободить или найти. Я предполагаю, что это какая-то проблема, такая как утечка памяти, которая устраняется только при перезагрузке, но я просто хотел бы спросить, есть ли у кого-то лучшая идея, потому что в настоящее время на этом сервере есть несколько клиентов.
Вот некоторые из команд, которые я видел в других потоках, и мои конкретные результаты:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 19G 16G 1.8G 90% /
tmpfs 384M 0 384M 0% /lib/init/rw
udev 10M 1.2M 8.9M 12% /dev
tmpfs 384M 0 384M 0% /dev/shm
4.8M /bin
27M /boot
0 /cdrom
1.2M /dev
8.8M /emul
504M /etc
4.0K /grubconf
88K /home
60K /images
0 /initrd.img
147M /lib
0 /lib32
0 /lib64
16K /lost+found
12K /media
4.0K /mnt
4.4M /opt
777M /proc
57M /root
4.7M /sbin
4.0K /selinux
4.0K /srv
0 /sys
4.0K /tmp
332M /usr
471M /var
0 /vmlinuz
(no output)
(no output)
-r-------- 1 root root 777M 2015-07-21 06:19 /proc/kcore
-rw------- 1 root root 64M 2015-07-09 03:31 /sys/devices/pci0000:00/0000:00:06.0/0000:01:04.0/resource0
-rw-r----- 1 root adm 49M 2015-07-21 06:19 /var/log/auth.log
-rw-r----- 1 root adm 174M 2015-07-19 06:25 /var/log/auth.log.1
-rw-rw---- 1 control mail 100M 2015-07-21 06:00 /var/mail/control
Если вы посчитаете, например, du, вы получите несколько ГБ, но ничего близкого к 16 ГБ.
/ - это ext3.
ОС - Debian 6.0
Что мне здесь не хватает?
В 99,9% случаев это происходит потому, что один или несколько файлов были удалены, но есть процесс, который все еще выполняет запись в старый дескриптор файла.
Когда программа хочет выполнить операции ввода-вывода с файлом, она спрашивает ядро: «Эй, ядро, я хотел бы получить доступ к файлу /bla.txt, и я хочу иметь возможность читать и писать в него». Затем ядро возвращает «дескриптор файла», который является ссылкой на файл, который можно использовать для выполнения операций чтения и записи.
Пока программа держит дескриптор файла открытым, она может продолжать писать в него, даже если файл впоследствии будет удален.
Обычно это становится очевидным, когда вы что-то делаете с файлом, и в большинстве случаев это будет что-то вроде ротации файлов журнала. Что происходит тогда? df
сообщает о фактическом использовании на диске, который может включать пространство, занимаемое открытыми файлами, в которые все еще выполняется запись. du
с другой стороны, перебирает все известные имена файлов и учитывает их пространство. Это может быть меньше, потому что удаленный файл больше не имеет имени файла, поэтому du
не принимает во внимание.
Чтобы убедиться, что это ваша проблема, выполните эту команду: lsof +L1
, и если вы увидите какие-либо имена файлов, в которых написано «(удалено)», вам нужно будет остановить процесс, указанный в столбце «КОМАНДА» вывода, а затем выяснить, почему он оставляет удаленные файлы открытыми. Как только вы это поймете, вы сможете предпринять шаги, чтобы этого не произошло.
Я могу думать только о двух причинах:
Использовать dd
чтобы сбросить ваш раздел на съемный / сетевой диск и смонтировать / проверить его в другом месте. Вы можете столкнуться с некоторыми несоответствиями при сбросе, но велика вероятность, что их легко исправить.