Квоты проекта в ext4
Это касается установки квот проекта / квот каталогов в файловых системах ext4. Патч для разрешения квот проекта в файловых системах ext4 был представлен через патч https://lore.kernel.org/patchwork/patch/541895/.
Я попробовал следующие шаги (сопровождаемые соответствующими командами): 1. Создать файловую систему на блочном устройстве mkfs.ext4 /dev/nvme0n1
Включить квоту проекта tune2fs -O проект -Q prjquota /dev/nvme0n1
Смонтируйте блочное устройство: mount -o prjquota /dev/nvme0n1 /test
Включить квоты на пути монтирования: quotaon -Pv -F vfsv1 /test
Создайте идентификатор проекта / имя проекта для квоты проекта: echo 51:/test/first >> /etc/projects echo testproj:51 >> /etc/projid
Изменить квоту, связанную с пользователем проекта: testproj edquota -P testproj
установите блок мягких блоков на 10, жесткий блок на 20
- Соответствует установленной квоте
repquota -avugP
Отчет по квотам проекта на устройстве / dev / nvme0n1 Время отсрочки блокировки: 7 дней; Время отсрочки Inode: 7days Ограничения блока Ограничения файла
Проект использовал мягкую твердую грацию использовал мягкую твердую грацию
testproj - 0 10 20 0 0 0
- Начните писать / выполнять ввод-вывод в указанном каталоге в / test / first
Fallocate -l 10G ten.txt
- Я вижу, что в указанном месте создается файл размером 10G, и, выполнив вышеуказанную команду в #7, я не вижу изменений в потребляемых inode.
Есть ли другие шаги для включения квот в файловых системах ext4?
Версия ядра:4.15.0-36-generic
0 ответов
Я считаю, что тебе не хватает
chattr +P -p 51 /test/first
/etc/projects, похоже, используется только инструментами XFS. Также /etc/projid предназначен только для красивой печати.
fyi это процедура, которую я придумал:
(шаг 0 для создания блочного устройства:
dd if=/dev/zero of=/tmp/fs bs=1024 count=80000
losetup -f /tmp/fs
losetup -l
)
- создать файловую систему с достаточно большими inodes:
mkfs.ext4 -I 256 /dev/loop0
- включите квоты проекта и убедитесь, что файловая система смонтирована с ним по умолчанию (здесь используются расширенные параметры с
-E
, избегая опции монтирования в шаге 3, но также довольно хитро, поскольку вы не видите его в / proc / mounts как смонтированный как таковой)
tune2fs -Q prjquota /dev/loop0
tune2fs -E mount_opts=prjquota /dev/loop0
- смонтировать это
mount /dev/loop0 /mnt/loop/
квота по команде не кажется полезной, поэтому пропустите эту
установите идентификатор проекта, но в качестве чистой любезности для следующего системного администратора, входящего в ваш ящик. На самом деле не требуется
echo testproj:51 >> /etc/projid
- фактически сделайте вашу папку частью проекта (которой не было в вашем списке)
mkdir abc
chattr +P -p 51 abc
- редактировать квоту. Давайте использовать инструмент set quota, который когда-нибудь можно будет использовать позже в каком-нибудь доступном playbook, в отличие от edquota, который запускает интерактивный редактор:
setquota -P testproj 0 1234 0 0 /mnt/loop/
- Подтвердите, что квота установлена
repquota -P /mnt/loop/
# in some parsable format, assuming you wrote some simple enough strings in projid, since the xml formatter is pretty basic
repquota -P /mnt/loop/ -O xml
- убедитесь, что он работает:
как обычный пользователь:
dd if=/dev/zero of=someoutput oflag=append
loop0: write failed, project block limit reached.
dd: writing to 'someoutput': Disk quota exceeded
2471+0 records in
2470+0 records out
1264640 bytes (1.3 MB, 1.2 MiB) copied, 0.00985608 s, 128 MB/s
- убедитесь, что вы можете тривиально избежать этого, как обычный пользователь:
chattr -p 43 someoutput
dd if=/dev/zero of=someoutput oflag=append
dd: writing to 'someoutput': No space left on device
127427+0 records in
127426+0 records out
65242112 bytes (65 MB, 62 MiB) copied, 0.561987 s, 116 MB/s
здесь полностью заполняется файловая система.
РЕДАКТИРОВАТЬ: дополнительная информация об ограничениях квот проекта Re: Владелец файла квоты проекта может изменить свой идентификатор проекта?, Re: ошибки ext4 и квот проекта (/ features)