- Disk quota
- Installation
- Configuration
- Set up the filesystem
- Create quota index
- Usage
- Enable quota for user/group
- Specify a grace period
- Reports
- Copy quota settings
- To one or several users
- To groups
- To all users
- Tips and tricks
- Quota warnings
- Stats
- See also
- Настройка пользовательских квот файловой системы в Linux
- Установка пакета quota
- Модули ядра для работы системы квотирования
- Настройка конфигурации fstab
- Включение системы квотирования
- Настройка квот и отчёты
- Заключение
- Похожие записи:
Disk quota
«A disk quota is a limit set by a system administrator that restricts certain aspects of file system usage on modern operating systems. The function of setting quotas to disks is to allocate limited disk-space in a reasonable way.«
This article covers the installation and setup of disk quota.
Installation
Configuration
Set up the filesystem
Edit fstab to enable the quota mount option(s) on selected file systems, e.g.:
/dev/sda3 /home ext4 defaults,usrquota 0 2
To additionally enable the group quota mount option:
/dev/sda3 /home ext4 defaults,usrquota,grpquota 0 2
If supported by the kernel and file system it is recommended to use journaled quota instead:
/dev/sda3 /home ext4 defaults,usrjquota=aquota.user,jqfmt=vfsv1 0 2
Append grpjquota=aquota.group to enable group quota.
Remount the partition to apply the change:
Create quota index
To create the quota index for /home :
Append the -g parameter to also create a group index.
To enable disk quotas for the desired file system:
To disable disk quotas for the file system:
Usage
Enable quota for user/group
- To find out how many 1 kilobyte blocks are there for a partition use $ df .
- You may use a online bytes converter to calculate the correct amount of blocks [1].
- The command # setquota may be used as an alternative of # edquota [2].
Quotas are configured using edquota (as the root user) that will be opened in the default configured text editor:
Disk quotas for user user (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/sda3 24 0 0 6 0 0
blocks Indicates number of 1k blocks currently used by the user/group. soft Indicates max number of blocks for the user/group before a warning is issued and grace period countdown begins. If set to «0» (zero) then no limit is enforced. hard Indicates max number of blocks for the user/group can use. If maximum amount has been reached, no further disk space can be used. If set to «0» (zero) then no limit is enforced. inodes Indicates the current inodes amount used by the user/group. soft Indicates the soft inode limit for the user/group. hard Indicates the hard inode limit for the user/group.
Consider the following configuration for ftpuser1:
Disk quotas for user ftpuser1 (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/sda3 24 1000000 1048576 6 0 0
In this case if ftpuser1 uses over 976MB of space a warning will be issued. If the hard limit of 1GB has been reached the user will be unable to write any more data.
See #Specify a grace period to give users a specific amount of time to reduce storage usage when they hit their soft limit.
Warning: The hard limit applies to all files written by and for the respective user/group, including temporary files by started applications, which may crash at this point.
Specify a grace period
To give current users some time to reduce their file usage, a grace period can be configured. This specifies the allowed time a user/group can exceed their soft limit and while under their hard limit:
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/sda3 7days 7days
The grace period can be set in seconds, minutes, hours, days, weeks or months.
Reports
Shows all configured quotas:
Shows quotas on a specific partition:
Show quotas that apply to a user/user group:
Copy quota settings
To one or several users
To copy quota settings from user1 to user2 :
# edquota -p user1 user2
To copy quota settings to several other users, append user3 user4 .
To groups
To copy quota settings from group1 to group2 :
# edquota -g -p group1 group2
To all users
The idea is to modify the quota settings for one user and copy the setting to all other users. Set the quota for user1 and apply the quota to users with a UID greater than 999:
# edquota -p user1 $(awk -F: '$3 > 999 ' /etc/passwd)
Tips and tricks
Quota warnings
The command warnquota can be used to warn the users about their quota. Configuration is available in /etc/warnquota.conf .
Stats
The command quotastats can be used to give more information about the current quota usage:
Number of dquot lookups: 101289 Number of dquot drops: 101271 Number of still active inodes with quota : 18 Number of dquot reads: 93 Number of dquot writes: 2077 Number of quotafile syncs: 134518740 Number of dquot cache hits: 7391 Number of allocated dquots: 90 Number of free dquots: 2036 Number of in use dquot entries (user/group): -1946
See also
Настройка пользовательских квот файловой системы в Linux
Квоты на использование файловой системы — очень важный инструмент, позволяющий распределять ресурсы, собственно, файловой системы (ФС) между пользователями. Квоты являются ограничительными мерами, без которых любой пользователь довольно быстро может занять всё дисковое пространство системы, нарушив таким образом штатный режим её работы. В целях предотвращения таких неприятностей и управления квотами в Linux существует специальный инструмент quota.
Установка пакета quota
Как и полагается в таких случаях, все важные системные инструменты доступны для всех популярных дистрибутивов Linux по-умолчанию в их стандартных репозиториях. Нужно их просто установить. Так, для Ubuntu достаточно выполнить команду:
В других дистрибутивах для установки могут использоваться другие менеджеры пакетов и системы управления пакетами (СУП), могут также и отличаться наименования пакетов. Однако, ключевым словом для поиска инструмента квотирования в любой системе Linux является «quota». Метод настройки системы квотирования для разных дистрибутивов также принципиально не отличается.
Модули ядра для работы системы квотирования
Для работы системы квотирования в Linux необходима её поддержка ядром с помощью специальных модулей ядра. Обычно они установлены по-умолчанию в базовой поставке дистрибутива. Однако не лишним будет всё же это проверить:
$ find /lib/modules/`uname -r` -type f -name '*quota_v*.ko' /lib/modules/4.15.0-46-generic/kernel/fs/quota/quota_v2.ko /lib/modules/4.15.0-46-generic/kernel/fs/quota/quota_v1.ko
Здесь используется утилита find и команда uname -r (определяет версию активного системного ядра), которая просматривает каталог /lib/modules/ и ищет требуемые модули. Как видно, оба необходимых модуля установлены.
Понятно, что версия ядра из приведённого вывода может отличаться в других дистрибутивах, поэтому и используется команда uname -r в составе запроса команды find. В случае, если модули не будут найдены, нужно установить пакет linux-image-extra-virtual:
$ sudo apt install linux-image-extra-virtual
После этого нужно снова выполнить предыдущую команду find, чтобы убедиться, что нужные модули были установлены.
Настройка конфигурации fstab
Для того, чтобы для определённой ФС было возможно квотирование, её (ФС) необходимо определённым образом монтировать, передавая для этого специальные параметры. Для задания таких параметров (и не только) существует файл /etc/fstab . Его нужно отредактировать, например с помощью nano:
Содержимое fstab может быть, например, таким:
LABEL=cloudimg-rootfs / ext4 defaults 0 0 LABEL=UEFI /boot/efi vfat defaults 0 0
Чтобы настроить монтирование, например всей корневой ФС (/) в режиме работы квотирования, необходимо отредактировать соответствующую строку, заменив поле «default» параметрами «usrquota» и «grpquota»:
LABEL=cloudimg-rootfs / ext4 usrquota,grpquota 0 0 LABEL=UEFI /boot/efi vfat defaults 0 0
При задании параметров, если их несколько очень важно перечислять их через запятую и без пробелов. Как можно догадаться, новые параметры позволяют соответствующей ФС, т. е. для которой они определены, работать в режиме квотирования для пользователей (usrquota) и для групп – grpquota. Необязательно использовать их вместе, по необходимости можно задействовать только один из них.
Теперь необходимо перемонтировать корневую ФС:
Необходимо также и убедиться в том, что перемонтирование было произведено с требуемыми параметрами. Для этого можно посмотреть содержимое файла /proc/mounts , используя команды cat и grep:
$ cat /proc/mounts | grep ' / ' /dev/vda1 / ext4 rw,relatime,quota,usrquota,grpquota,data=ordered 0 0
Как видно, корневая ФС (/) смонтирована с требуемыми параметрами «usrquota» и «grpquota». Теперь необходимо включить и настроить саму систему квотирования.
Включение системы квотирования
Перед тем, как включать квотирование, необходимо создать соответствующие файлы конфигурации и инициализировать конфигурационные параметры. Это позволяет сделать следующая команда:
В результате будут созданы следующие файлы:
Опция «-m» выполняет отключение перемонтирования ФС в режиме «только для чтения», что очень полезно для корректного выполнения команды quotacheck. Естественно, опции «-u» и «-g» можно использовать независимо, исходя из условий задачи и не указывать их, если какая-то из из них не требуется. Символ «/» указывает, что это корневая ФС.
Теперь можно включить квотирование:
Но пока система квотирования не обрабатывает сами квоты, поскольку они пока не заданы. Теперь-то и можно их настроить.
Настройка квот и отчёты
Для настройки квот существуют две команды: edquota и setquota. Первая позволяет задавать настройки квот в текстовом редакторе, установленном по-умолчанию, вторая — без него, указанием соответствующих аргументов самой команды. Для более глубокого понимания стоит рассмотреть сначала задание квоты с помощью команды edquota, например для пользователя john:
Будет открыт текстовый редактор для редактирования следующего содержимого:
Disk quotas for user john (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/vda1 40 0 0 13 0 0
Как можно видеть, здесь приводятся данные о пользователе, для которого нужно настроить квоты, а также сами ограничения для блоков (blocks) и индексов (inodes), каждому из которых соответствует мягкое (soft) и жёсткое (hard) ограничение. Мягкое ограничение можно временно превышать. По истечении этого временного периода пользователь должен вернуться к разрешённым пределам (т. е. освободить дисковое пространство или удалить лишние файлы и каталоги), иначе ограничение будет распознаваться как жёсткое. Ограничения для блоков подразумевают объёмы дискового пространства в этих самых блоках. Ограничения по индексам не позволяют пользователю работать с определённым количеством каталогов и файлов, превышающим заданный лимит.
Обычно 1 блок составляет 1 килобайт данных. В данном примере для пользователя john установлена квота в 40 килобайт на устройстве /dev/vda1, а пределы для soft и hard отключены значением «0». Теперь можно задать для пользователя john квоты, определив, например значения soft и hard для блоков:
Disk quotas for user john (uid 1001): Filesystem blocks soft hard inodes soft hard /dev/vda1 40 100M 110M 13 0 0
Если теперь сохранить и закрыть файл, то можно проверить сделанные изменения для пользователя john командой:
Disk quotas for user john (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/vda1 40K 100M 110M 13 0 0
Следующая команда setquota, как уже было отмечено, позволяет задавать квоты без работы в текстовом редакторе:
$ sudo setquota -u john 200M 220M 0 0 /
В результате пользователю john будут назначены квоты: мягкая — 200 мегабайт и жёсткая — 220 мегабайт. Если использовать опцию -g, то квоты будут задаваться для указанной группы. Это применимо как к edquota, так и к setquota. Следует также отметить, что задание параметров для индексов (в данном случае «0 0») обязательно, даже если они отключены или не изменяются.
Для задания «мягкого» периода, в течение которого пользователь должен вернуться в указанные для него пределы нужно использовать опцию -t, например:
sudo setquota -t 864000 864000 /
В результате будет задан период отсрочки для блоков и индексов продолжительностью 864000 секунд, т. е. 10 дней. Обязательно нужно указывать оба параметра, даже если нужно настроить только один из них. Значения отсрочек будут заданы для всех пользователей.
Для просмотра отчётов по использованию пользователями квот нужно выполнить команду:
$ 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 john – 40K 100M 110M 13 0 0 7days
Опция «-s» позволяет выводить данные в «человекопонятном» формате.
Заключение
В заключение нужно ещё раз отметить, как важно использование инструмента квот для распределения ресурсов системы для пользователей. Настройка же квотирования, как можно видеть, особого труда не вызывает — всё довольно логично.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.