Изучаем Linux, 101: Управление дисковыми квотами

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

Из этой статьи вы узнаете о настройке дисковых квот в файловых системах Linux® для ограничения используемой пользователем или группой пользователей емкости. Система квот помогает предотвратить исчерпание свободной емкости жесткого диска. Вы можете использовать этот материал для подготовки к экзамену LPI 101 программы сертификации на администратора Linux начального уровня или просто для общего развития.

Об этой серии

Эта серия статей поможет вам освоить задачи администрирования операционной системы Linux. Вы также можете использовать материал этих статей для подготовки к экзаменам первого уровня сертификации профессионального института Linux (LPIC-1).

Чтобы посмотреть описания статей этой серии и получить ссылки на них, обратитесь к нашему перечню материалов для подготовки к экзаменам LPIC-1. Этот перечень постоянно дополняется новыми статьями по мере их готовности и содержит самые последние (по состоянию на апрель 2009 года) цели экзаменов сертификации LPIC-1. Если какая-либо статья отсутствует в перечне, можно найти ее более раннюю версию, соответствующую предыдущим целям LPIC-1 (до апреля 2009 года), обратившись к нашим руководствам для подготовки к экзаменам института Linux Professional Institute.

Краткий обзор

Из этой статьи вы узнаете, как управлять дисковыми квотами пользователей. Вы научитесь:

  • Настраивать дисковые квоты файловой системы.
  • Устанавливать пределы квот.
  • Проверять квоты.
  • Создавать отчеты о квотах.

Все примеры этой статьи (если это не оговаривается отдельно) выполнены в операционной системе Fedora 13 с версией ядра 2.6.34. Результаты, полученные в других операционных системах, могут отличаться.

Эта статья поможет вам подготовиться к сдаче экзамена LPI 101 на администратора начального уровня (LPIC-1) и содержит материалы цели 104.4 темы 104. Цель имеет вес 1.

Необходимые условия

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

Также вы должны быть знакомы с материалом статьи "Изучаем Linux 101: создание разделов и файловых систем".


Основные сведения о квотах

Как связаться с Яном

Ян – один из наших наиболее популярных и плодовитых авторов. Ознакомьтесь со всеми статьями Яна (EN), опубликованными на сайте developerWorks. Вы можете найти контактные данные в профиле Яна и связаться с ним, а также с другими авторами и участниками ресурса My developerWorks.

Квоты позволяют контролировать использование дискового пространства пользователями или группами пользователей. При применении квот отдельные пользователи или группы не могут занять больше места на диске, чем разрешено квотой. Файловая система XFS также поддерживает механизм квот проекта, позволяющих ограничивать дисковое пространство для дерева каталогов; при этом неважно, какие пользователи создают файлы в этом дереве.

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

Существует три версии квот:

  1. vfsold, или версия 1.
  2. vfsv0, или версия 2.
  3. xfs, или квота для файловой системы XFS.

В этой статье будут рассмотрены квоты версии 2 для файловых систем, отличных от XFS, а также xfs-квоты для файловых систем XFS. Заметим, что для успешной сдачи экзамена LPI 101 вы должны знать о квотах версии 2.

Для использования квот необходима поддержка на уровне ядра Linux. Такая поддержка появилась в последних редакциях ядра версии 2.4 и присутствует во всех редакциях ядра версии 2.6.

Все квоты XFS являются журналируемыми. Журналируемые квоты версии 2 поддерживаются ядром версии 2.6.11 и выше.


Настройка тестовой среды

Сначала я расскажу о настройке тестового раздела диска, который мы будем использовать в этих примерах. Если вы уже знаете о владельцах и правах доступа к файлам и у вас установлен пакет quota, то можно пропустить эту часть статьи и перейти к разделу Включение квот. Для получения ссылок на другие статьи этой серии, содержащие более подробную информацию об упоминаемых здесь командах, обратитесь к нашему перечню материалов для подготовки к экзаменам LPIC-1.

Тестовые разделы и пользователи

В наших примерах мы будем использовать ext4-раздел /dev/sda7 размером 110 ГБ и XFS-раздел /dev/sda8 размером 40 ГБ. Эти разделы смонтированы в директории /quotatest/ext4 и /quotatest/xfs соответственно.

Листинг 1. Создание и настройка разделов
[root@echidna ~]# mkfs -t ext4 /dev/sda7
mke2fs 1.41.10 (10-Feb-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
7159808 inodes, 28637862 blocks
1431893 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
874 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@echidna ~]# mkfs -t xfs /dev/sda8
meta-data=/dev/sda8              isize=256    agcount=4, agsize=2622108 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=10488429, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=5121, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@echidna ~]# mkdir -p /quotatest/ext4
[root@echidna ~]# mkdir -p /quotatest/xfs
[root@echidna ~]# mount /dev/sda7 /quotatest/ext4
[root@echidna ~]# mount /dev/sda8 /quotatest/xfs

В этом примере мы хотим разрешить обычным пользователям создавать файлы в новых файловых системах. После того, как файловая система создана, ее владельцем становится пользователь root, и обычные пользователи не могут создавать в ней файлы или директории. Мы назначим владельцем новых файловых систем пользователя development, являющегося членом группы development. Также мы изменим разрешения для файловых систем таким образом, чтобы пользователи, входящие в состав группы development, могли создавать в них файлы и директории. В листинге 2 показано, как изменить владельцев и разрешения в нашем примере.

Листинг 2. Изменение владельцев и разрешений для тестового раздела
[root@echidna ~]# # Show default ownership and permissions
[root@echidna ~]# ls -l /quotatest/
total 4
drwxr-xr-x. 3 root root 4096 Nov 18 22:43 ext4
drwxr-xr-x. 2 root root    6 Nov 18 22:43 xfs
[root@echidna ~]# # Change user and group ownership to development
[root@echidna ~]# chown development:development /quotatest/*
[root@echidna ~]# # Allow group members to create files and directories
[root@echidna ~]# chmod g+w /quotatest/*
[root@echidna ~]# ls -l /quotatest/
total 4
drwxrwxr-x. 3 development development 4096 Nov 18 22:43 ext4
drwxrwxr-x. 2 development development    6 Nov 18 22:43 xfs
[root@echidna ~]# # Set default group of new files and directories
[root@echidna ~]# # to development
[root@echidna ~]# chmod g+s /quotatest/ext4/
[root@echidna ~]# ls -l /quotatest/
total 4
drwxrwsr-x. 3 development development 4096 Nov 19 11:39 ext4
drwxrwxr-x. 2 development development    6 Nov 18 22:43 xfs

Мы будем использовать учетные записи трех пользователей: ian, gretchen и tom. Каждая учетная запись входит в состав соответствующей ей одноименной группы, а также в состав группы development.

Проверка наличия установленного пакета quota

Если вы используете обычный настольный компьютер, то пакет quota может быть не установлен на нем по умолчанию. Чтобы проверить, установлен ли в вашей системе этот пакет, используйте команду dpkg или rpm, как показано в листинге 3.

Листинг 3. Листинг 3. Проверка наличия установленного пакета quota
# On Debian-based systems
ian@pinguino:~$ dpkg -l quota
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  quota          4.00~pre1-3    implementation of the disk quota system

# On systems that use RPM
[ian@echidna ~]$ rpm -q quota
quota-3.17-11.fc13.x86_64

Если пакет quota не установлен, прочитайте статьи "Изучаем Linux 101: управление пакетами в Debian" и "Изучаем Linux 101: управление пакетами с помощью RPM и YUM", которые помогут вам выполнить его инсталляцию.


Включение квот

Добавление поддержки квот в файл /etc/fstab

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

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

Таблица 1. Опции системы квот в файле /etc/fstab
ОпцияВерсия квотыДействие
usrquotaВсе версии Включить квоты для пользователей.
usrjquota=filenamevfsv0Включить журналируемые квоты для пользователей. Эта опция требует указания имени базы данных квот (обычно aquota.user) и использования опции jqfmt.
uquotaxfsЭквивалентна опции usrquota.
grpquotaВсе версии Включить квоты для групп.
grpjquota=filenamevfsv0Включить журналируемые квоты для групп. Эта опция требует указания имени базы данных квот (обычно aquota. group) и использования опции jqfmt.
gquotaxfsЭквивалентна опции grpquota.
prjquotaxfsВключение квот проекта.
pquotaxfsЭквивалентна опции prjquota.
jqfmt=formatvfsv0Указание формата квоты при использовании опций usrjquota или grpjquota; на текущий момент единственным поддерживаемым форматом является vfsv0.
quotavfsold, vfsv0Эквивалентна опции usrquota.
noquotavfsold, vfsv0Отключение квот.
uqnoenforcexfsВключение учета пользовательских квот и отключение жестких ограничений на использование дискового пространства.
gqnoenforcexfsВключение учета групповых квот и отключение жестких ограничений на использование дискового пространства.
pqnoenforcexfsВключение учета квот проекта и отключение жестких ограничений на использование дискового пространства.

В наших примерах используются разделы ext4 и XFS. Для этих разделов мы определим квоты пользователей и групп, и вы сможете увидеть, как они работают в различных файловых системах. Соответствующие строки файла /etc/fstab показаны в листинге 4.

Листинг 4. Включение поддержки квот в файле /etc/fstab
/dev/sda7  /quotatest/ext4  ext4    defaults,usrquota,grpquota          1 2
/dev/sda8  /quotatest/xfs   xfs     defaults,usrquota,grpquota          1 2

Повторное монтирование файловых систем

После добавления поддержки квот в файл /etc/fstab необходимо выполнить повторное монтирование файловых систем. В файловых системах XFS информация о квотах является частью метаданных файловой системы. В других файловых системах информация о квотах пользователей хранится в файле aquota.user, находящемся в корне файловой системы, а информация о квотах групп пользователей – в файле aquota.group, находящемся там же. Для квот версии 1 используются файлы quota.user и quota.group. После повторного монтирования этих файловых систем необходимо создать файлы квот и включить проверку квот. Для проверки квот во всех файловых системах и создания необходимых файлов aquota.user и aquota.group (если они не существуют) используется команда quotacheck. Также эта команда позволяет восстанавливать поврежденные файлы квот. Для получения дополнительной информации обратитесь к man-страницам.

Перечислим несколько наиболее распространенных опций команды quotacheck.

-a или --all
Проверять все смонтированные файловые системы в /etc/mtab (за исключением файловых систем NFS).
-c или --create-files
Игнорировать существующие файлы квот. Выполнить новое сканирование и записать результаты на диск.
-u или --user
Проверять квоты пользователей (используется по умолчанию).
-g или --group
Проверять квоты групп пользователей.
-v или --verbose
Подробный вывод.

В листинге 5 представлен результат выполнения команды quotacheck для наших файловых систем, которые были только что повторно смонтированы. Если не используется опция -a, необходимо указать файловую систему, которую необходимо проверить.

Листинг 5. Создание файлов баз данных квот версий vfsold и vfsv0
[root@echidna ~]# quotacheck -augvc
quotacheck: Skipping /dev/sda8 [/quotatest/xfs]
quotacheck: Your kernel probably supports journaled quota but you are not using it. 
Consider switching to journaled quota to avoid running quotacheck after an unclean 
shutdown.
quotacheck: Scanning /dev/sda7 [/quotatest/ext4] done
quotacheck: Cannot stat old user quota file: No such file or directory
quotacheck: Cannot stat old group quota file: No such file or directory
quotacheck: Cannot stat old user quota file: No such file or directory
quotacheck: Cannot stat old group quota file: No such file or directory
quotacheck: Checked 2 directories and 1 files
quotacheck: Old file not found.
quotacheck: Old file not found.

Обратите внимание на предупреждение команды quotacheck, которая предлагает переключиться в режим использования журналируемых квот. Для этого отредактируйте файл /etc/fstab, изменив для файловой системы ext4 (раздел /dev/sda7) значение
defaults,usrquota,grpquota
на значение
defaults,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0

Также отметим, что файловая система XFS не была обработана командой quotacheck, поскольку данные квот XFS содержатся в метаданных и журналируются.

Запуск и остановка проверки квот

Для включения проверки квот версий vfsold и vfsv0 необходимо выполнить команду quotaon. Опции -a, -g, -u и -v выполняют те же действия, что и опции команды quotacheck. Точно так же, если вы не используете опцию -a, то вы должны указать файловую систему. Если вы просто хотите посмотреть статус проверки квот (включена или отключена), то используйте опцию -p. Для отключения проверки квот выполните команду quotaoff. В листинге 6 приведены примеры использования обеих команд.

Листинг 6. Включение и отключение проверки квот vfsold и vfsv0
[root@echidna ~]# quotaon -p /quotatest/ext4/
group quota on /quotatest/ext4 (/dev/sda7) is off
user quota on /quotatest/ext4 (/dev/sda7) is off
[root@echidna ~]# quotaon -uagv
/dev/sda7 [/quotatest/ext4]: group quotas turned on
/dev/sda7 [/quotatest/ext4]: user quotas turned on
[root@echidna ~]# quotaoff -ugv /quotatest/ext4/
/dev/sda7 [/quotatest/ext4]: group quotas turned off
/dev/sda7 [/quotatest/ext4]: user quotas turned off
[root@echidna ~]# quotaon -ugv /quotatest/ext4/
/dev/sda7 [/quotatest/ext4]: group quotas turned on
/dev/sda7 [/quotatest/ext4]: user quotas turned on

Если файловая система XFS не была смонтирована с использованием опций uqnoenforce, gqnoenforce или pqnoenforce, то проверка квот включена в ней по умолчанию. Для управления квотами xfs используется команда xfs_quota с опцией -x (т. е. expert – эксперт). Если опция –x не используется, то команда xfs_quota просто выводит информацию о квотах. У этой команды есть несколько подкоманд, включая help для вывода списка всех доступных подкоманд, state для вывода общего состояния, enable для включения проверки квот и disable – для ее отключения. Опции -u, -g и -p определяют, что все действия будут выполняться для пользователей, групп или проектов, соответственно. Для подробного вывода используется опция -v. Также можно запускать команду в режиме командной строки, в котором отдельные подкоманды указываются с опцией -c. Эту опцию можно использовать несколько раз для выполнения нескольких подкоманд. При использовании опции -c для выполнения подкоманды может потребоваться заключить эту подкоманду в кавычки. Некоторые примеры представлены в листинге 7.

Листинг 7. Включение проверки квот xfs
[root@echidna ~]# xfs_quota -x
xfs_quota> state
User quota state on /quotatest/xfs (/dev/sda8)
  Accounting: ON
  Enforcement: ON
  Inode: #131 (3 blocks, 3 extents)
Group quota state on /quotatest/xfs (/dev/sda8)
  Accounting: ON
  Enforcement: ON
  Inode: #132 (3 blocks, 3 extents)
Project quota state on /quotatest/xfs (/dev/sda8)
  Accounting: OFF
  Enforcement: OFF
  Inode: #132 (3 blocks, 3 extents)
Blocks grace time: [7 days 00:00:30]
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30]
xfs_quota> disable
xfs_quota> quit
[root@echidna ~]# xfs_quota -x  -c "enable -gu -v"  /quotatest/xfs
User quota state on /quotatest/xfs (/dev/sda8)
  Accounting: ON
  Enforcement: ON
  Inode: #131 (3 blocks, 3 extents)
Group quota state on /quotatest/xfs (/dev/sda8)
  Accounting: ON
  Enforcement: ON
  Inode: #132 (3 blocks, 3 extents)
Blocks grace time: [7 days 00:00:30]
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30]

Проверка квот версий vfsold и vfsv0 при загрузке

Стоит упомянуть, что команды quotacheck и quotaon обычно используются в сценариях инициализации, позволяя включать использование квот при загрузке операционной системы. Дополнительную информацию вы можете найти в справочнике "Quota Mini HOWTO" (раздел Ресурсы). Если вы используете журналируемые квоты, нет необходимости запускать команду quotacheck во время загрузки.


Установка пределов квот

Вы уже знаете, что квоты управляются либо двоичными файлами, расположенными в корне файловой системы, либо метаданными файловой системы. Чтобы установить квоту для определенного пользователя, используйте команду edquota. Эта команда извлекает информацию о квотах пользователя из различных файловых систем, для которых включена поддержка квот, создает временный файл и открывает текстовый редактор, в котором можно изменить настройки квот. По умолчанию команда edquota использует редактор vi. Другой редактор можно назначить с помощью переменных окружения EDITOR и VISUAL. Для редактирования пользовательских квот используйте опцию -u (эта опция используется по умолчанию) и укажите одно или несколько имен пользователей. Для редактирования групповых квот используйте опцию -g и укажите одно или несколько имен групп.

Для редактирования квот необходимо обладать привилегиями пользователя root. Если вы используете редактор vi, вы должны увидеть вывод, подобный выводу в листинге 8.

Листинг 8. Запуск команды edquota
Disk quotas for user ian (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda7                         0          0          0          0        0        0
  /dev/sda8                         0          0          0          0        0        0
~
~

Как видно из листинга 8, для каждой файловой системы, для которой включена поддержка квот, команда edquota выводит текущее использование дискового пространства в блоках размерами в 1 КБ, а также в индексных дескрипторах inode. Также выводятся значения мягких и жестких ограничений на использование блоков и дескрипторов inode. Значения 0 в этом примере означают, что пределы квот не заданы.

Мягкий предел – это значение, при превышении которого пользователь получает по электронной почте предупреждения о превышении квоты. Жесткий предел – это значение, которое пользователь не может превысить. Пределы, определенные в блоках, можно рассматривать как максимальный объем данных, которые может хранить пользователь, а пределы, определенные в индексных дескрипторах – как максимальное количество файлов и директорий.

Изменение пределов квот

Изменение пределов квот осуществляется путем изменения значений во временном файле и его сохранения. Если вы хотите отказаться от изменений, то выйдите из редактора без сохранения. В наших примерах мы будем задавать очень маленькие пределы для квот, поэтому вы сразу увидите эффект от их использования. Предположим, для каждой нашей файловой системы мы хотим установить квоту с пределом, равным 10 МБ данных и 50 файлам. Увеличим жесткие пределы еще на 10% и в результате получим следующие значения (листинг 9).

Листинг 9. Установка пределов
Disk quotas for user ian (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda7                         0      10240      11264          0       50       55
  /dev/sda8                         0      10240      11264          0       50       55

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

Копирование квот

Предположим теперь, что вы создаете дополнительные учетные записи пользователей для разработчиков (группа developers). Допустим, в системе имеются учетные записи пользователей gretchen и tom, и вы хотите использовать для них те же самые квоты, что и для учетной записи ian. Для этого запустите команду edquota с опцией -p, которая использует значения квоты пользователя ian в качестве прототипа для квот других пользователей, как показано в листинге 10.

Листинг 10. Установка квот на основе прототипа
root@pinguino:~# edquota -p ian gretchen tom

Пределы для групп пользователей

Команда edquota может также использоваться для ограничения дискового пространства на основе принадлежности к группе. Например, три вышеперечисленные учетные записи являются членами группы development. Чтобы ограничить суммарное файловое пространство, используемое всеми членами группы, 250 мегабайтами и 100 файлами, выполните команду edquota -g development, как показано в листинге 11.

Листинг 11. Установка квот для групп пользователей
Disk quotas for group development (gid 505):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda7                         4      25600      28160          1      100      110
  /dev/sda8                         0      25600      28160          0      100      110

Вы можете спросить, почему в файловой системе ext4 (раздел /dev/sda7) уже используется несколько блоков и индексных дескрипторов? Вспомните листинг 2, в котором мы использовали команды chown и chmod для задания группы-владельца по умолчанию для всех новых файлов, создаваемых в этой файловой системе. Эти действия также распространяются и на два файла базы данных квоты. Можно изменить группу-владельца этих файлов, изменив ее снова на root, как показано в листинге 12. Не забудьте отключить проверку квоты перед внесением изменений, а затем включить ее обратно.

Листинг 12. Задание новой группы–владельца файлов базы данных квоты
[root@echidna ~]# quotaoff /quotatest/ext4/
[root@echidna ~]# chown :root /quotatest/ext4/aquota.*
[root@echidna ~]# quotaon /quotatest/ext4/

Период отсрочки

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

Листинг 13. Установка периода отсрочки
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/sda7                     7days                  7days
  /dev/sda8                     7days                  7days

Проверка квот

Команда quota, запущенная без опций, выводит для вызвавшего ее пользователя все установленные для него квоты во всех файловых системах (если они содержат созданные этим пользователем файлы). Опция -v выводит информацию для всех файловых систем, для которых включены квоты. Пользователь root может также добавить к команде имя пользователя, чтобы просмотреть все определенные для него квоты. В листинге 14 мы создаем файл размером 1 МБ в файловой системе ext4 и выполняем команду quota с опцией -v и без нее.

Листинг 14. Просмотр квот
[ian@echidna ~]$ dd if=/dev/zero of=/quotatest/ext4/ianfile1 bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.00793796 s, 132 MB/s
[ian@echidna ~]$ quota
Disk quotas for user ian (uid 1000):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda7    1024   10240   11264               1      50      55
[ian@echidna ~]$ quota -v
Disk quotas for user ian (uid 1000):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda7    1024   10240   11264               1      50      55
      /dev/sda8       0   10240   11264               0      50      55

Помимо статистики о текущем использовании отображаются мягкие и жесткие пределы квот. Если запустить команду quota сразу после создания файла, то можно увидеть чуть больший счетчик блоков, отображаемый некоторое время. В листинге 15 показано, что происходит при превышении мягкого предела, а затем – при превышении жесткого предела. В этом примере мы создали дополнительный файл размером 9.5 МБ, и с учетом уже имеющегося файла размером 1 МБ их суммарный размер оказался достаточным, чтобы превысить мягкий предел. Обратите внимание на то, что рядом со значением мягкого предела появилась звездочка, означающая, что пользователь превысил квоту. Также обратите внимание на столбец периода отсрочки (grace), в котором теперь указано количество дней, которые отводятся пользователю на устранение проблемы. Наконец, если мы попытаемся создать копию файла, размером 1 МБ, то получим ошибку, поскольку в этом случае будет превышен жесткий предел для пользователя ian.

Листинг 15. Превышение квот
[ian@echidna ~]$ dd if=/dev/zero of=/quotatest/ext4/ianfile2 bs=1024 count=9500
9500+0 records in
9500+0 records out
9728000 bytes (9.7 MB) copied, 0.0754223 s, 129 MB/s
[ian@echidna ~]$ quota
Disk quotas for user ian (uid 1000):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda7   10552*  10240   11264   7days       2      50      55
[ian@echidna ~]$ cp /quotatest/ext4/ianfile1 /quotatest/ext4/ianfile3
cp: writing `/quotatest/ext4/ianfile3': Disk quota exceeded

Отчеты о квотах

Проверять квоты для каждого пользователя по отдельности не очень удобно, поэтому можно командой repquota создать отчеты о квотах. В листинге 16 показано, как можно просмотреть квоты для всех пользователей и групп в файловой системе /quotatest/ext4/.

Листинг 16. Создание отчетов о квотах
[root@echidna ~]# repquota -ug /quotatest/ext4/
*** Report for user quotas on device /dev/sda7
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      24       0       0              2     0     0
ian       +-   11260   10240   11264  6days       3    50    55
gretchen  --    2080   10240   11264             44    50    55
tom       -+     660   10240   11264             55    50    55  6days
development --       4       0       0              1     0     0


*** Report for group quotas on device /dev/sda7
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
Group           used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      24       0       0              2     0     0
development -+   14004   25600   28160            103   100   110  7days

Обратите внимание на знак + для пользователей ian и tom, а также для группы development, означающий, что каждый из них превысил квоту. Ян записал слишком большой объем данных, а Том – слишком большое количество файлов (равно как и группа development).

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


Квоты проекта для файловой системы XFS

Система квот xfs поддерживает дополнительный тип квот – квоты проекта, которые являются альтернативой групповым квотам. В одной файловой системе XFS невозможно одновременно использовать и групповые квоты, и квоты проекта. Чтобы включить поддержку квот проекта, необходимо внести запись prjquota (или pquota) в файл /etc/fstab.

Квоты проекта используют представление в виде числовых идентификаторов, а также в виде более описательных имен проектов. Для сопоставления числовых идентификаторов деревьям каталогов используется файл /etc/projects, а для сопоставления числовых идентификаторов именам проектов – файл /etc/projid. Можно обойтись и без этих файлов (хотя это не так удобно). Для получения дополнительной информации обратитесь к man-страницам.

Для настройки квот проекта необходимо использовать команду xfs_quota в режиме эксперта (опция -x). Сначала вы должны использовать подкоманду project с опцией -s для установки квот проекта, помечая необходимые индексные дескрипторы в качестве участников проекта, а затем использовать подкоманду limit для установки жестких или мягких пределов. В листинге 17 показано, как настроить дерево проекта в директории /quotatest/xfs/proj-dir1 с жестким пределом проекта размером в 15 МБ. Для наглядности мы также настраиваем дерево проекта /quotatest/xfs/proj-dir2, но без каких-либо ограничений.

Листинг 17. Установка квоты проекта xfs
[root@echidna ~]# mkdir -m ag+w /quotatest/xfs/proj-dir{1,2}
[root@echidna ~]# chown development:development /quotatest/xfs/proj-dir*
[root@echidna ~]# echo "50:/quotatest/xfs/proj-dir1" >> /etc/projects
[root@echidna ~]# echo "dev-projects:50" >> /etc/projid
[root@echidna ~]# xfs_quota -x
xfs_quota> path
      Filesystem          Pathname
 000  /quotatest/xfs      /dev/sda8 (uquota, pquota)
[001] /quotatest/xfs/proj-dir1 /dev/sda8 (project 50, dev-projects)
xfs_quota> project -s dev-projects
Setting up project dev-projects (path /quotatest/xfs/proj-dir1)...
Processed 1 (/etc/projects and cmdline) paths for project dev-projects with recursion
depth infinite (-1).
xfs_quota> limit -p bhard=15m dev-projects
xfs_quota> q

Чтобы увидеть, как работают квоты проекта, создадим несколько файлов из-под учетной записи chris. Пользователь chris не является членом группы development, и для его учетной записи или группы не определены никакие квоты. Из листинга 18 видно, что chris не может создать более 15 МБ данных в директории quotatest/xfs/proj-dir1, но этот объем никак не ограничен в директории /quotatest/xfs/proj-dir2.

Листинг 18. Квоты проекта в действии
[chris@echidna xfs]$ id chris
uid=1010(chris) gid=1010(chris) groups=1010(chris)
[chris@echidna xfs]$ dd if=/dev/zero of=proj-dir1/chris1 bs=1024 count=10000
10000+0 records in
10000+0 records out
10240000 bytes (10 MB) copied, 0.0379557 s, 270 MB/s
[chris@echidna xfs]$ cp proj-dir1/chris1 proj-dir1/chris2
cp: writing `proj-dir1/chris2': No space left on device
[chris@echidna xfs]$ ls -l proj-dir1
total 15356
-rw-rw-r--. 1 chris chris 10240000 Nov 23 13:16 chris1
-rw-rw-r--. 1 chris chris  5484544 Nov 23 13:16 chris2
[chris@echidna xfs]$ # Note: second copy was truncated at hard limit
[chris@echidna xfs]$ cp proj-dir1/chris1 proj-dir2/chris1
[chris@echidna xfs]$ cp proj-dir1/chris1 proj-dir2/chris2
[chris@echidna xfs]$ cp proj-dir1/chris1 proj-dir2/chris3
[chris@echidna xfs]$ du -sh *
15M     proj-dir1
30M     proj-dir2

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

Для предупреждения пользователей, превысивших квоту, используется команда warnquota. Когда квота превышена группой, по электронной почте отправляется предупреждение пользователю группы, указанному в файле /etc/quotagrpadmins. Формат сообщения задается в файле /etc/warnquota.conf. Файл /etc/quotatab используется для сопоставления имен файловых систем (например, /dev/sda7) их более дружественным описаниям, например "Совместно используемая файловая система EXT3". Обычно команда warnquota периодически выполняется по расписанию в качестве задания cron. Для получения дополнительной информации обратитесь к man-страницам cron и warnquota.

На этом мы заканчиваем знакомство с квотами в Linux.

Ресурсы

Научиться

  • Оригинал статьи: Learn Linux, 101: Manage disk quotas (EN).
  • Используйте перечень материалов для подготовки к экзаменам LPIC-1 (EN) для поиска статей developerWorks, которые помогут вам подготовиться к сдаче экзаменов программы сертификации LPIC-1, основанной на целях по состоянию на апрель 2009 года.
  • На Web-сайте программы сертификации LPIC (EN) вы найдете подробные цели, списки задач и примерные вопросы всех трех уровней сертификации на администратора Linux-систем профессионального института Linux. В частности, на этом сайте представлены цели экзаменов LPI 101 и LPI 102 по состоянию на апрель 2009 года. Всегда обращайтесь к Web-сайту программы сертификации LPIC, чтобы узнать последние цели.
  • Просмотрите всю серию статей для подготовки к экзаменам института LPI (EN) на сайте developerWorks, основанных на предыдущих целях, определенных до апреля 2009 года, чтобы изучить основы администрирования Linux и подготовиться к экзаменам для получения сертификата администратора Linux.
  • Справочник Quota mini-HOWTO (EN) поможет найти ответы на вопросы, касающиеся работы с квотами.
  • Web-сайт Linux Documentation Project (EN) содержит большое количество полезной документации, в особенности, HOWTO-руководств.

Обсудить

Комментарии

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=Linux
ArticleID=777153
ArticleTitle=Изучаем Linux, 101: Управление дисковыми квотами
publish-date=11292011