System Administration Toolkit: Мониторинг и управление использованием дискового пространства

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

Мартин Браун (Martin C. Brown) , Внештатный автор и консультант компании MCslp, Свободный писатель

Мартин Браун – бывший руководитель IT подразделения с опытом работы в области межплатформенной интеграции. Обладая большим опытом разработчика, он создал динамические сайты для множества крупных клиентов, включая HP и Oracle, и на данный момент является техническим директором ресурса Foodware.net. В настоящее время Мартин в качестве внештатного автора и консультанта сотрудничает с корпорацией Microsoft, работает редактором (LAMP Technologies Editor) журнала LinuxWorld, является видным членом группы AnswerSquad.com. Его перу принадлежат книги на совершенно разные темы: от сертификации Microsoft, компьютеры iMac до программирования открытого исходного кода. При всем этом он продолжает плодотворно работать в области программирования для разных платформ и сред. Связаться с Мартином можно посредством его персонального Web-сайта по адресу http://www.mcslp.com.



18.02.2008

Об этой серии статей

Обычно администратор UNIX® регулярно применяет ряд утилит, приемов и систем. Для упрощения различных процессов можно использовать основные утилиты, операторы командной строки и сценарии. Часть этих инструментов поставляется вместе с операционной системой, но большая часть приемов нарабатывается на основе практического опыта и желания администратора упростить свою жизнь. Цель этой серии статей - рассказать о большей части доступных инструментов для различных UNIX-систем, включая методы упрощения администрирования гетерогенных сред.

Введение: использование df

Контроль за расходованием дискового пространства - важная часть работы UNIX-администратора. В этой статье приведены примеры использования утилит df, du, find и даже механизма квотирования для выполнения этой задачи. Мы начнем с примеров применения df.

Использование утилиты df может сэкономить много нервов системным администраторам, так как она с помощью одной команды дает мгновенный снимок дискового пространства, используемого и доступного для использования на всех файловых системах. В зависимости от версии UNIX утилита df выводит разную информацию.

Большинство современных версий df показывает объем дискового пространства, использованное и доступное, и точки монтирования (иногда - и само устройство). Например, в Mac OS X, основанная на BSD, df выводит информацию, приведенную в листинге 1.

Листинг 1. Информация по дисковому пространству, выдаваемая по умолчанию в Mac OS X
Filesystem    512-blocks      Used     Avail Capacity  Mounted on
/dev/disk0s2   268435456 119741344 148182112    45%    /
devfs                195       195         0   100%    /dev
fdesc                  2         2         0   100%    /dev
<volfs>             1024      1024         0   100%    /.vol
/dev/disk0s3    43474520   7251448  36223072    17%    /Volumes/Untitled

Обратите внимание, что размер выдается в блоках по 512 байт, а не килобайт. Практически все традиционные UNIX-системы по умолчанию выдают размер в блоках по 512 байт, а не килобайт. Чтобы получить информацию в блоках по 1 килобайту, нужно использовать опцию командной строки -k, как показано в листинге 2.

Листинг 2. Использование опции -k с командой df
$ df -k
Filesystem    1K-blocks      Used     Avail Capacity  Mounted on
/dev/disk0s2  134217728  59870704  74091024    45%    /
devfs                97        97         0   100%    /dev
fdesc                 1         1         0   100%    /dev
<volfs>             512       512         0   100%    /.vol
/dev/disk0s3   21737260   3625724  18111536    17%    /Volumes/Untitled

Некоторые версии могут также поддерживать альтернативные размеры блоков, такие как мегабайты (опция -m) и гигабайты (опция -g), как показано в листинге 3.

Листинг 3. Использование опции -g с командой df
$ df -g
Filesystem    1G-blocks Used Avail Capacity  Mounted on
/dev/disk0s2        128   57    70    45%    /
devfs                 0    0     0   100%    /dev
fdesc                 0    0     0   100%    /dev
<volfs>               0    0     0   100%    /.vol
/dev/disk0s3         20    3    17    17%    /Volumes/Untitled

Очевидно, по мере увеличения размера блоков уровень детализации информации начинает уменьшаться, но использование альтернативных размеров блоков может быть полезно для оперативного контроля за дисками, в особенности - за очень большими. Другие версии df (в том числе в Solaris) выдают по умолчанию информацию о пустых блоках и доступности файлов. Большая часть файловых систем имеет ограничения по количеству файлов, которые могут храниться (максимальное количество очень велико и на практике такое число обычно недостижимо), то есть существует риск переполнить систему файлами, и тогда на диски нельзя будет записать дополнительные файлы, хотя на них еще имеется свободная емкость.

Посмотрим на результат работы df на ОС Solaris в листинге 4.

Листинг 4. Результат работы на ОС Solaris
$ df
/                  (/dev/dsk/c0t0d0s0 ):14877208 blocks   914042 files
/devices           (/devices          ):       0 blocks        0 files
/system/contract   (ctfs              ):       0 blocks 2147483618 files
/proc              (proc              ):       0 blocks    16109 files
/etc/mnttab        (mnttab            ):       0 blocks        0 files
/etc/svc/volatile  (swap              ): 5737216 blocks   147177 files
/system/object     (objfs             ):       0 blocks 2147483532 files
/usr               (/dev/dsk/c0t0d0s3 ): 9076010 blocks   863695 files
/dev/fd            (fd                ):       0 blocks        0 files
/var               (/dev/dsk/c0t0d0s4 ): 8110796 blocks   483714 files
/tmp               (swap              ): 5737216 blocks   147177 files
/var/run           (swap              ): 5737216 blocks   147177 files
/export/home       (/dev/dsk/c0t0d0s7 ):69362510 blocks  4272812 files

Использование опции командной строки -k изменяет представленный результат на такой же, как был показан в предыдущих примерах, где данные представлены в более удобном для восприятия формате (см. листинг 5).

Листинг 5. Использование опции -k
$ df -k
Filesystem            kbytes    used   avail capacity  Mounted on
/dev/dsk/c0t0d0s0    7644629  206026 7362157     3%    /
/devices                   0       0       0     0%    /devices
ctfs                       0       0       0     0%    /system/contract
proc                       0       0       0     0%    /proc
mnttab                     0       0       0     0%    /etc/mnttab
swap                 2868600    1016 2867584     1%    /etc/svc/volatile
objfs                      0       0       0     0%    /system/object
/dev/dsk/c0t0d0s3    8261237 3723232 4455393    46%    /usr
fd                         0       0       0     0%    /dev/fd
/dev/dsk/c0t0d0s4    4130238   74849 4014087     2%    /var
swap                 2867584       0 2867584     0%    /tmp
swap                 2867624      40 2867584     1%    /var/run
/dev/dsk/c0t0d0s7    35611388  930133 34325142     3%    /export/home

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

$ df -k /
Filesystem            kbytes    used   avail capacity  Mounted on
/dev/dsk/c0t0d0s0    7644629  206026 7362157     3%    /

А это пример использования df для вывода дискового пространства домашнего каталога пользователя:

$ df -k ~mc
Filesystem             kbytes    used    avail capacity  Mounted on
/dev/dsk/c0t0d0s7    35611388  930133 34325142     3%    /export/home

Использование результатов работы df

Название утилиты df - это сокращение от disk free, т.е. свободный диск, и она выводит именно свободную емкость диска. Если еще раз взглянуть на некоторые примеры работы утилиты, можно сделать важные выводы:

Filesystem             kbytes    used    avail capacity  Mounted on
/dev/dsk/c0t0d0s7    35611388  930133 34325142     3%    /export/home

Первый столбец, в заголовке которого обычно содержится размер блока данных, показывает общий размер диска. Столбец used (используется) показывает количество блоков, используемых в файловой системе или устройстве. Столбец avail (доступно) показывает количество неиспользованных (доступных) блоков в файловой системе.

В столбце capacity (емкость) представлен размер используемого дискового пространства в процентах от общего используемого объема дисков. Одной этой информации достаточно, чтобы быстро понять, сколько пространства доступно.

По умолчанию UNIX создает файловые системы, до 90% емкости которых может быть заполнено данными пользователей. Оставшиеся 10% резервируются системой для использования пользователем root для проведения каких-либо срочных операций по поддержке системы. Если пользователь пытается добавить или создать файл, который превысит этот предел, он получит сообщение об ошибке.

Это пространство, предназначенное для поддержки в аварийной ситуации, может использоваться для восстановления системы с переполненного диска. К примеру, администратор может использовать дисковое пространство для быстрого создания резервных копий или для архивирования существующих данных без использования для этого вторичной файловой системы. Он может настроить объем дискового пространства, который будет зарезервирован, с помощью инструмента tunefs или при создании файловой системы. Это жизненно важно для больших дисков, где 10% запаса могут быть равны многим гигабайтам. В любом случае сохранять хотя бы один процент, чтобы иметь минимальный запас перед тем, как полностью закончится дисковое пространство - это хорошая идея. До того как возникнет такая ситуация, особенно когда окажется занятой большая часть дискового пространства, необходимо выяснить, кто все это пространство использует.


Использование du

Утилита du в отличие от df, показывающей свободное место на диске, выдает информацию об использованном пространстве диска. Утилита du используется для определения использования дискового пространства файлами и каталогами. Для использования du нужно зайти в нужный каталог и запустить утилиту (см. листинг 6).

Листинг 6. Утилита du
$ cd /var
$ du
16      ./lost+found
4       ./sadm/install/admin
22      ./sadm/install/logs
28448   ./sadm/install
4       ./sadm/pkg/SUNWocfd/install
4       ./sadm/pkg/SUNWocfd/save/pspool/SUNWocfd/install
16      ./sadm/pkg/SUNWocfd/save/pspool/SUNWocfd
18      ./sadm/pkg/SUNWocfd/save/pspool
20      ./sadm/pkg/SUNWocfd/save
28      ./sadm/pkg/SUNWocfd
4       ./sadm/pkg/SUNWcsu/inst
...

В листинге 6, результаты работы du приведены в сокращенном виде. По умолчанию du показывает, как диск используется каждым файлом или каталогом, находящимися внутри текущего или заданного каталога. Выдаваемая величина - это размер файла в блоках, размер которых по умолчанию определяется для конкретной системы так же, как и при использовании df. Это может быть 1К или другое значение, установить размер блоков равным 1К можно с помощью опции -k.

Если требуется получить итоговую информацию по файлу или каталогу верхнего уровня, то нужно использовать опцию -s. Ниже приведена итоговая информация по каталогу /var на ОС Solaris:

$ du -sk  
70818   .

Обратите внимание, что в этом примере показывается итоговая информация по текущему каталогу (.). Чтобы получить суммарную информацию для всех файлов и каталогов используется символ * (см. листинг 7).

Листинг 7. Использование символа * для получения итоговой информации
$ du -sk *
382     adm
950     apache
683     apache2
6837    appserver
1       audit
162     cache
3       cc-ccr
2       crash
4       cron
31      dmi
22      dt
6       fm
2       imq
1       inet
3       krb5
4       ld
1       ldap
937     lib
6       log
8       lost+found
2       lp
2       mail
1       mysql
1       news
3       nfs
38      nis
2       ntp
10034   opt
1       preserve
96      run
49687   sadm
15      saf
3       samba
2       sma_snmp
131     snmp
39      spool
4       statmon
663     svc
14      tmp
10      uucp
24      yp

Используя этот инструмент, нужно быть внимательным, особенно в каталогах пользователей, потому что показываемая информация не включает скрытые файлы, другими словами, файлы и каталоги с префиксом (.). Чтобы получить полную информацию, можно выполнить следующую команду в каталоге пользователя:

$ du -sk * .[a-zA-Z0-9]*

Наконец, еще одна полезная опция du – это -d, которая не дает du переходить границы указанной файловой системы. К примеру, чтобы определить использование диска в корневой файловой системе, но не других, можно использовать опцию -d:

$ du -dsk /

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


Рассмотрим использование диска конкретным пользователем

Чтобы определить, как определенный пользователь использует диск, потребуется комбинация команд du и find:

$ find . -user mc -type f -exec du -k {} \;

Опция -user позволяет сделать так, чтобы find выдавала только файлы, принадлежащие определенному пользователю. Опция -type заставляет find возвращать путь к элементам определенного типа (в этом случае - файлам). Она делает так, чтобы du не учитывала каталоги, которые принадлежат одному пользователю, но содержат файлы других пользователей. Таким образом для каждого найденного пути выполняют команду du, чтобы определить использование диска.

Чтобы получить сводную информацию или по-другому узнать суммарную емкость диска, используемого определенным пользователем, можно использовать awk:

$ find . -user mc -type f -exec du -k {} \;|awk '{ s = 
     s+$1 } END { print "Total used: ",s }'
Total used:  123721

Чтобы получить аналогичные данные для группы пользователей, нужно запустить find с опцией -group:

$ find . -group mcslp -type f -exec du -k {} \;|awk '{ s = s+$1 } END { print
 "Total used: ",s }'
Total used:  542485

Однако есть и более простой способ контроля за использованием дискового пространства - с помощью квотирования дискового пространства.


Использование квот

Система квотирования автоматически отслеживает использование диска пользователями в файловой системе. Квотирование не только дает возможность отслеживать использование дискового пространства, но также позволяет ввести ограничения (квоты) на использование емкости с системой предупреждений. Нижний предел (предупреждение) называется мягким пределом (soft limit), а верхнее ограничение (при выходе за которое пользователь не сможет создавать новые файлы) называется жестким пределом (hard limit). Некоторые системы также позволяют контролировать количество файлов, которое может иметь каждый пользователь.

Точный метод, который нужен для включения квотирования на конкретном компьютере, зависит от операционной системы. Большая часть UNIX-систем включают поддержку квотирования по умолчанию. В Linux®-системах может понадобиться собрать новое ядро, в котором есть поддержка квотирования. Большая их часть, однако, использует единственный файл для каждой файловой системы, обычно называемый quotas, в который записываются ограничения для каждого пользователя.

Чтобы включить квотирование, сначала нужно создать этот файл и проверить, что файл квот может редактироваться только пользователем root:

$ touch /export/home/quotas
$ chmod 600 /export/home/quotas

Затем включите квотирование с помощью команды quotaon:

$ quotaon /export/home

Наконец, нужно отредактировать квоты для каждого пользователя. Это можно сделать с помощью команды edquota, указав пользователя:

$ edquota mc

Редактор по умолчанию (или vi, если на компьютере не установлен другой редактор) будет открыт с простой формой для установки значений квот. Ниже можно увидеть, что квоты были установлены на файловую систему домашних каталогов пользователей с мягким ограничением (soft limit) 200000KB и жестким ограничением (hard limit) 400000KB. Установка нулевого значения для файлового предела показывает, что количество файлов не ограничено и пользователь может создавать столько файлов, сколько захочет.

fs /export/home blocks (soft = 200000, hard = 400000) inodes (soft = 0,
 hard = 0)

Если у администратора есть большее число файловых систем с квотами, тогда нужно конфигурировать больше строк для файловых систем.

Если требуется настроить квоты для нескольких пользователей, то сначала нужно установить квоту для одного пользователя, потом выполнить команду edquota с опцией -p. Таким образом, можно установить квоту для этого пользователя как основу для квот новых пользователей. К примеру, чтобы установить квоту для пользователей slp, tw, и sh, используя квоту, заданную для пользователя mc, нужно выполнить следующую команду:

$ edquota -p mc slp tw sh

Предупреждения при использовании квотирования

Когда пользователь создает файл, который заходит за пределы его мягкого предела (soft limit), он получает следующее предупреждение:

quota_ufs: Warning: over disk limit (pid 1738, uid 101, inum 94, fs /export/home)

Обратите внимание, что пользователю дается семь дней, чтобы исправить это; можно выставить другое время с помощью команды edquota -t.

Если пользователь пытается создать файл, который переходит жесткую границу (hard limit), система останавливает процесс записи и отсекает часть файла, заходящую за предел:

$ mkfile 210000k overlimit
quota_ufs: over hard disk limit (pid 1843, uid 101, inum 130, fs
 /export/home)
overlimit: initialized 191873024 of 215040000 bytes: Disc quota exceeded

Любой пользователь может определить его квоты и использование диска с помощью команды quota:

$ quota
Over disk quota on /export/home, remove 199993K within 7.0 days

Администрирование квот

Системные администраторы могут проверять квоты каждого пользователя с помощью команды quota. Можно использовать опцию -v, чтобы получить полный отчет о файловой системе, ее использовании, и информацию о лимитах (см. листинг 8).

Листинг 8. Использование опции -v
$ quota -v mc
Disk quotas for mc (uid 101):
Filesystem     usage  quota  limit    timeleft  files  quota  limit   
 timeleft
/export/home  399993 200000 400000    6.9 days    151      0      0

Чтобы получить информацию об использовании диска и квотах для всех пользователей, используется команда repquota с указанием файловой системы, для которой нужна информация (см. листинг 9).

Листинг 9. Использование команды repquote
$ repquota -v /export/home 
/dev/dsk/c0t0d0s7 (/export/home):
                      Block limits                  File limits
User           used   soft   hard  timeleft  used   soft   hard timeleft
mc        +- 399993 200000 400000  6.9 days   151      0      0

Чтобы быть уверенным, что информация о квотах актуальна, нужно использовать команду quotacheck. Эта команда сравнивает данные о хранимых файлах с информацией об используемых квотах, чтобы вывести информацию о квотах. Ее можно выполнять ее автоматически с помощью cron - вполне достаточно один раз в день (процесс достаточно емкий по времени).


Тонкости и скрытые проблемы квотирования

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

К примеру, программистам для сборки приложений нужно существенно больше дискового пространства, чем им выделено системным администратором. Эту проблему можно обойти, выделив неограниченную область для компиляции (создав альтернативный временный каталог), при этом сохранив квоты для домашних каталогов или установив подходящие мягкие пределы (soft limits), а жесткие пределы (hard limits) сделать очень высокими - возможно, даже больше, чем размер файловой системы.

В результате, когда будет перейден мягкий предел (soft limit), пользователь лишь получит предупреждение, но его операции будут ограничены только при достижении жесткой границы. Пользователи смогут создавать временные файлы, но - так как они уничтожаются в процессе сборки - у пользователей не будет проблем с созданием файлов, которые им нужны.

Квоты также могут быть применены для помощи в мониторинге использования специальных учетных записей пользователей. Я в прошлом использовал квоты для мониторинга учетных записей Web-пользователей, так называемых ничейных (nobody) учетных записей и других, чтобы проверить, что у них нет прав на запись файлов в файловые системы, куда у них не должно быть доступа. Чтобы это сделать, установите жесткий предел в размере 1KB на файловую систему для такого пользователя.


Автоматический мониторинг

Выполнять мониторинг использования дискового пространства вручную удобно, но вряд ли кому-то захочется постоянно запускать df (или даже du), чтобы определить объем используемого или свободного дискового пространства. Можно автоматизировать процесс так, чтобы администратору (или группе администраторов) автоматически приходило письмо, когда объем свободного дискового пространства будет меньше установленного уровня. Сценарий в листинге 10 управляет дисковым пространством и в нем можно установить предел, при котором будет выдаваться предупреждение (warninglimit) и аварийный (нижний) предел (lowlimit), а также список проверяемых файловых систем.

Листинг 10. Мониторинг дискового пространства
#!/bin/sh

warninglimit=500000
lowlimit=250000

filesystems="/export/data /export/home /"

for fs in $filesystems
do
        size=`df -k $fs|grep $fs|awk '{ print $4; }'`
        if [ $size -le $lowlimit ]
        then
                mailx -s "URGENT: Low disk space for $fs ($size)"
                break
        fi
        if [ $size -le $warninglimit ]
        then
                mailx -s "WARNING: Low disk space for $fs ($size)"
fi
done

Самой важной является строка, извлекающая размер свободного дискового пространства для каждой файловой системы:

size=`df -k $fs|grep $fs|awk '{ print $4; }'`

Этот сценарий использует df, выдает только нужную строку с помощью grep и затем использует awk, чтобы извлечь из данных четвертый столбец, в котором содержится размер свободного дискового пространства.

Затем можно сравнить свободное пространство на диске с установленными предельными значениями (нижним и предупреждающим) и сгенерировать соответствующий отчет. Чтобы одновременно не выдавались сообщения о достижении обоих пределов, сценарий сначала проверяет нижнюю границу и переходит к следующей файловой системе в цикле до того как выполнит проверку предупреждения.


Заключение

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

Можно определить свободное пространство и загруженность всех файловых систем с помощью df, но это даст только часть картины. Чтобы определить, какие части диска используются, нужно использовать инструмент du для определения размера различных каталогов. Можно использовать du, чтобы выяснить, какой объем дискового пространства используется какими пользователями. Для большей автоматизации контроля использования дискового пространства лучшее решение - это механизм квот.

Ресурсы

Научиться

Получить продукты и технологии

  • IBM trial software: ознакомительные версии программного обеспечения для разработчика, которые можно загрузить со страницы developerWorks.(EN)

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


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

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=290200
ArticleTitle=System Administration Toolkit: Мониторинг и управление использованием дискового пространства
publish-date=02182008