Обычно администратор UNIX® регулярно применяет ряд утилит, приемов и систем. Для упрощения различных процессов можно использовать основные утилиты, операторы командной строки и сценарии. Часть этих инструментов поставляется вместе с операционной системой, но большая часть приемов нарабатывается на основе практического опыта и желания администратора упростить свою жизнь. Цель этой серии статей - рассказать о большей части доступных инструментов для различных UNIX-систем, включая методы упрощения администрирования гетерогенных сред.
Контроль за расходованием дискового пространства - важная часть работы 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 в отличие от 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, чтобы выяснить, какой объем дискового пространства используется какими пользователями. Для большей автоматизации контроля использования дискового пространства лучшее решение - это механизм квот.
Научиться
-
System Administration Toolkit: Monitoring disk space and usage (EN): оригинал статьи.
-
System Administration Toolkit: ознакомьтесь с другими статьями этой серии.
-
IBM Redbooks: у IBM есть Redbook по AIX для администраторов Sun Solaris, в которой содержится полезная информация об отличиях AIX от Solaris.(EN)
-
HP-UX 11i System Administration Handbook and Toolkit: книга Марти Понятовского (Marty Poniatowski) (Prentice Hall PTR, ISBN: 0-13-060081-3) содержит информацию не только о HP-UX, но также сравнивает команды и результаты исполнения команды в HP-UX с другими версиями UNIX.(EN)
-
AIX® and UNIX articles: другие статьи, написанные Мартином Брауном.(EN)
- Разделы библиотеки информации по AIX и UNIX:(EN)
- Системное администрирование
- Разработка приложений
- Производительность
- Переносимость
- Безопасность
- Подсказки
- Инструментальные средства и утилиты
- Java™-технологии
- Linux®
- Open source
-
AIX и UNIX: сообщество developerWorks предоставляет много информации, относящейся ко всем аспектам системного администрирования AIX и повышения квалификации пользователей UNIX.
-
Новичок в AIX и UNIX?: страница AIX и UNIX для новичков.
-
AIX 5L Wiki: совместная разработка документации AIX.(EN)
-
Safari bookstore: электронная библиотека технической информации.(EN)
-
developerWorks technical events and webcasts: новости о событиях и Web-конференциях сообщества developerWorks
-
Podcasts: аудиозаписи презентаций технических экспертов IBM..
-
developerWorks technical events and webcasts: будьте в курсе последних технических событий и Webcast-конференций сообщества developerWorks..
Получить продукты и технологии
-
IBM trial software: ознакомительные версии программного обеспечения для разработчика, которые можно загрузить со страницы developerWorks.(EN)
Обсудить
- Примите участие в обсуждении материала на форуме.
- участие в блогах developerWorks - прекрасная возможность для участия в деятельности developerWorks.(EN)
-
Примите участие в форумах AIX и UNIX:(EN)
- Управление кластерными системами
- Поддержка IBM
- Производительность — технический форум
- Виртуализация — технический форум
Мартин Браун – бывший руководитель IT подразделения с опытом работы в области межплатформенной интеграции. Обладая большим опытом разработчика, он создал динамические сайты для множества крупных клиентов, включая HP и Oracle, и на данный момент является техническим директором ресурса Foodware.net. В настоящее время Мартин в качестве внештатного автора и консультанта сотрудничает с корпорацией Microsoft, работает редактором (LAMP Technologies Editor) журнала LinuxWorld, является видным членом группы AnswerSquad.com. Его перу принадлежат книги на совершенно разные темы: от сертификации Microsoft, компьютеры iMac до программирования открытого исходного кода. При всем этом он продолжает плодотворно работать в области программирования для разных платформ и сред. Связаться с Мартином можно посредством его персонального Web-сайта по адресу http://www.mcslp.com.