Sous LInux, il est possible de mettre en place des quotas. C'est un mécanisme qui permet de limiter l'utilisation des ressources système, notamment l'espace disque, pour des utilisateurs ou des groupes.
On pourra les mettre en place dans des environnements multi-utilisateurs, où on voudra par exemple que les ressources soient utilisées de manière équitable et efficace.
Au cours de cet article, je vais exécuter les commandes dans un contexte anglais pour éviter les traductions étranges.
Avant toute chose, quelques définitions pour ceux qui ne sont pas familiers avec ce concept, peu souvent vu sous Linux.
Un
quota est une limite imposée sur la quantité de ressources qu'un utilisateur ou un groupe peut consommer, et ainsi, on pourra contrôler l'utilisation de l'espace disque. Les quotas peuvent être appliqués à des fichiers systèmes, des répertoires ou des systèmes de fichiers entiers.
Il existe principalement deux options de quotas sous Linux :
- le quota utilisateur qui limite l'espace disque utilisé par un utilisateur spécifique
- le quota groupe qui limite l'espace disque utilisé par un groupe d'utilisateurs.
Dans ces deux options de quotas, on pourra définir deux types de limites :
soft limit : c'est une limite d'avertissement. On pourra dépasser cette limite pendant une période paramétrée (grace period). Si on dépasse ce quota, on reçoit un avertissement, mais on peut continuer à écrire des données jusqu'à la hard limit ou que la période de grâce expire. (Permet une flexibilité de façon temporaire)
hard limit : c'est une limite stricte. Une fois qu'on atteint cette limite, on ne peut plus écrire de données sur le système de fichiers.
Aussi, on parela d'
inode. Il sert à stocker des informations sur un fichier ou un répertoire. Chaque fichier ou répertoire sur un système de fichiers a un inode associé, qui contient des métadonnées. Chaque inode est identifié par un numéro unique dans le système de fichiers. Ce numéro est utilisé par le système pour accéder aux métadonnées du fichier. En gros, comprenez, dans le cas des quotas : 1inode = 1 fichier ou 1 dossier.
Dans mon expérience, on utilise les quotas par utilisateur, et avec une limite hard dans la plupart des cas. L'article sera orienté sur cette thématique principalement.
Avant de configurer les quotas, on devra respecter quelques conditions :
- Avoir des droits super-utilisateurs
- Avoir un système de fichiers sur lequel on peut appliquer les quotas (xfs, ext4, etc.).
On devra créer un système de fichiers avec l'option quota, par exemple :
Si le système de fichiers est déjà existant, on le modifiera avec tune2fs (le système de fichiers doit être démonté :
Pour activer les quotas, on utilisera la commande quotaon sur le point de montage :
Pour les activer au montage de la partition, on mettra les options
usrquota et/ou
grpquota selon le besoin dans le fichier /etc/fstab :
Il est nécessaire de connaitre la taille en octets d'un bloc (pour définir les limites plus tard). On pourra obtenir l'info avec :
Ce qui renvoie :
Une fois le système de fichiers monté avec les options de quota, on devra initialiser les fichiers de quota :
-c : Crée les fichiers de quota s'ils n'existent pas.
-u : Vérifie les quotas d'utilisateur.
-g : Vérifie les quotas de groupe.
Les fichiers de aquota.user et aquota.group sont créés. Ils sont accessible en lecture/écriture par root uniquement.
Pour définir des quotas pour un utilisateur ou un groupe, on utilisera la commande
edquota.
Si je veux définir les quotas pour l'utilisateur adrien :
Si on veut fixer les quotas à un groupe :
Cela ouvrira l'étiteur de texte par défaut, et on pourra spécifier les limites de blocs et d'inodes.
Par défaut, on a ceci qui se propose (sur une RHEL9) :
La première colonne est le nom du système de fichiers pour lequel un quota est activé.
La deuxième colonne indique le nombre de blocs que l'utilisateur utilise actuellement.
Les deux colonnes suivantes servent à définir des limites de blocs soft et hard pour l'utilisateur sur le système de fichiers.
La colonne inodes indique le nombre d'inodes que l'utilisateur utilise actuellement.
Les deux dernières colonnes sont utilisées pour définir les limites d'inodes soft et hard pour l'utilisateur sur le système de fichiers.
Voici un exemple de configuration :
Si on souhaite définir un quota de 1Go, sachant que la taille du bloc par défaut en ext4 est de 4096 octets :
1Go correspond à 1024*1024*1024 octets = 1 073 741 824 octets
1 bloc étant 4096 octets 1073741824/4096 = 262 144 blocs
Ce qui donne :
On pourra vérifier les quotas paramétrés d'un utilisateur avec :
Ce qui renvoie :
Dans cet article, on va faire une démo de dépassement du quota en générant des fichiers.
Précédemment, j'ai définit 1Go de quota pour l'utilisateur adrien dans le pour le système de fichiers /mnt/data.
Je génère un fichier de 800Mo :
Puis je tente de générer à nouveau 300Mo :
Le message d'erreur apparait :
Code TEXT :sdb1: write failed, user block limit reached.
head: erreur d'écriture dans 'standard output': Débordement du quota d'espace disque
Comme vu au début de l'article, on peut définir des quotas "soft". Un avertissement des produit en cas de dépassement de la valeur, et il est possible de dépasser le quota jusqu'à la limite hard ou pendant une période donnée. Cette période de grâce est par défaut à 7 jours.
On va pouvoir définir cette période avec la commande :
Ce qui donne :
La commande edquota définit les quotas pour un utilisateur ou groupe particulier, mais le paramétrage se fait par système de fichiers. la période de grâce quant à elle, est globale.
Après avoir défini une période de grâce courte, et une limite soft de 1Go comme vu précédement, je tente d'écrire à nouveau du contenu :
Un avertissement s'affiche :
Je peux continuer à écrire :
Passé le délai, si je n'ai pas libéré de la place, je ne peux plus écrire :
Le message m'envoie balader :
Il n'y a pas de prérequis pour utiliser les quotas avec xfs.
Pour les activer au montage de la partition, on mettra les options quota et/ou gquota selon le besoin dans le fichier /etc/fstab :
Il n'est pas nécessaire d'initialiser les quotas avec XFS comme on le faisait avec ext4.
XFS utilisera des valeurs en Octets au lieu d'un nombre de blocs.
Pour les systèmes de fichiers XFS, on a un utilitaire à notre disposition :
A cet instant, on rentre dans une sorte de shell spécifique, où on pourra taper des commandes.
Pour voir l'état des quotas pour un utilisateur :
Ce qui renvoie :
Cette commande xfs_quota est utilisable en une seule ligne, avec l'option -c :
Les utilisateurs non privilégiés peuvent exécuter cette commande pour visualiser leur quota.
Pour définir des quotas, on utilisera la commande xfs_quota mais en mode expert (droits root uniquement) :
On pourra lister les quotas avec :
Ce qui donne :
La première colonne est le nom de l'utilisateur pour lequel un quota est activé.
La deuxième colonne indique la taille que l'utilisateur utilise actuellement.
Les deux colonnes suivantesindiquent les limites (en octet) soft et hard pour l'utilisateur sur le système de fichiers.
Voici un exemple de configuration :
Si on souhaite définir un quota de 1Go, on utilisera la commande :
On peut vérifier avec (-h pour avoir les valeurs lisibles de façon humaine) :
Ce qui renvoie :
Si on ne veut pas rentrer dans le mini-shell xfs_quota, on pourra utiliser l'option -c à xfs_quota :
Dans cet article, on va faire une démo de dépassement du quota en générant des fichiers.
Précédemment, j'ai définit 1Go de quota pour l'utilisateur adrien dans le pour le système de fichiers /mnt/xfs.
Je génère un fichier de 800Mo :
Puis je tente de générer à nouveau 300Mo :
Le message d'erreur apparait :
Code TEXT :head: erreur d'écriture dans 'standard output': Débordement du quota d'espace disque