
Limiter l'utilisation de l'espace de stockage avec les quotas
Vous devez activer les quotas de disque sur votre système avant de pouvoir les attribuer. Vous pouvez attribuer des quotas de disque par utilisateur, par groupe ou par projet. Toutefois, si une limite souple est définie, vous pouvez dépasser ces quotas pendant une période configurable, appelée période de grâce.
lsblk | grep sdb
sdb 8:16 0 4G 0 disk
└─sdb1 8:17 0 2G 0 part /mnt/datalab1
mount | grep sdb
/dev/sdb1 on /mnt/datalab1 type ext4 (rw,relatime,seclabel)
Le paquet quota sera installé ou non en fonction des options d'installation du système d'exploitation
rpm -qa | grep quota
Si besoin
dnf install quotaumount /mnt/datalab1Modifier le système de fichier
tune2fs -O quota /dev/sdb1
tune2fs -Q usrquota,grpquota /dev/sdb1
Modifier le montage de /dev/sdb1
vim /etc/fstab
/dev/sdb1 /mnt/datalab1 ext4 defaults,usrquota,grpquota 0 0
Remonter la partition
systemctl daemon-reload
mount -av
Si le message You just mounted a file system that supports labels which does not contain labels, onto an SELinux box... apparaît:
restorecon -Rv /mnt/datalab1/
Définir le groupe grpquotas comme propriétaire du dossier avec un SGID
chgrp grpquotas /mnt/datalab1
chmod 2775 /mnt/datalab1
Initialiser les quotas
Pour un système de fichier ext4
quotaon /mnt/datalab1/
Vérification
quotaon -p /mnt/datalab1/
group quota on /mnt/datalab1 (/dev/sdb1) is on
user quota on /mnt/datalab1 (/dev/sdb1) is on
project quota on /mnt/datalab1 (/dev/sdb1) is off
Création de la partition
umount /mnt/datalab1
fdisk /dev/sdb
n → 2 → enter → enter → t → 20 → w
mkfs.xfs /dev/sdb2
Montage de la partition
mkdir /mnt/datalab2
vim /etc/fstab
/dev/sdb2 /mnt/datalab2 xfs defaults,usrquota,grpquota,prjquota 0 0
mount -av
restorecon /mnt/datalab2
setfacl -m u:labuser3:rwx /mnt/datalab2
Vérification
xfs_quota -x -c "report -h" /mnt/datalab2
User quota on /mnt/datalab2 (/dev/sdb2)
Blocks
User ID Used Soft Hard Warn/Grace
---------- ---------------------------------
root 0 0 0 00 [------]
Group quota on /mnt/datalab2 (/dev/sdb2)
Blocks
Group ID Used Soft Hard Warn/Grace
---------- ---------------------------------
root 0 0 0 00 [------]
Project quota on /mnt/datalab2 (/dev/sdb2)
Blocks
Project ID Used Soft Hard Warn/Grace
---------- ---------------------------------
#0 0 0 0 00 [------]
edquota -g grpquotas
Quotas disque pour group grpquotas (gid 1012) :
Système de fichiers blocs souple stricte inodes souple stricte
/dev/sdb1 0 0 0 0 0 0
/dev/sdb2 0 0 0 0 0 0
Système de fichiers = nom du périphérique concerné par les quotas appliquésblocs = blocs déjà utilisés par l'utilisateur (ou le groupe)souple = limite soft en Kostricte = limite hard en Koinodes = inodes déjà utilisés par l'utilisateur (ou le groupe)souple = limite soft en inodesstricte = limite hard en inodesQuotas disque pour group grpquotas (gid 1012) :
Système de fichiers blocs souple stricte inodes souple stricte
/dev/sdb1 4 819200 1048576 1 0 0
/dev/sdb2 0 0 0 0 0 0
repquota -g /mnt/datalab1
*** Rapport pour les quotas group sur le périphérique /dev/sdb1
Période de sursis bloc : 7days ; période de sursis inode : 7days
Block limits File limits
Groupe utilisé souple stricte sursis utilisé souple stricte sursis
----------------------------------------------------------------------
root -- 16 0 0 1 0 0
grpquotas -- 4 819200 1048576 1 0 0 su - labuser1
dd if=/dev/urandom of=/mnt/datalab1/bigfile bs=1M count=900 status=progress
exit
repquota -g /mnt/datalab1
*** Rapport pour les quotas group sur le périphérique /dev/sdb1
Période de sursis bloc : 7days ; période de sursis inode : 7days
Block limits File limits
Groupe utilisé souple stricte sursis utilisé souple stricte sursis
----------------------------------------------------------------------
root -- 16 0 0 1 0 0
grpquotas +- 921608 819200 1048576 7days 2 0 0
La limite soft est dépassée pour le groupe grpquotas
su - labuser2
dd if=/dev/urandom of=/mnt/datalab1/bigfile2 bs=1M count=200 status=progress
1M count=200 status=progress
dd: erreur d'écriture dans '/mnt/datalab1/bigfile2': Débordement du quota d'espace disque
124+0 enregistrements lus
123+0 enregistrements écrits
130015232 octets (130 MB, 124 MiB) copiés, 0,313079 s, 415 MB/s
Le groupe grpquotas a atteint la limite hard et un message d'erreur est renvoyé
Lancer l'utilitaire _xfsquota avec l'option -x pour l'utilisation du mode expert
xfs_quota -x /mnt/datalab2
Ou
xfs_quota -x /dev/sdb2
_On bascule dans le prompt xfs_quota xfs_quota>_
Activer l'application des quotas sur le système de fichier courant
enable
Afficher les informations de quotas d'un système de fichier
report
User quota on /mnt/datalab2 (/dev/sdb2)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 0 0 0 00 [--------]
Group quota on /mnt/datalab2 (/dev/sdb2)
Blocks
Group ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 0 0 0 00 [--------]
Project quota on /mnt/datalab2 (/dev/sdb2)
Blocks
Project ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
#0 0 0 0 00 [--------]
limit bsoft=100m bhard=150m labuser3
report -u
User quota on /mnt/datalab2 (/dev/sdb2)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 0 0 0 00 [--------]
labuser3 0 102400 153600 00 [--------]
Test d'utilisation de l'espace disque
su - labuser3
dd if=/dev/urandom of=/mnt/datalab2/fichier_90m bs=1M count=90
exit
xfs_quota -x -c "report -u /dev/sdb2"
User quota on /mnt/datalab2 (/dev/sdb2)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 0 0 0 00 [--------]
labuser3 92160 102400 153600 00 [--------]
su - labuser3
dd if=/dev/urandom of=/mnt/datalab2/fichier_100m bs=1M count=100
exit
dd: erreur d'écriture dans '/mnt/datalab2/fichier_100m': Débordement du quota d'espace disque
61+0 enregistrements lus
60+0 enregistrements écrits
62914560 octets (63 MB, 60 MiB) copiés, 0,132047 s, 476 MB/s
L'utilisateur a dépassé sa limite de quota et un message d'erreur lui est renvoyé
Vérification
xfs_quota -x -c "report -u /dev/sdb2"
User quota on /mnt/datalab2 (/dev/sdb2)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 0 0 0 00 [--------]
labuser3 153600 102400 153600 00 [6 days]
Mise en place du contexte
mkdir /mnt/datalab2/projetlab
groupadd projetlab
usermod -aG projetlab labuser4
usermod -aG projetlab labuser5
chown labuser4:projetlab /mnt/datalab2/projetlab/
chmod 2775 /mnt/datalab2/projetlab/
Créer le projet
echo "50:/mnt/datalab2/projetlab/" >> /etc/projects
echo "projetlab:50" >> /etc/projid
Initialiser le dossier projetlab avec quota
xfs_quota -x -c "project -s projetlab" /mnt/datalab2
Setting up project projetlab (path /mnt/datalab2/projetlab/)...
Processed 1 (/etc/projects and cmdline) paths for project projetlab with recursion depth infinite (-1).
Définir les limites d'occupation d'espace disque
xfs_quota -x -c "limit -p bsoft=1g bhard=1536m projetlab" /dev/sdb2
Définir les limites d'inodes
xfs_quota -x /dev/sdb2
limit -p isoft=50 ihard=60 projetlab
Vérification
xfs_quota -x -c "report -p -i -b -h" /dev/sdb2
Project quota on /mnt/datalab2 (/dev/sdb2)
Blocks Inodes
Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
#0 150M 0 0 00 [------] 5 0 0 00 [------]
projetlab 0 1G 1,5G 00 [------] 1 50 60 00 [------]
Test de limitations des quotas
su - labuser4
dd if=/dev/urandom of=/mnt/datalab2/projetlab/bigfile bs=1M count=800 status=progress
exit
xfs_quota -x -c "report -p -i -b -h" /dev/sdb2
Project quota on /mnt/datalab2 (/dev/sdb2)
Blocks Inodes
Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
#0 150M 0 0 00 [------] 5 0 0 00 [------]
projetlab 800M 1G 1,5G 00 [------] 2 50 60 00 [------]
su - labuser5
dd if=/dev/urandom of=/mnt/datalab2/projetlab/bigfile2 bs=1M count=800 status=progress
exit
500170752 octets (500 MB, 477 MiB) copiés, 1 s, 499 MB/s
dd: erreur d'écriture dans '/mnt/datalab2/projetlab/bigfile2': Aucun espace disponible sur le périphérique
737+0 enregistrements lus
736+0 enregistrements écrits
771751936 octets (772 MB, 736 MiB) copiés, 1,59896 s, 483 MB/s
La limite hard est dépassée pour le projet et l'utilisateur reçoit un message d'erreur
xfs_quota -x -c "report -p -i -b -h" /dev/sdb2
Project quota on /mnt/datalab2 (/dev/sdb2)
Blocks Inodes
Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
#0 150M 0 0 00 [------] 5 0 0 00 [------]
projetlab 1,5G 1G 1,5G 00 [6 days] 3 50 60 00 [------]
su - labuser4
rm -f /mnt/datalab2/projetlab/bigfile2
touch /mnt/datalab2/projetlab/fichier{1..40}
exit
su - labuser5
touch /mnt/datalab2/projetlab/fichier{41..100}
touch: impossible de faire un touch '/mnt/datalab2/projetlab/fichier59': Aucun espace disponible sur le périphérique
La limite d'inodes est dépassée, l'utilisateur reçoit un message d'erreur
xfs_quota -x -c "report -p -i -b -h" /dev/sdb2
Project quota on /mnt/datalab2 (/dev/sdb2)
Blocks Inodes
Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
#0 150M 0 0 00 [------] 5 0 0 00 [------]
projetlab 800,0M 1G 1,5G 00 [------] 60 50 60 00 [6 days]
Si un quota donné possède des limites « soft », vous pouvez modifier la période de grâce (la période pendant laquelle la limite « soft » peut être dépassée)
Cette commande fonctionne sur les quotas pour les inodes ou les blocs pour tous les utilisateurs et groupes
edquota -t
Sursis avant l'application des limites souples pour users :
Unités de temps peuvent être : days (jours), hours (heures), minutes, ou seconds
Système de fichiers période de sursis bloc période de sursis inode
/dev/sdb1 7days 7days
/dev/sdb2 7days 7days
/dev/sdb1 3days 7days
/dev/sdb2 7days 5days
Sources principales:
man quotaon
man edquota
man repquota
man xfs_quota