du, df и ls сообщают о неправильном свободном / использованном пространстве

У нас есть сервер Ubuntu 12.04, работающий на хосте VMware ESXi с несколькими разделами, работающий на Zimbra 8 (только mta/ldap). Один из разделов - это раздел размером 30 ГБ, смонтированный как /opt/zimbra/data. Сегодня утром я получил грубый звонок от моего менеджера о том, что почтовый сервер не работает.

Я вошел в систему и посмотрел, и, конечно же, все команды сообщали, что в разделе / ​​opt / zimbra / data недостаточно свободного места. Я пытался выяснить, какой файл занимал все пространство, но df и du подвели меня. Вот выходные данные различных команд после того, как я отследил файл, выполнив один каталог за раз:

zimbra@mail:/opt/zimbra/data/ldap/mdb/db$ du -sh .
20M .

zimbra@mail:/opt/zimbra/data/ldap/mdb/db$ du --apparent-size data.mdb
31409532    data.mdb


zimbra@mail:/opt/zimbra/data/ldap/mdb/db$ df -h .
Filesystem      Size  Used Avail Use% Mounted on
/dev/sde1        30G  1.3G   28G   5% /opt/zimbra/data


zimbra@mail:/opt/zimbra/data/ldap/mdb/db$ ls -allh
total 20M
drwxr-xr-x 2 zimbra zimbra 4.0K Nov 26 13:50 .
drwxr-xr-x 3 zimbra zimbra 4.0K Jul 16 05:47 ..
-rw------- 1 zimbra zimbra  30G Nov 26 14:04 data.mdb
-rw------- 1 zimbra zimbra 8.0K Nov 26 14:07 lock.mdb

Обратите внимание, что файл data.mdb использует все 30 гигабайт, но не учитывается при сообщении общего пространства.

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

Обновить:

Выход из ls -alsh

root@mail:/opt/zimbra/data/ldap/mdb/db# ls -alsh
total 20M
4.0K drwxr-xr-x 2 zimbra zimbra 4.0K Nov 26 13:50 .
4.0K drwxr-xr-x 3 zimbra zimbra 4.0K Jul 16 05:47 ..
 20M -rw------- 1 zimbra zimbra  30G Nov 26 14:04 data.mdb
4.0K -rw------- 1 zimbra zimbra 8.0K Nov 26 14:07 lock.mdb

Таким образом, похоже, что файл действительно является разреженным файлом и был очень близок к размеру раздела. Я до сих пор не знаю, почему такие команды, как touch или же cp начал возвращаться no space left on disk, поскольку этот файл, кажется, фактически использует около 20 МБ.

Подводя итог, вот что я пришел, чтобы перечислить все файлы, включая разреженные, рекурсивно и упорядочить результаты по размеру файла desc:

ls -aldSh $(find .) | grep -v '^d'

Для любых пользователей Zimbra, которые могут оказаться здесь с подобной проблемой, следующие ссылки помогут:

MDB: максимальный размер базы данных

база данных ldap перешла с 97мег до 86гиг

Обновление 2:

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

df -i может использоваться для отображения информации о количестве свободных инодов. Например, у меня есть раздел, который имеет около 80% свободного пространства в соответствии с df -h, но по-прежнему возвращает ошибку "на устройстве не осталось места", поскольку она не содержит inode:

root@mail:/opt/zimbra/logger# df -h
Filesystem       Size  Used Avail  Use%  Mounted on
/dev/sdh1        20G   3.9G   16G  21%   /opt/zimbra/logger

root@mail:/opt/zimbra/logger# df -i
Filesystem       Inodes   IUsed     IFree IUse% Mounted on
/dev/sdh1        5120     5120         0  100%  /opt/zimbra/logger

0 ответов

Другие вопросы по тегам