- Настройка дисковых квот в Linux
- Установка пакета quota
- Настройка раздела
- Корневая директория (/) + XFS
- Включение квот
- Ext и другие
- Установка квот
- Квоты пользователей
- Квоты для групп
- Копирование квот
- Настройка периода отсрочки
- Просмотр и проверка квот
- Отчет по квотам
- Проверка
- Другие квоты
- Квота на директорию
- Квоты в samba
- Квоты в vsftpd
- LINUX — Жизнь в консоли ЕСТЬ.
- Главное меню
- Последние статьи
- Счетчики
- Ограничение размера расшаренной папки.
Настройка дисковых квот в Linux
Пошагово разберем процесс установки ограничений на использование дискового пространства в системах Linux. Какой дистрибутив — не важно. Процесс немного различается для файловых систем XFS и EXT4/остальных — мы разберем оба варианта.
Установка пакета quota
Установка пакета для управления квотами выполняется из репозитория.
а) для систем на базе RPM (Red Hat, CentOS):
yum install quota
б) для систем на базе deb (Debian, Ubuntu):
apt-get install quota
Настройка раздела
Для возможности управлять квотами для определенного раздела необходимо его смонтировать с соответствующими опциями. Для файловых систем XFS и не XFS (например, ext) эти опции различаются:
- Для XFS — uquota (для пользователей) и/или gquota (для групп).
- Для ext и других — usrquota (для пользователей)и/или grpquota (для групп).
И так, чтобы добавить нужные опции для включения квотирования, откроем файл fstab:
Находим настройку для монтирования раздела, на который необходимо установить квоту и добавим нужные опции:
/dev/sda / ext4 defaults ,usrquota,grpquota 0 0
/dev/sdb /var xfs defaults ,uquota,gquota 0 0
* в данном примере мы добавили опции usrquota и grpquota для устройства /dev/sda, примонтированного в качестве корневого раздела / с файловой системой ext. А также опции uquota и gquota для устройства /dev/sdb (монтируется в /var с файловой системой xfs). Если необходимо включить квоту только для пользователей или групп, оставляем соответствующие опции.
* существуют и другие опции, например, jqfmt нужна для указания формата квоты при использовании журналирования. Подробнее описано в таблице Опции системы квот в файле /etc/fstab сайта IBM.
Перемонтируем наши разделы:
mount -o remount /
mount -o remount /var
Проверим, что нужные нам разделы теперь смонтированы с опциями квотирования:
mount | grep quota
Мы увидим, примерно, следующее:
/dev/sda on / type ext4 (rw,relatime, quota,usrquota,grpquota ,data=ordered)
/dev/sdb on /var type xfs (rw,relatime,attr2,inode64, usrquota,grpquota )
Квоты включены для разделов.
Корневая директория (/) + XFS
При попытке включить квоту для корневой директории XFS с помощью файла fstab, результат будет нулевым — в опциях монтирования мы будем наблюдать noquota, например:
/dev/sda on / type xfs (rw,relatime,attr2,inode64, noquota )
Для включения опции квотирования необходимо отредактировать загрузчик. Для этого открываем файл:
Находим строку GRUB_CMDLINE_LINUX и дописываем в нее rootflags=uquota,gquota — в моем случае получилось так:
.
GRUB_CMDLINE_LINUX=»crashkernel=auto rd.lvm.lv=vg/root rd.lvm.lv=vg/swap rhgb quiet floppy.allowed_drive_mask=0 rootflags=uquota,gquota »
.
На всякий случай, сохраним конфигурационный файл загрузчика:
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.backup
. и применим настройки grub:
grub2-mkconfig -o /boot/grub2/grub.cfg
После перезагрузки мы должны наблюдать такую картину:
mount | grep quota
/dev/mapper/vg-root on / type xfs (rw,relatime,attr2,inode64, usrquota,grpquota )
Квоты включены для корневого раздела с файловой системой XFS.
Включение квот
И так, мы разрешили квоты для разделов. Теперь включаем квоты. Процессы для XFS и остальных файловых систем немного различаются. Мы рассмотрим оба варианта. Так как в нашем примере есть разделы для XFS и Ext, то мы выполним все варианты настроек.
После монтирования раздела с файловой системой XFS автоматически включается квотирование (если была задана соответствующая опция). Проверить состояние можно, войдя в режим экспертного управления квотами:
. и выполнив команду для получения статуса:
Ext и другие
Выполним проверку наличия служебных файлов aquota.user и aquota.group — если их нет, команда их создаст автоматически:
. при наличии разделов с включенной квотой на XFS мы можем увидеть:
quotacheck: Skipping /dev/sdb [/var]
* это нам говорит о том, что команда quotacheck пропускаем раздел с xfs.
Включаем квоту для разделов:
Установка квот
Пришло время задать квоты. Они устанавливаются с помощью команды edquota.
Квоты пользователей
Для пользователя, вводим команду:
edquota -u dmosk
* где dmosk — имя пользователя, для которого будет задана квота.
В открывшемся редакторе можно задать ограничение на использование разделов, для которых включена квота:
Disk quotas for user dmosk (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda 20 0 10M 8 0 0
/dev/sdb 0 0 20M 0 0 0
- Filesystem — дисковое устройство, для которого устанавливается квота.
- blocks — текущее количество используемых пользователем блоков.
- первый soft — мягкая квота на объем данных (при ее превышении отправляется уведомление по почте, а после периода отсрочки, который по умолчанию составляет 7 дней, мягкая квота становится жесткой).
- первый hard — жесткая квота на объем данных (при ее превышении дальнейшая запись будет запрещена).
- inodes — текущее количество файлов, используемых пользователем.
- второй soft — мягкая квота на количество файлов (при ее превышении отправляется уведомление по почте).
- второй hard — жесткая квота на количество файлов (при ее превышении дальнейшая запись будет запрещена).
* в данном примере мы задали жесткую квоту для пользователя dmosk в 10 Мб на /dev/sda (корневой раздел) и 20 Мб на /dev/sdb (/var).
Квоты для групп
Для группы, задаем квоту так:
Как и в случае с пользователем, откроется редактор, с помощью которого можно задать квоту:
Disk quotas for group mail (gid 12):
Filesystem blocks soft hard inodes soft hard
/dev/sda 0 0 30M 6 0 0
/dev/sdb 0 0 40M 0 0 0
* в данном примере мы зададим квоту для группы в 30 Мб на /dev/sda (корневой раздел) и 40 Мб на /dev/sdb (/var).
Копирование квот
Мы также можем копировать квоты для пользователей. Для этого используется та же команда edquota с ключом -p:
edquota -p dmosk ivanov
* в данном примере мы скопируем настройку квотирования, которая применяется к dmosk на другого пользователя ivanov.
Настройка периода отсрочки
Как было упомянуто выше, мягкие ссылки являются мягкими только в течение периода отсрочки. Данный период по умолчанию равен 7 дням. Его можно задать командой edquota с ключом -t:
В открывшемся окне задаем новые значения:
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/mapper/vg-root 8days 9days
/dev/sdb 8days 9days
* в данном примере мы задали 8 дней для квот на дисковое пространство и 9 дней — на количество файлов.
Просмотр и проверка квот
Ограничения настроены. Проверим.
Отчет по квотам
Чтобы посмотреть отчет об используемом пространстве и установленных квотах, вводим команду:
* для отчета корневого раздела только по пользовательским (u) квотам в режиме удобного чтения (s).
* для отчета по разделу /var для групп.
Мы увидим что-то на подобие:
*** Report for user quotas on device /dev/sda
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
———————————————————————-
root — 2862M 0K 0K 115k 0 0
polkitd — 0K 0K 0K 2 0 0
tss — 8K 0K 0K 2 0 0
postfix — 4K 0K 0K 38 0 0
chrony — 4K 0K 0K 3 0 0
dmosk — 20K 0K 10240K 8 0 0
rpc — 0K 0K 0K 2 0 0
ntp — 4K 0K 0K 3 0 0
.
* как видим, это отчет по использованию раздела /. Мы видим, каким пользователем сколько занято дискового пространства и видим, что для нашего пользователя dmosk установлена квота в 10 Мб (10240 Кб).
Проверка
И так, мы настроили для пользователя dmosk ограничение на использование дискового пространства. Попробуем превысить данный лимит. Заходим в консоль под нужным пользователем:
dd if=/dev/zero of=/tmp/tmp_dmosk_file bs=1024000 count=100
* команда должна создать файл на 100 Мб в каталоге tmp.
Однако, система вернет сообщение:
dd: ошибка записи «/tmp/tmp_dmosk_file»: Превышена дисковая квота
11+0 записей получено
10+0 записей отправлено
скопировано 10240000 байт (10 MB), 0,223768 c, 45,8 MB/c
Другие квоты
Иногда, необходимо установить квоту в рамках определенной программы или каталога.
Однако, квоты так не работают и нет возможности задать их для определенного каталога или программы. Но это не означает, что выхода нет.
Квота на директорию
Чаще всего, нет необходимости задавать квоту на всю систему — нужно только ограничение размера директории. В данной ситуации нам нужно примонтировать диск к нужной директории и задать квоту на примонтированный раздел.
Квоты в samba
Как правило, речь в контексте samba идет о ограничения на использование шары. Для этого необходимо каждую шару поместить на отдельный раздел, каждый со своей квотой.
Также в файловом сервере samba есть возможность настройки квотирования на уровне программного обеспечения. В конфигурационном файле при настройке шары добавим:
[share]
.
vfs objects = default_quota
default_quota:uid = 1022
default_quota:uid nolimit = no
.
* в данном примере мы задаем квоту на каталог share. Данная квота должна быть такой же, как у системного пользователя с uid 1022. Таким образом, системные квоты должны быть настроены.
Для samba есть также параметр max disk size, который не является ограничением, а просто показывает для других программ максимальный объем доступного пространства.
Квоты в vsftpd
Настраивая vsftpd, мы также должны позаботиться о том, чтобы каталоги с FTP были на разделах с установленными квотами. Другими словами — вопрос также решается с применением пакета quota.
Источник
LINUX — Жизнь в консоли ЕСТЬ.
Главное меню
Последние статьи
Счетчики
Ограничение размера расшаренной папки.
Я знаю два способа:
1) Использовать пакет Quota. С помощью этого пакета можно задать квоту на дисковое пространство на разделе, для пользователя и для группы пользователей. Минус: задать отдельные квоты на дирректории, расположенные на одном разделе нельзя (или я пока незнаю как).
2) Создать файл необходимого размера, отформатировать его, и смонтировать в расшаренную папку. Тем самым получаем каталог ограниченного размера. Минус: если это каталог для нескольких пользователей пользователей, то один пользователь может занять все пространство, предназначенное для группы.
Избавиться от этих минусов можно комбинируя эти два способа. Алгоритм действий такой:
1) Создаем файлы для групп
2) Форматируем их
3) Монтируем файлы в соответствующие папки
4) Включаем квоты для пользователей на созданных файлах-разделах используя Quota
Тем самым на одном разделе можно создать несколько каталогов различного фиксированного объема и на каждый каталог задать различные квоты для пользователей.
Создадим два каталога, к примеру: для документов и «помойка» для остального хлама.
sudo mkdir /home/doc
sudo mkdir /home/other
Даем права на папки(например 770 — полный доступ владельцу и группе, остальным доступа нет):
sudo chmod 770 /home/doc
sudo chmod 770 /home/other
Создаем папку, где будут храниться «форматированные файлы-разделы» :
sudo mkdir /home/fs
В данном примере создаем файл, содержащий 10485760 блоков размером по 1024байт = 10ГБ для документов (при необходимости размер изменяем на нужный меняя count):
sudo dd if=/dev/zero of=/home/fs/doc.fs bs=1024 count=10485760
И для остального к примеру 20ГБ:
sudo dd if=/dev/zero of=/home/fs/other.fs bs=1024 count=20971520
Даем права на созданные файлы:
sudo chmod 770 /home/fs/doc.fs
sudo chmod 770 /home/fs/other.fs
Меняем группу, которой принадлежат файлы. Допустим что пользователи, которым нужен доступ в создаваемые дирректории, входят в группу «smbusers», тогда:
sudo chgrp smbusers /home/fs/doc.fs
sudo chgrp smbusers /home/fs/other.fs
Форматируем файлы в ext3:
sudo mkfs.ext3 /home/fs/doc.fs
sudo mkfs.ext3 /home/fs/other.fs
Монтируем в созданные нами папки:
sudo mount -t ext3 -o loop /home/fs/doc.fs /home/doc
sudo mount -t ext3 -o loop /home/fs/other.fs /home/other
для автоматического монтирования при загрузке в /etc/fstab добавляем:
/home/fs/doc.fs /home/doc auto auto,loop 0 0
/home/fs/other.fs /home/other auto auto,loop 0 0
Теперь нам надо установить квоты для юзверей на дисковое пространство. Ставим пакет quota:
sudo apt-get install quota
Редактируем файл /etc/fstab, добавляем «usrquota» в раздел, на который устанавливаем ограничение для пользователей:
sudo nano /etc/fstab
/home/fs/doc.fs /home/doc auto auto,loop,usrquota 0 0
/home/fs/other.fs /home/other auto auto,loop,usrquota 0 0
По умолчанию файлы квот хранятся в корневом каталоге файловой системы в файлах с именами aquota.user и aquota.group соответственно для пользовательских и групповых квот.
Этой командой создадим файлы:
quotacheck /home/doc
quotacheck /home/other
Если будет ругаться — пробуем запускать с ключем -m или -f .
sudo edquota -u petrov_ia
после этой команды откроется текстовый редактор, в которым указываем ограничения для пользователя petrov_ia и сохраняем. Вы можете ограничивать размещение ресурсов на основе объема дискового пространства (квотирование блоков), количества файлов (квотирование inode) или их комбинации. Каждое из этих ограничений, в свою очередь, делится на две категории: мягкие (soft) и жёсткие (hard) ограничения. Жёсткое ограничение не может быть превышено. мягкие ограничения могут быть превышены в течении некоторого периода времени. Если пользователь превышает своё мягкое ограничение в течение периода времени, превышающего отсрочку, то это мягкое ограничение становится жестким и последующее выделение ресурсов будет запрещено.
Например поставим ограничения: по объему – 1000 Мбайт, по количеству – 1000 файлов. Добавляя 10% запаса на жесткие пределы для раздела doc. И в 2 раза больше для other:
Disk quotas for user petrov_ia (uid 1005):
Filesystem blocks soft hard inodes soft hard
/dev/loop0 7 1024000 1126400 4 1000 1100
/dev/loop1 7 2048000 2252800 4 2000 2200
Размер указывается не в КБ, это число блоков. Но при создании файла с помощью команды dd мы указывали размер блока bs=1024, поэтому в данном случае размер 1 блока = 1 КБ.
Параметры blocks и inodes изменять бессмысленно, они ставятся автоматически.
Параметр «grace period» позволяет вам установить время, прежде чем значение soft limit будет приведено в жизнь на файловой системе с включенными квотами:
sudo edquota -t
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/loop0 7days 7days
Проверяем установленные квоты:
sudo repquota /home/doc
sudo repquota /home/other
Теперь размеры расшаренных дирректорий у нас жестко ограничены.
После этого я задался вопросом: как менять размер? Перекидывать все файлы из папки в другое место, удалять файл, созданный с помощью dd, создавать заново с нужным размером, и перемещать на него сохраненные файлы не есть гуд. Далее рассмотрим сочиненный мною скрипт, при запуске которого только выбираем папку, размер которой надо изменить и указываем новый размер. Изменения размера проводятся без перемещения файлов, имеющихся в этой папке, поэтому не стоит делать размер меньше чем занято места на нем (информация о том сколько занято выводится при запуске скрипта). Скрипт конечно же запускаем из под рута (sudo ./quota.sh). Скрипт создавался для контроллера домена, статья по настройке PDC : http://linux-bash.ru/mseti/48-pdc.html .
sudo touch quota.sh
sudo chmod +x quota.sh
Открываем для редактирования:
sudo nano quota.sh
#!/bin/bash
echo «—————————» # указываем имена папок
echo «o_it: 1» # список выводится при запуске скрипта
echo «o_prodag: 2»
echo «o_buh: 3»
echo «o_logist: 4»
echo «o_administraciya: 5»
echo «share : 6»
echo -e «Введите № раздела: \c «
read fs
# Исходя из выбора пользователя скрипт определяет какой раздел нужно менять
case $fs in
1) fs=o_it;;
2) fs=o_prodag;;
3) fs=o_buh;;
4) fs=o_logist;;
5) fs=o_administraciya;;
6) fs=share;;
esac
echo «Выполняется проверка раздела. «
# Получаем информацию о размере папки, и сколько занято.
tune2fs -l /home/fs/$fs.fs | grep «Block count»
tune2fs -l /home/fs/$fs.fs | grep «Block size»
tune2fs -l /home/fs/$fs.fs | grep «Free blocks»
bsize=`tune2fs -l /home/fs/$fs.fs | grep «Block size» | cut -d ‘:’ -f2`
# размер блока файловой системы
bcount=`tune2fs -l /home/fs/$fs.fs | grep «Block count» | cut -d ‘:’ -f2`
# число блоков
fcount=`tune2fs -l /home/fs/$fs.fs | grep «Free blocks» | cut -d ‘:’ -f2`
# число свободных блоков
size=`expr $bcount \* $bsize`
x=$size
busy=`expr $fcount \* $bsize`
busy=`expr $size — $busy`
echo «Занято на диске:»
busy=`expr $busy / 1048576`
# занято на диске в мегабайтах
echo «$busy MB»
echo «Общий размер диска:»
size=`expr $size / 1048576`
# общий размер диска в мегабайтах
echo «$size MB»
echo -e «Введите размер раздела(MB):\c «
read size
size=`expr $size \* 1048576`
# переводим размер в байты
sizefs=`expr $size / $bsize`
# получаем количество блоков для изменения файловой системы
ddcount=`expr $size / 1024`
# получаем кол-во блоков для изменения размера файловой системы
if [ $x -lt $size ]; # если нужно увеличить размер
then
echo «Размонтируется раздел. «
umount /home/$fs
echo «Увеличение раздела. «
dd if=/dev/zero of=/home/fs/$fs.fs bs=1024 count=$ddcount conv=notrunc oflag=append
# изменяем размер файла. Файл будет иметь ddcount блоков по 1024 байта каждый
echo «Проверка раздела. «
e2fsck -f /home/fs/$fs.fs
echo «Изменение файловой системы под новый размер. «
resize2fs /home/fs/$fs.fs $sizefs
# изменяем размер файловой системы, будет sizefs блоков по bsize байт каждый
echo «Монтирование раздела. «
mount -t ext3 -o loop /home/fs/$fs.fs /home/$fs
else # если нужно уменьшить раздел
echo «Размонтируется раздел. «
umount /home/$fs
echo «Проверка раздела. «
e2fsck -f /home/fs/$fs.fs
echo «Изменение файловой системы под новый размер. «
resize2fs /home/fs/$fs.fs $sizefs
# изменяем размер файловой системы, будет sizefs блоков по bsize байт каждый
echo «Уменьшение раздела. «
dd if=/dev/zero of=/home/fs/$fs.fs bs=1024 count=$ddcount conv=notrunc oflag=append
# изменяем размер файла. Файл будет иметь ddcount блоков по 1024 байта каждый
echo «Монтирование раздела. «
Источник