Léa-Linux & amis :   LinuxFR   GCU-Squad   Zarb.Org   GNU
Admin-admin fs-quotas


Gestion des quotas

Par Anne

Ou comment éviter de saturer l'espace de vos systèmes de fichiers.


Introduction

Petits rappels sur les systèmes de fichiers

Avant de rentrer dans le vif du sujet, il m'apparaît essentiel de faire quelques rappels sur les systèmes de fichiers, auxquels je me référerai dans la suite de l'article.

Système de fichiers : organisation logique des données dans un disque ou une partition. C'est l'existence du système de fichiers qui vous permet de ranger vos fichiers dans des répertoires et sous-répertoires.

Formatage : c'est l'opération qui consiste à créer un nouveau système de fichiers dans un disque ou une partition. Sous Linux, on utilise la commande générique mkfs, par exemple.

Racine d'un système de fichiers : la racine correspond au répertoire d'attache du système de fichiers. Par exemple, /home est la racine du système de fichiers contenant les homes directories des utilisateurs. À quoi reconnait-on qu'il s'agit de la racine ? À la présence du répertoire lost+found. Il est créé lors de l'opération de formatage et est utilisé lors des réparations éventuelles du système de fichiers.

Bloc : c'est l'unité d'espace du système de fichiers. Il peut varier d'un système à l'autre. Pour connaître la taille en octets du bloc :

root@pingu# dumpe2fs /dev/hdc11 | grep -i 'block size'
dumpe2fs 1.27 (8-Mar-2002)
Block size:               40

dumpe2fs est la commande qui permet d'afficher les informations relatives à un système de fichiers (attention, la quantité d'infos peut être énorme ! :p) et /dev/hdc11 désigne le fichier spécial de la partition contenant le système de fichiers.

Inode : chaque fichier dispose de ce qu'on appelle une inode. Il s'agit de la carte d'identité du fichier. Elle contient notamment sa taille, sa date de dernière modification, les emplacements du disque dur sur lesquels sont situés les données... et un numéro. Et oui nos fichiers ne sont en fait que des numéros :). Chaque fichier a donc un numéro unique dans chaque système de fichiers. C'est ce numéro qui est utilisé par le système lors d'opération sur les fichiers. Le nom que vous attribuez à un fichier n'est utilisé que par vous :). Pour obtenir ces numéros : ls -i

Qu'est-ce qu'un quota

L'attribution de quotas dans un système de fichiers est un outil qui permet de maîtriser l'utilisation de l'espace disque. Les quotas consistent à fixer une limite d'espace pour un utilisateur ou un groupe d'utilisateurs.

Pour la création de ces quotas, on définit 2 types de limites :

  • La limite douce (ou soft limit) : indique la quantité maximale d'espace qu'un utilisateur peut occuper sur le système de fichiers. Si cette limite est atteinte, l'utilisateur reçoit des messages d'avertissement quant au dépassement du quota qui lui a été attribué. Si son utilisation est combinée avec les délais (ou grace period), lorsque l'utilisateur continue à dépasser la soft limite après que se soit écoulé le délai de grâce, alors il se retrouve dans le même cas que dans l'atteinte d'une limite dure.
  • La limite dure (ou hard limit) définie une limite absolue pour l'utilisation de l'espace. L'utilisateur ne peut pas dépasser cette limite. Passée cette limite, l'écriture sur ce système de fichiers lui est interdite.

De plus ces limites sont exprimées en blocs et en inodes. On a vu que le bloc étant une unité d'espace. Les quotas exprimés en nombre de blocs représentent donc une limite d'espace à ne pas dépasser. En ce qui concerne les quotas exprimés en nombre d'inodes, ils représentent le nombre maximum de fichiers et répertoires que l'utilisateur pourra créer.

Pour mémoire, les délais (ou grace period) fixent une période de temps avant que la limite douce ne se transforme en limite dure. Elle est fixée dans les unités suivantes : second, minute, hour, day, week.

Ce qui est nécessaire pour activer les quotas

Généralement dans la plupart des distributions, les quotas sont utilisables d'office. Vous devez vérifier 2 choses pour pouvoir utiliser les quotas :

  • vous devez disposer des outils de gestion des quotas :
    root@pingu# rpm -qa | grep quota
    quota-3.06-5
  • la gestion des quotas doit être activée dans le noyau :
    root@pingu# grep -i quota /boot/config-2.4.18-14
    CONFIG_QUOTA=y

Configuration de la gestion des quotas

Configuration de /etc/fstab

Les quotas sont activés au démarrage grâce à la commande quotaon lancée par le script /etc/rc.d/rc.sysinit. Les quotas sont désactivés à l'arrêt du système par la commande quotaoff.

Pour fixer les quotas sur un système de fichiers, il faut mettre à jour le fichier /etc/fstab. On va pour cela ajouter les options de montage pour le ou les systèmes de fichiers concernés. Deux options peuvent être utilisées (et combinées bien sûr) :

  • usrquota : active les quotas utilisateurs
  • grpquota : active les quotas groupes

Exemple :
/dev/hdc1 /home ext3 defaults,usrquota 1 1
/dev/hdc2 /tmp ext3 defaults,grpquota 1 1

Création des structures nécessaires au fonctionnement des quotas

Un ou deux fichiers doivent être créés pour l'utilisation des quotas : aquota.user et aquota.group. C'est dans ces fichiers que l'on configurera les quotas attribués aux utilisateurs et/ou aux groupes. Ces fichiers doivent être créés à la racine des systèmes de fichiers qui comportent ces quotas.

Exemple :
root@pingu# touch /home/aquota.user
root@pingu# touch /tmp/aquota.group

Attention :ne pas oublier de modifier les droits sur ces fichiers ! Ils doivent comporter les droits en écriture et lecture pour root uniquement.

Exemple :
root@pingu# chmod 600 /home/aquota.user
root@pingu# chmod 600 /tmp/aquota.group

Remonter le ou les systèmes de fichiers concernés pour prendre en compte l'utilisation de quotas pour ce système de fichiers.
root@pingu# mount -o remount /home
root@pingu# mount -o remount /tmp

Après création de ces fichiers, il faut initialiser la base des quotas en exécutant la commande suivante :[#verif quotacheck -auvg]. Dans le cas contraire, la sanction est immédiate :
edquota: Quota file not found or has wrong format.
No filesystems with quota detected.

Activer les quotas :
root@pingu# quotaon -a

Attribution et vérification des quotas

Fixer des quotas

L'attribution des quotas se fait grâce à la commande edquota, utilisable quelque soit le type de quota (utilisateur ou groupe). La commande ouvre un éditeur (vi ou emacs selon le contenu de votre variable EDITOR), qui vous permet de modifier directement les fichiers aquota.user ou aquota.group.

Syntaxe : edquota [-u user] [-g group] [-t]

  • -u user définit les quotas pour un ou plusieurs utilisateurs
  • -g group définit les quotas pour un ou plusieurs groupes
  • -t définit les délais

Exemple :

root@pingu# edquota -u citrouille
Disk quotas for user anne (uid 500):
  Filesystem         blocks       soft       hard     inodes     soft     hard
  /dev/hdc1           0       9000       10000         0     90000      10000

Le fichier se compose de 6 colonnes :

  • Filesystem : système de fichiers concerné par les quotas
  • blocks : nombre de blocs occupés par l'utilisateur dans le système de fichiers. Ici aucun fichier n'a encore été créé.
  • soft : limite soft en nombre de blocs. Ici elle est fixée à 9 000 blocs soit environ 9 Mo
  • hard : limite hard en nombre de blocs (environ 10 Mo)
  • inodes : nombre d'[#rappels inodes ]occupées par l'utilisateur dans le système de fichiers
  • soft : limite soft en nombre d'inodes
  • hard : limite hard en nombre d'inodes

On procédera de la même façon pour l'attribution de quotas à un groupe. (Ne tentez pas d'éditer directement ces fichiers; ils ne sont pas en format texte.)

Fixer un délai

On a vu également qu'on pouvait moduler le délai fixé entre le moment où l'utilisateur atteint la limite soft et celui où on va lui interdire toute occupation supplémentaire dans le système de fichiers. On va donc fixer la durée de ce délai. elle sera la même quelque soit l'utilisateur et/ou le groupe.

Syntaxe : edquota -t

Exemple :

root@pingu# 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/hdc1                    7days                  7days

il suffit donc de remplacer les valeurs par vos valeurs dans l'unité qui vous convient : second, minute, hour, day, week.

Dépassement de quotas : que se passe-t-il ?

Une fois n'est pas coutume, on se place du côté utilisateur. Nous allons décrire les principaux cas de figure de dépassement de quotas et les messages envoyés à l'utilisateur.

Prenons l'exemple suivant : l'utilisateur Anne dispose de 9Mo en limite douce et 10 Mo en limite dure. Son délai de grâce est de 7 minutes. Ci-dessous le contenu du système de fichiers faisant l'objet de ces quotas :

anne@pingu$ ls -l /home/anne
total 1842
-rw-------    1 root     root         7168 fév 28 23:50 aquota.user
-rw-r--r--    1 anne     anne      1857516 mar  1 12:19 fic1
drwx------    2 root     root        12288 nov 28 12:59 lost+found

Nous sommes largement en-dessous des quotas. Nous allons maintenant copier 4 fois le fichier fic1. Les 3 premières copies se passent bien et nous avons fic2, fic3 et fic4. Ci-dessous, la dernière copie

anne@pingu$ cp fic1 fic5
ide1(22,10): warning, user block quota exceeded.

anne@pingu$ ls -l
total 9134
-rw-------    1 root     root         7168 fév 28 23:50 aquota.user
-rw-r--r--    1 anne     anne      1857516 mar  1 12:19 fic1
-rw-r--r--    1 anne     anne      1857516 mar  1 13:18 fic2
-rw-r--r--    1 anne     anne      1857516 mar  1 13:18 fic3
-rw-r--r--    1 anne     anne      1857516 mar  1 13:18 fic4
-rw-r--r--    1 anne     anne      1857516 mar  1 13:18 fic5
drwx------    2 root     root        12288 nov 28 12:59 lost+found

La limite douce est dépassée. L'utilisateur reçoit un message mais l'écriture est réalisée car nous n'avons pas dépassé la limite dure.

2 cas de figures peuvent alors se présenter si l'utilisateur ne contacte pas l'administrateur ou s'il ne libère pas de l'espace pour repasser en-dessous de la limite douce.

  • 1er cas : l'utilisateur tente d'écrire dans le système de fichiers ce qui l'amène à dépasser la limite dure.

anne@pingu$ cp fic1 fic6
ide1(22,10): write failed, user block limit reached.
cp: écriture de `fic6': Débordement du quota d'espace disque
L'opération échoue. Une partie du fichier seulement a été copiée. l'utilisateur de pourra plus écrire dans le système de fichiers.


  • 2ème cas : l'utilisateur laisse s'écouler le délai de grâce de 7 minutes fixé par l'administrateur. Il tente alors de copier le contenu du fichier /etc/passwd par exemple. Le total de l'espace occupé reste toutefois inférieur à la limite dure.

La sanction sera identique que dans le 1er cas. L'opération échoue. anne@pingu$ cp /etc/passwd .
ide1(22,10): write failed, user block quota exceeded too long.
cp: écriture de `./passwd': Débordement du quota d'espace disque
L'opération a échoué comme en témoigne le listage ci-dessous :

anne@pingu$ ls -l passwd
        -rw-r--r--    1 anne     anne            0 mar  1 14:48 passwd

De même si vous essayez d'écrire dans le fichier passwd, vous obtiendrez le message suivant dans votre éditeur au moment de l'enregistrement :
"passwd" erreur d'écriture (système de fichiers plein ?) Appuyez sur ENTRÉE ou tapez une commande pour continuer
Il vous est impossible d'écrire.

Vérification et affichage des quotas

Les commandes suivantes vont vous permettre d'une part de vérifier les quotas affectés à chaque groupe et/ou utilisateur et éventuellement de synchroniser les informations nécessaires au système pour le suivi de ces quotas.

Edition des informations relatives aux quotas

La commande repquota permet d'afficher un résumé de l'utilisation des quotas et délais de grâce.

Syntaxe : repquota [ -vug ] -a | filesystem

  • -v : mode verbeux, affiche des infos supplémentaires
  • -u : affiche des informations sur les quotas utilisateurs
  • -g : affiche des informations sur les quotas groupes
  • -a : affiche des informations sur tous les systèmes de fichiers disposant de quotas
  • filesystem : affiche des informations sur les quotas du système de fichiers spécifié

Pour l'exemple, j'ai ajouté un utilisateur Bob.

# repquota -avug
 *** Report for user quotas on device /dev/hdc10
 Block grace time: 00:07; Inode grace time: 00:07
                         Block limits                File limits
 User            used    soft    hard  grace    used  soft  hard  grace
 ----------------------------------------------------------------------
 root      --      19       0       0              2     0     0
 anne      --    7293    9000   10000              5  9000 10000
 bob       +-    9000    8000    9000  00:07       5  8000  9000
 +         --      19       0       0              2     0     0

 Statistics:
 Total blocks: 7
 Data blocks: 1
 Entries: 3
 Used average: 3,000000

On trouve ici les informations relatives au quota imposé aux utilisateurs. On trouvera autant de lignes que d'utilisateurs, groupes et systèmes de fichiers concernés.

Sont rappelés les quotas fixés en nombre de blocs et d'inodes. On trouve également le nombre de blocs et le nombre d'inodes utilisés. Quand un horodatage apparaît dans la colonne grace, comme par exemple pour Bob, cela signifie que l'utilisateur (ou le groupe) a dépassé la limite douce. Le délai de grâce est donc décompté.

Vous pouvez également utiliser la commande quota suivie du nom d'un utilisateur ou d'un groupe. Là encore vous obtiendrez toutes les informations relatives aux quotas et à l'utilisation de l'espace attribué.

Exemple : pour obtenir les informations liées aux quotas concernant Anne :

root@pingu# quota anne
Disk quotas for user anne (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
     /dev/hdc10    7293    9000   10000               5    9000   10000

Vérifications et synchronisation des fichiers de quotas

Il peut arriver que les fichiers de quotas deviennent incohérents. La gestion de ceux-ci devient alors impossible. D'autre part, lorsque vous ajoutez un nouvel utilisateur ou un nouveau groupe à l'aide de la commande edquota, il faut là encore synchroniser les fichiers pour la prise en compte de ces nouvelles informations.

Syntaxe : quotacheck [ -vug ] -a | filesystem

  • -v : mode verbeux, affiche des infos supplémentaires
  • -u : vérifie uniquement les fichiers de quotas utilisateurs
  • -g : vérifie uniquement les fichiers de quotas groupes
  • -a : vérifie les fichiers de quotas de tous les systèmes de fichiers en disposant
  • filesystem : vérifie les fichiers de quotas du système de fichiers spécifié

Exemple : vérifier tous les fichiers de quotas, quelque soit le système de fichiers concerné
root@pingu# quotaoff -a
root@pingu# quotacheck -auvg
quotacheck: Scanning /dev/hdc10 [/home/anne/quota] done
quotacheck: Checked 2 directories and 10 files

En conclusion...

Voilà pour ce tutorial concernant les quotas. Pour plus d'informations, consulter le man des commandes : repquota, quotaon, quotaoff, quotacheck, edquota.

N'hésitez pas à laisser un message pour tout ajout ou correction concernant cet article.




@ Retour à la rubrique Administration système

Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Anne le 02/03/2003.

Copyright

© 02/03/2003 Anne Nicolas

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike icon
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique 3.0 :
http://creativecommons.org/licenses/by-sa/3.0/
Affichages
Outils personnels

Serveur hébergé par ST-Hebergement et Lost-Oasis / IRC hébergé par FreeNode / NS secondaire hébergé par XName
Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons CC-BY-SA