Mise en place des quotas sous Linux

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

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 soft : 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 hard : 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.

2 Prérequis

Nous devons vérifier la présence des quotas au niveau du kernel (mettez le fichier de configuration de votre kernel actuel) :

Command grep
$ grep QUOTA < /boot/config-2.6.18-6-amd64
CONFIG_QUOTA=y

3 Installation

Pour installer sur Debian les quotas :

Command apt-get
apt-get install quota

4 Configuration

4.1 /etc/fstab

Les quotas sont activés au démarrage grâce à la commande quotaon. 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 :

Configuration File /etc/fstab
/dev/hdc1 /home ext3 defaults,usrquota 1 1
/dev/hdc2 /tmp ext3 defaults,grpquota 1 1

4.2 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. Exemples :

Command touch
touch /home/aquota.user
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. Exemples :

Command chmod
chmod 600 /home/aquota.user
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 :

Command mount
mount -o remount /home
mount -o remount /tmp

Après création de ces fichiers, il faut initialiser la base des quotas en exécutant la commande suivante :

Command quotacheck
$ quotacheck -auvg
edquota: Quota file not found or has wrong format.
No filesystems with quota detected.

Voici ce qui se passe si cela ne fonctionne pas. Activer les quotas :

Command quotaon
quotaon -a

5 Attribution et vérification des quotas

5.1 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.

Command edquota
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 :

Command edquota
$ 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.)

5.2 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.

Exemple :

Command edquota
$ 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.

5.3 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 :

Command ls
$ 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 avec l'utilisateur anne :

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

$ 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.
Command
$ cp fic1 fic6
ide1(22,10): write failed, user block limit reached.
cp: écriture de `fic6': Débordement du quota d'espace disqueL'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 :

Command
$ 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 :

Command
"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.

6 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.

6.1 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.

Command repquota
$ 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 :

Command quota
$ 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

6.2 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é :

Command
$ quotaoff -a
$ quotacheck -auvg
quotacheck: Scanning /dev/hdc10 [/home/anne/quota] done
quotacheck: Checked 2 directories and 10 files

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

7 Ressources

http://www.lea-linux.org/cached/index/Admin-admin_fs-quotas.html