Как ограничить размер папки linux

quota или как ограничить размер папки

Всем заранее спасибо за участие! Вопрос таков: Необходимо ограничить размер общей папки, сейчас это реализуется разбиеним на партиции, но хотелось бы решить это проще. Квота ставиться на юзеров и группы. Если юзер входит в несколько групп, сколько он запишет в папку? Как сумма всех квот на группы в которые он входит? Как разрешить такую ситуацию, может кто знает?

Re: quota или как ограничить размер папки

А поставь квоту на юзера.

Re: quota или как ограничить размер папки

Но в папку может писать много юзеров. Если даже каждому поставить квоту, то в папку они запишут суммарный объем. А надо, чтобы размер папки был ограничен.

Re: quota или как ограничить размер папки

Создается группа тех, кто пишет в эту папку и право на запись дается только этой группе. То есть просто chown root.gruppa10 papka. И квоту на группу gruppa10 и все ok, при условии что root туда не начнет писать.

Re: quota или как ограничить размер папки

А если пользователь входит в другие группы (а так всегда и есть), на которые тоже есть свои квоты, как будет считаться общий размер квоты, записываемый этим пользователем. Или, если квота считается как сумма файлов, имеющих группу, на которую она установлена, то тогда надо чтобы все файлы в этой папке создавались именно с этой группой, но это ведь не так. А интересно, как вообще квота считается?

Re: quota или как ограничить размер папки

Есть еще папки куда может писать эта GRUPPA10? Если есть — будет считаться все, тогда вопрос решается опять же созданием НОВОЙ группы, которая может писать ТОЛЬКО В ЭТУ ПАПКУ. Тогда получается — квота на группу скажем GRUPPA876 и писать она может только в одну папку — не ошибешься.

Re: quota или как ограничить размер папки

Все же не совсем понятно. Пусть я создал группу 10 и папку share.В папку share могут писать только члены группы 10. Ставлю квоту на группу. Но если хотя бы один из членов группы 10 входит в другую группу 20 (а так и есть), на которую есть своя квота, то он сможет записать в папку share файл размером = квота 10 + квота 20. Если же его не включить в группу 20, то он не сможет уже никуда записать, если закончится квота группы 10.

Re: quota или как ограничить размер папки

Нет. Группа 20 не имеет права на запись в папку share. Туда буду писаться файлы только принадлежащие группе 10 пока не исчерпают ее квоту.

Читайте также:  Топ видеоплееров для windows 10 2020

Источник

Как я могу изменить размер / ограничить папку для таких пользователей, как Рабочий стол / Загрузки в Ubuntu

Я хочу включить ограничения размера, что означает, что я хочу изменить размер нескольких папок для пользователей, таких как папки «Рабочий стол», «Загрузки» или «Музыка». Если пользователь превысил память, он не должен перезаписывать и получает предупреждение.

Как изменить размер папок через Ansible? Это для многих хостов и непосредственно в системе с правами root. Я хочу сделать это в Ubuntu 14.04 Desktop Edition.

1 ответ

На основании принятого ответа на Как установить ограничение на размер каталога в Linux? Сергея Никулова и оригинального урока, я собрал скрипт, который может создавать каталог с ограничением квот по требованию.

Сценарий работает на основе создания устройства петли с определенным размером и файловой системой и монтирования устройства петли в пользовательском каталоге.

скрипт

Также доступно на GitHub. Дальнейшее развитие будет сделано там.

использование

Там 3 обязательных флага:

  • -m для точки монтирования, то есть директории, которую вы хотите ограничить
  • -s размер, который вы хотите ограничить в байтах
  • -f файловая система. Если вы не уверены, что это должно быть, просто придерживайтесь ext4 или ext3

Вот пример того, как я использовал этот скрипт для создания ./quoted_dir ограничено 1 МБ (то есть 1024 2 в двоичном префиксе)

Я проверил сценарий с while true; do cat /etc/passwd >> ./quoted_dir/passwd; sleep 1; done тип цикла, который будет добавлять содержимое /etc/passwd к файлу внутри директории с ограничением цитаты. cat в конце концов ошибся с:

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

Дальнейшее развитие

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

Источник

LINUX — Жизнь в консоли ЕСТЬ.

Главное меню

Последние статьи

Счетчики

Ограничение размера расшаренной папки.

Я знаю два способа:

1) Использовать пакет Quota. С помощью этого пакета можно задать квоту на дисковое пространство на разделе, для пользователя и для группы пользователей. Минус: задать отдельные квоты на дирректории, расположенные на одном разделе нельзя (или я пока незнаю как).

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

Избавиться от этих минусов можно комбинируя эти два способа. Алгоритм действий такой:

1) Создаем файлы для групп

2) Форматируем их

3) Монтируем файлы в соответствующие папки

4) Включаем квоты для пользователей на созданных файлах-разделах используя Quota

Тем самым на одном разделе можно создать несколько каталогов различного фиксированного объема и на каждый каталог задать различные квоты для пользователей.

Создадим два каталога, к примеру: для документов и «помойка» для остального хлама.

sudo mkdir /home/doc

sudo mkdir /home/other

Даем права на папки(например 770 — полный доступ владельцу и группе, остальным доступа нет):

Читайте также:  Код ошибки 0 490 windows

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

Теперь размеры расшаренных дирректорий у нас жестко ограничены.

Читайте также:  Изменение grub astra linux

После этого я задался вопросом: как менять размер? Перекидывать все файлы из папки в другое место, удалять файл, созданный с помощью 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 «Монтирование раздела. «

Источник

Оцените статью