Диагностика занимаемого дискового пространства на VDS
от

1 Ответ

Диагностика по SSH

Если вы хотите узнать сколько места у вас занято на дисках и чем конкретно оно занято вам нужно подключиться к серверу по SSH

И использовать команды df и du с различными ключами. Например:

Команда df

Узнать сколько занято и сколько всего у нас места:
[root@hostname ~]# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       1.1T  290G  752G  28% /

Size - общий размер диска,

Used - используется места,

Avail - доступное место на диске.

В нашем примере, занято 290 Гб, свободно 752 Гб.

Команда du

Узнать какая директория занимает больше всего места:

[root@host ~]# du -hs /*
32K	/aquota.group
20K	/aquota.user
7.5M	/bin
74M	/boot
188K	/dev
50M	/etc
4.0K	/home
358M	/lib
23M	/lib64
16K	/lost+found
4.0K	/media
4.0K	/mnt
561M	/opt
0	/proc
48G	/root
15M	/sbin
4.0K	/selinux
4.0K	/srv
0	/sys
352M	/tmp 
172M	/user2153294
15G	/us
265G 	/var

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

[root@host ~]# du -hs /usr/*
66M	/usr/bin
4.0K	/usr/etc
4.0K	/usr/games
25M	/usr/include
321M	/usr/lib
162M	/usr/lib64
40M	/usr/libexec
3.2G	/usr/local
28M	/usr/sbin
11G	/usr/share
12K	/usr/src
0	/usr/tmp

Так же можно комбинировать данную команду с другими, например grep, для того чтобы выводились только директории занимающие более гигабайта (G в колонке размера)

[root@host ~]# du -hs /usr/* | grep G
3.2G	/usr/local
11G	/usr/share

Команда repquota

Repquota отобразит квоту пользователей, текущее состояние и ее лимит. ISPmanager считает квоту по группе пользователей, поэтому команда будет выглядеть так:

[root@host ~]# repquota -g / | grep user21
user211 --  254948       0 5242880           1756     0     0       
user212 -- 2622280       0 5242880          37930     0     0       
user213 --  668776       0 5242880          35090     0     0       
user214 --   43860       0 5242880           2507     0     0       
user215 --   75788       0 5242880           8950     0     0       
user216 -- 24864532       0 78643200            267     0     0       
user217 --  297576       0 5242880           1820     0     0       
user218 --  129208       0 5242880          11305     0     0       
user219 --  411052       0 5242880          15262     0     0       

Диагностика в ISPmanager 4

Раздел Пользователи

В этом разделе отображается место занятой файлами пользователя и лимит квоты на дисковое пространство:

Нам интересны показатели в красном четырехугольнике.

ВАЖНО! Вы не сможете посмотреть реальный объем диска и занимаемого пространства в данном разделе. Это лишь пользовательские квоты.

Раздел Используемые ресурсы

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

ВАЖНО! Дисковое пространство не отображает реальный объем диска и занимаемого пространства. Это лишь пользовательские квоты.

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

Диагностика в ISPmanager 5

Раздел Пользователи

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

В панели управления не отображается занятое дисковое пространство.

В логе панели ошибка:

Dec  5 16:09:02 [3228:38] proc EXTINFO Run '/bin/sh -c quotasync\ -g\ /' pid 3658
Dec  5 16:09:02 [3228:38] proc EXTINFO Process 3658 finished with status 1

Такое поведение характерно для файловой системы reiserfs (вирутализация OpenVZ).

Для решения проблемы достаточно добавить в файл конфигурации ispmgr.conf (или ispmgrnode.conf если речь о ISPmanager Business) опцию DisableQuotasync.

Option DisableQuotasync - если указана данная опция, панель не будет вызывать команду quotasync перед получением информации о системных квотах.

После добавления опции в конфиг необходимо перезапустить панель командой killall core

Значение занятого дискового пространства в ISPmanager отличается от того, что показывает команда du

  • Например, в панели управления в разделе "Пользователи" отображается информация по занятому дисковому пространству: 880/1000 MB

Но du -sh на директорию пользователя показывает 1,6 GB

Это означает, что в директории пользователя есть файлы, группа которых не соответствует группе пользователя.

Найти такие файлы поможет команда

find /var/www/user/ -not -group user
  • Если же команда du , наоборот, показывает меньшее значение, чем в панели, то значит за пределами домашней директории есть файлы, принадлежащие группе пользователя.

Найти такие файлы можно с помощью команды

find / -path /var/www/user/  -group user

Раздел Ограничения (ISPmanager Business)

В данном модуле представлена информация об использовании ресурсов пользователем панели управления, включая количество web-доменов, доменных имен, баз данных и т.п. Кроме того, вы можете просмотреть более подробную информацию о некоторых ресурсах, и, в зависимости от выбранного параметра, выполнить дополнительные действия над ним.

Частые проблемы

Файлы сессий

Обычно их занимают файлы сессий. Они сохраняются в директориях пользователей mod-tmp

В линуксах /var/www/user_name/data/mod-tmp

и во FreeBSD /home/user_name/data/mod-tmp

чтобы удалить их них данные файлы переходите в эту директорию командой

# cd  /www/user_name/data/mod-tmp

где user_name это имя вашего пользователя. И выполняете команду

# find . -type f -name 'sess_*' -delete

Логи

Так же много места могут занимать файлы логов. Расположены они обычно в директории
/var/log

/var/www/httpd-logs в Linux

/home/httpd-logs во FreeBSD

Смотрим размер логов

[root@host www]# du -hs /var/www/httpd-logs/*
4,0K /var/www/httpd-logs/you_domain.ru.access.log
4,0K /var/www/httpd-logs/you_domain.ru.error.log
[root@host www]#

находим большие и можем обнулить их

# :>  /var/www/httpd-logs/you_domain.ru.error.log

Полезные скрипты

Уведомление о заканчивающемся свободном месте (PHP)

Создайте файл с содержимым:

<?php

$bash_run = "df -m | grep \"/dev/vdisk\" | awk '{print $4}'";
$freespace = exec($bash_run);

$srv_ip=$_SERVER['SERVER_ADDR']; // ip- адрес проверяемого сервера

if ($freespace < 5000) // 5 Gb
{ mail(
"mail@you_mail.ru",
"!!! FreeSpase on the Server $srv_ip !!! // chech_disk_space_to_email.php ",
"Warning!!! On the Server $srv_ip Freespace = $freespace Mb"
);
}

Добавьте выполнение данного скрипта в cron:

# crontab -e
0 */2 * * *  php /путь/до/скрипта

от