Настройка квот файловой системы в Ubuntu 18.04

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

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

Требования

Для работы вам нужен готовый сервер Ubuntu 18.04 с пользователем sudo, как описано в мануале Начальная настройка сервера Ubuntu 18.04.

Примечание: Методы, описанные в этом мануале, должны подойти и другим дистрибутивам Linux, но некоторые команды вам придется адаптировать самостоятельно.

1: Установка инструментов

Чтобы установить и проверить квоты, сначала нужно установить инструменты командной строки для таких задач (это может сделать apt). Обновите индекс пакетов, затем установите пакет:

sudo apt update
sudo apt install quota

Вы можете проверить, установлены ли инструменты, запустив команду quota и запросив информацию о ее версии:

quota --version
Quota utilities version 4.04.
. . .

Номер версии в выводе может отличаться.

Далее нужно убедиться, что у вас есть соответствующие модули ядра для мониторинга квот.

2: Установка модуля ядра для квотирования

Если вы используете облачный виртуальный сервер, в вашей стандартной установке Ubuntu Linux могут отсутствовать модули ядра, необходимые для поддержки управления квотами. Чтобы проверить наличие нужных модулей – quota_и quota_v2 в /lib/modules/… – используйте команду find.

find /lib/modules/`uname -r` -type f -name '*quota_v*.ko*'
/lib/modules/4.15.0-45-generic/kernel/fs/quota/quota_v1.ko
/lib/modules/4.15.0-45-generic/kernel/fs/quota/quota_v2.ko

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

Если вышеприведенная команда ничего не вернула, установите пакет linux-image-extra-virtual:

sudo apt install linux-image-extra-virtual

Этот пакет предоставит модули ядра, необходимые для внедрения квот. Еще раз введите предыдущую команду find, чтобы убедиться, что установка прошла успешно.

Затем нужно обновить параметры монтирования файловой системы, чтобы включить квоты в файловой системе root.

3: Обновление параметров монтирования файловой системы

Чтобы активировать квоты в определенной файловой системе, нужно смонтировать ее с указанием нескольких параметров, связанных с квотами. Мы сделаем это путем обновления записи файловой системы в конфигурационном файле /etc/fstab. Откройте этот файл в текстовом редакторе:

sudo nano /etc/fstab

Он выглядит так:

LABEL=cloudimg-rootfs   /        ext4   defaults        0 0
LABEL=UEFI      /boot/efi       vfat    defaults        0 0

Этот файл fstab виртуального сервера. Вероятно, у настольного или портативного компьютера будет немного другой fstab, но в большинстве случаев у вас будет / или корневая файловая система, которая представляет все ваше дисковое пространство.

Обновите строку, указывающую на корневую файловую систему, заменив параметр defaults следующими выделенными параметрами:

LABEL=cloudimg-rootfs   /        ext4   usrquota,grpquota        0 0
. . .

Это позволит вам включить в файловую систему как пользовательские (usrquota), так и групповые (grpquota) квоты. Если вам нужен только первый или второй тип квот, вы можете пропустить ненужную опцию. Если в вашей строке fstab уже указаны некоторые параметры вместо значения defaults, вы должны добавить новые параметры после тех, что уже есть, обязательно разделив все параметры запятой и без пробелов.

Перемонтируйте файловую систему, чтобы новые параметры вступили в силу:

sudo mount -o remount /

Примечание: Убедитесь, что между параметрами, указанными в файле /etc/fstab, нет пробелов. Если вы поставите пробел после запятой, вы увидите такую ошибку:

mount: /etc/fstab: parse error

Если вы видите это сообщение после выполнения предыдущей команды mount, снова откройте файл fstab, исправьте все ошибки и повторите команду mount.

Мы можем убедиться, что при монтировании файловой системы использовались новые опции, посмотрев файл /proc/mounts. Для отображения записи корневой файловой системы в этом файле используйте grep:

cat /proc/mounts | grep ' / '
/dev/vda1 / ext4 rw,relatime,quota,usrquota,grpquota,data=ordered 0 0

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

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

Прежде чем включить систему квот, нужно один раз вручную запустить команду quotacheck:

sudo quotacheck -ugm /

Эта команда создает файлы /aquota.user и /aquota.group. Эти файлы содержат информацию об ограничениях и использовании файловой системы, и на момент, когда вы включите мониторинг квот, они должны уже существовать. Используйте такие параметры quotacheck:

  • u: указывает, что нужно создать файл квоты для пользователей;
  • g: указывает, что нужно создать файл квоты для группы;
  • m: отключает перемонтирование файловой системы как доступной только для чтения при выполнении начального подсчета квот. Перемонтирование файловой системы только для чтения даст более точные результаты в случае, если пользователь активно сохраняет файлы во время процесса, но не является необходимостью во время начальной настройки.

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

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

ls /
aquota.group  bin   dev  home        initrd.img.old  lib64       media  opt   root  sbin  srv  tmp  var      vmlinuz.old
aquota.user   boot  etc  initrd.img  lib             lost+found  mnt    proc  run   snap  sys  usr  vmlinuz

Если вы не включили параметры u или g в команду quotacheck, соответствующий файл будет отсутствовать. Теперь можно включить систему квот:

sudo quotaon -v /

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

5: Настройка квоты для пользователя

Есть несколько способов установить квоты для пользователей или групп. Здесь мы рассмотрим, как устанавливать квоты с помощью команд edquota и setquota.

Установка квоты пользователя с помощью edquota

Команда edquota предназначена для редактирования квот. Давайте отредактируем пример квоты пользователя 8host:

sudo edquota -u 8host

Опция -u указывает, что это квота, которую нужно отредактировать, является пользовательской. Если вы хотите вместо этого изменить квоту группы, используйте опцию -g.

Это откроет файл в текстовом редакторе по умолчанию (как crontab -e открывает временный файл для редактирования). Файл будет выглядеть примерно так:

Disk quotas for user 8host (uid 1000):
Filesystem                   blocks       soft       hard     inodes     soft     hard
/dev/vda1                        40          0          0         13        0        0

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

Примечание: Понятие блока плохо обозначена и может меняться в зависимости от многих факторов, включая то, какой инструмент командной строки используется. В контексте установки квот в Ubuntu можно предположить, что 1 блок равен 1 килобайту дискового пространства.

В приведенном выше списке пользователь 8host использует 40 блоков или 40 КБ места на диске /dev/vda1. Ограничения soft и hard отключены значением 0.

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

Давайте выделим пользователю 8host блочную квоту с мягким пределом в 100MB и жестким пределом в 110MB.

Disk quotas for user 8host (uid 1000):
Filesystem                   blocks       soft       hard     inodes     soft     hard
/dev/vda1                        40       100M       110M         13        0        0

Сохраните и закройте файл. Чтобы проверить квоты, используйте команду quota:

sudo quota -vs 8host
Disk quotas for user 8host (uid 1000):
Filesystem   space   quota   limit   grace   files   quota   limit   grace
/dev/vda1     40K    100M    110M              13       0       0

Команда выведет текущее состояние квоты и покажет, что квота составляет 100М, а лимит равен 110М. Это отвечает мягким и жестким ограничениям, которые мы установили.

Примечание: Если вы хотите, чтобы ваши пользователи могли проверять свои квоты, не имея доступа к sudo, вам нужно дать им разрешение на чтение файлов квот, которые вы создали в разделе 4. Это можно сделать так: создайте группу users, сделайте эти файлы доступными для чтения группой users, а затем убедитесь, что все ваши пользователи включены в эту группу.

Чтобы узнать больше о правах Linux, читайте мануал Привилегии в Linux: что это и как с этим работать.

Установка квоты пользователя с помощью setquota

В отличие от edquota, setquota будет обновлять информацию о квоте пользователя в одной команде, без интерактивного этапа редактирования. Вы можете определить имя пользователя и мягкие и жесткие ограничения для квот на основе блоков и индексов, и, наконец, файловую систему, к которой будет применена квота:

sudo setquota -u 8host 200M 220M 0 0 /

Приведенная выше команда удвоит квоту 8host на основе блоков до 200 мегабайт и 220 мегабайт. Значения 0 0 – это настройки мягких и жестких пределов квоты на основе индекса (это значит, что такая квота не установлена). Эти значения необходимо указать, даже если вы не устанавливаете никаких квот на основе индексов.

Снова используйте команду quota, чтобы проверить квоту:

sudo quota -vs 8host
Disk quotas for user 8host (uid 1000):
Filesystem   space   quota   limit   grace   files   quota   limit   grace
/dev/vda1     40K    200M    220M              13       0       0

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

6: Генерация отчетов о квотах

Чтобы создать отчет о текущем использовании квот для всех пользователей в определенной файловой системе, используйте команду repquota:

sudo repquota -s /
*** Report for user quotas on device /dev/vda1
Block grace time: 7days; Inode grace time: 7days
Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   1696M      0K      0K          75018     0     0
daemon    --     64K      0K      0K              4     0     0
man       --   1048K      0K      0K             81     0     0
nobody    --   7664K      0K      0K              3     0     0
syslog    --   2376K      0K      0K             12     0     0
8host     --     40K    100M    110M             13     0     0

В этом случае мы генерируем отчет для корневой файловой системы /. Опция -s позволяет использовать удобочитаемые числа, когда это возможно. В списке есть несколько системных пользователей, для которых, вероятно, не установлены квоты по умолчанию. Пользователь 8host указан внизу с соответствующим использованным объемом, мягкими и жесткими ограничениями.

Также обратите внимание на Block grace time: 7days и столбец grace. Если бы пользователь превысил мягкое ограничение, столбец grace показал бы, сколько времени у него осталось, чтобы вернуться в рамки своей квоты.

7: Настройка периода отсрочки

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

sudo setquota -t 864000 864000 /

Приведенная выше команда устанавливает период отсрочки для квот по блокам и индексам в 864000 секунд, что равно 10 дням. Этот параметр применяется ко всем пользователям. Оба значения должны быть указаны, даже если вы используете только один тип квотирования (блок или индекс).

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

Снова запустите repquota, чтобы убедиться, что изменения вступили в силу:

sudo repquota -s /
Block grace time: 10days; Inode grace time: 10days
. . .

Изменения должны быть немедленно отражены в выводе repquota.

Заключение

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

Приложение: распространенные сообщения об ошибках, связанных с квотами

Ниже приведены некоторые распространенные ошибки, которые вы можете встретить при настройке и управлении квотами файловой системы.

quotaon: cannot find //aquota.group on /dev/vda1 [/]
quotaon: cannot find //aquota.user on /dev/vda1 [/]

Эту ошибку вы можете увидеть, если попытаетесь включить квоты (используя quotaon) до выполнения начальной команды quotacheck. Команда quotacheck создает файлы aquota или quota, необходимые для включения системы квот. За дополнительной информацией обратитесь к разделу 4.

quotaon: using //aquota.group on /dev/vda1 [/]: No such process
quotaon: Quota format not supported in kernel.
quotaon: using //aquota.user on /dev/vda1 [/]: No such process
quotaon: Quota format not supported in kernel.

Эта ошибка quotaon говорит о том, что ядро не поддерживает квоты или, по крайней мере, поддерживает неправильную версию. Это означает, что нужные модули ядра не установлены или загружаются неправильно. На сервере Ubuntu наиболее вероятной причиной этого является использование урезанного установочного образа на виртуальном облачном сервере.

Если это так, это можно исправить, установив пакет linux-image-extra-virtual с помощью apt (инструкции в разделе 2).

quota: Cannot open quotafile //aquota.user: Permission denied
quota: Cannot open quotafile //aquota.user: Permission denied
quota: Cannot open quotafile //quota.user: No such file or directory

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

Чтобы узнать больше о правах Linux, пожалуйста, прочитайте мануал Привилегии в Linux.

Tags: