Les notes de Joey : installer des quotas de disque

Gazette Linux n°149 — Avril 2008

Deny

Adaptation française  

Joëlle Cornavin

Relecture de la version française  

Article paru dans le n°149 de la Gazette Linux d'avril 2008.

Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Installer des quotas de disque pour des utilisateurs et des groupes est très important — éminemment nécessaire, en fait, si vous ne voulez pas être à court d'espace sur le serveur que vous administrez. Ils sont généralement utilisés pour les machines exécutées en tant que serveurs web dotés d'un accès FTP, pour empêcher un quelconque client d'effectuer des dépôts sur le serveur (ou « téléverser » (upload)) au-delà de la quantité d'espace qu'ils ont achetée dans leur contrat. On peut également employer des quotas de disque sur des serveurs Samba pour les dossiers personnels des utilisateurs et les systèmes de fichiers NFS. Votre serveur Linux peut facilement être configuré pour maintenir vos utilisateurs dans les limites indiquées et pour les empêcher de remplir la partition. Certaines personnes surferont sur Internet et téléchargeront négligemment des vidéos et des MP3 pendant leur pause déjeuner, faisant manquer les autres utilisateurs d'espace pour leurs fichiers de travail. Pour empêcher ce genre d'activité, nous allons installer des quotas d'utilisateur et de groupe pour fixer des limites aux utilisateurs.

Les quotas sont définis partition par partition, ainsi, si on les installe sur un serveur web (ou un serveur NFS ou Samba), il faut savoir si l'espace qui nous intéresse se trouve dans sa propre partition. Dans ce tutoriel, on étudiera une installation standard avec des utilisateurs multiples.

La première étape consiste à déterminer si notre partition home est dans une partition séparée — pour la plupart des serveurs de production, elle est dans sa propre partition (une partition dédiée). Ainsi, observons à quoi ressemble notre partitionnement :

[root@station17 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             2.9G  205M  2.6G   8% /
/dev/sda1             289M   17M  258M   6% /boot
none                 1013M     0 1013M   0% /dev/shm
/dev/sda5             2.0G   36M  1.9G   2% /tmp
/dev/sda2             9.7G  6.2G  3.1G  67% /usr
/dev/sda7             2.0G  239M  1.6G  13% /var
/dev/sda8             9.2G   54M  8.7G   1% /home
[root@station17 ~]#

Comme le montre l'exemple ci-dessus, home est dans une partition dédiée. Il s'agit à présent de placer les options de montage (mount) dans la table du système de fichiers, /etc/fstab, donc à chaque fois que le système est redémarré, les quotas sont toujours actifs :

[root@station17 ~]#  vi /etc/fstab

 # This file is edited by fstab-sync - see 'man fstab-sync' for details
LABEL=/1                 /          ext3     defaults                        1 1
LABEL=/boot              /boot      ext3     defaults                        1 2
none                     /dev/pts   devpts   gid=5,mode=620                  0 0
none                     /dev/shm   tmpfs    defaults                        0 0
LABEL=/home              /home      ext3     defaults,usrquota,grpquota      1 2
none                     /proc      proc     defaults                        0 0
none                     /sys       sysfs    defaults                        0 0
LABEL=/tmp               /tmp       ext3     defaults                        1 2
LABEL=/usr               /usr       ext3     defaults                        1 2
LABEL=/var               /var       ext3     defaults                        1 2
LABEL=SWAP-sda6          swap       swap     defaults                        0 0
/dev/scd0    /media/cdrecorder      auto     pamconsole,exec,noauto,managed  0 0

[root@station17 ~]#

Dans l'exemple ci-dessus, on peut voir à quel endroit j'ai ajouté usrquota et grpquota sur la ligne des options de montage, dans fstab. À présent, pour permettre l'utilisation de ces options supplémentaires, il faut remonter home avec ces nouvelles options activées.

[root@station17 ~]# mount -v -o remount /home
/dev/sda8 on /home type ext3 (rw,usrquota,grpquota)
[root@station17 ~]#

Ici, on remarque que home a été remonté avec les options supplémentaires de quotas pour les utilisateurs et de quotas pour les groupes. À l'aide de la commande quotacheck, on crée le fichier initial de quota de disque. Dès que cette commande est exécutée, elle crée deux fichiers situés dans le répertoire home, nommés aquota.user et aquota.group. Ce sont des fichiers binaires qui mémorisent nos quotas. Nous souhaitons qu'ils soient exécutés avec -cug comme options en ligne de commande : c doit effectuer un nouveau balayage et l'enregistrer sur le disque, u est pour l'utilisateur et g représente le groupe. Ensuite, nous activerons les quotas avec la commande quotaon, en indiquant pour quelle partition nous souhaitons les activer :

[root@station17 ~]# quotacheck -cug /home
[root@station17 ~]# quotaon /home
[root@station17 ~]#

À ce stade, on peut modifier les quotas des utilisateurs avec la commande edquota. Cette dernière lance à cet effet l'éditeur vi, et nous voyons certaines colonnes qui nécessitent une petite explication. Les blocs représentent les limites douce et dure (soft/hard limits) de taille des quotas, alors que la colonne des inodes est réservée à une configuration de quotas fondée sur le nombre de fichiers qu'un utilisateur peut créer. La limite douce peut être dépassée pendant une période de grâce définie, mais atteindre la limite dure arrêtera définitivement un utilisateur.

Créons un utilisateur et limitons-le à un ensemble de quotas, juste pour voir comment cela fonctionne. Ajoutons une utilisatrice nommée « sally » et, puisqu'elle n'ouvrira pas de session, on ne lui attribue pas de mot de passe. Ensuite, nous utiliserons la commande edquota pour modifier ses quotas et lui allouer certaines limites d'espace sur le disque — par exemple 10 Mo de limite douce et 12 Mo de limite dure — et enregistrer nos modifications :

[root@station17 ~]# useradd sally
[root@station17 ~]# edquota sally
Disk quotas for user sally (uid 502):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda8                        24      10000      12000          6        0        0
~
~

Maintenant, Sally a une limite douce de 10 Mo et une limite dure de 12 Mo, ainsi nous voulons entrer dans ce compte et commencer à créer quelques données. Faisons-le avec la commande dd et /dev/zero pour voir comment les choses se passent. La commande dd copie des données à un niveau bas, nous l'emploierons ici pour créer un fichier rapidement :

[root@station17 ~]# su - sally
[sally@station17 ~]$ dd if=/dev/zero of=data bs=1k count=9500
9500+0 records in
9500+0 records out
9728000 bytes (9.7 MB) copied, 0.0220105 s, 442 MB/s
[sally@station17 ~]$ 
[sally@station17 ~]$ quota
Disk quotas for user sally (uid 502):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda8    9544   10000   12000               8       0       0
[sally@station17 ~]$	

Ici, Sally vérifie son quota et peut observer qu'elle a encore de la place pour travailler puisqu'il n'y a pour l'instant aucun avertissement ou quoi que ce soit d'autre. Créons donc encore des données et voyons si on obtient un avertissement :

[sally@station17 ~]$ dd if=/dev/zero of=moredata bs=1k count=500
sda8: warning, user block quota exceeded.
500+0 records in
500+0 records out
512000 bytes (512 kB) copied, 0.0034606 s, 148 MB/s
[sally@station17 ~]$

Cette fois, nous avons un avertissement. Regardons à quoi ressemblerait notre quota si nous étions l'utilisatrice Sally :

[sally@station17 ~]$ quota
Disk quotas for user sally (uid 502):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda8   10048*  10000   12000   7days       9       0       0
[sally@station17 ~]$

L'examen de notre fichier de quotas montre que nous avons une période de grâce qui entre à présent en vigueur. Sally a sept jours pour revenir à sa limite. Cependant, admettons que Sally l'ignore — elle n'y prête pas attention — et crée un autre fichier, de par exemple 3 Mo, ce qui nous amènerait au-delà de notre limite dure. Observons ce qui se produit :

[sally@station17 ~]$ dd if=/dev/zero of=file bs=1k count=3000
sda8: write failed, user block limit reached.
dd: writing `file': Disk quota exceeded
1949+0 records in
1948+0 records out
1994752 bytes (2.0 MB) copied, 0.0251631 s, 79.3 MB/s
[sally@station17 ~]$ quota
Disk quotas for user sally (uid 502):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda8   12000*  10000   12000            10       0       0
[sally@station17 ~]$

On note que Sally a écrit sur le disque et a dépassé la limite douce, puisqu'il lui est attribué une période de grâce par défaut — toutefois la limite dure a mis un terme brutal à son activité insouciante. Il est judicieux de se familiariser avec les quotas de disque, puisqu'ils sont très courants dans un environnement professionnel, et vous y serez sans aucun doute confronté.

Si l'on a, par exemple, 15 utilisateurs dans un service qui travailleront tous sur le même projet, un quota de groupe sera en vigueur. Mais qu'en est-il si nous avons simplement 15 utilisateurs présents dans le même service, mais travaillant séparément sur des dossiers différents et qui sont tous censés avoir le même quota ? Nous pourrions faire appel à la commande edquota -up pour copier les quotas de Sally pour les autres utilisateurs, puis la commande repquota pour voir les statistiques des quotas imposés de nos utilisateurs. Ajoutons quelques utilisateurs supplémentaires et faisons l'essai. Une fois encore, nous ne leur attribuerons pas de mot de passe car il s'agit juste d'une démonstration :

[sally@station17 ~]$ su -
Password:
[root@station17 ~]# useradd tom 
[root@station17 ~]# useradd dick
[root@station17 ~]# useradd harry

Maintenant que nous avons ajouté quelques utilisateurs, on peut copier le quota de Sally pour les autres utilisateurs du système :

[root@station17 ~]# edquota -up sally tom harry

Ici, on peut vérifier que les quotas des utilisateurs ont été reportés pour les utilisateurs que nous avons choisis sur le système :

[root@station17 ~]# repquota -u /home
*** Report for user quotas on device /dev/sda8
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   69832        0       0            4     0     0
sally     +-   11996    10000   12000  5days    10     0     0
tom       --      48    10000   12000           12     0     0
dick      --      24        0       0            6     0     0
harry     --      24    10000   12000            6     0     0

Ici, on peut vérifier que les limites imposées à Sally ont été copiées pour les autres utilisateurs et voir les statistiques actuelles de nos utilisateurs : espace utilisé (blocs), limites douce et dure, même les fichiers utilisés (inodes) et les périodes de grâce.

En outre, les utilisateurs qui dépassent leurs quotas ne seront en général plus en mesure d'exécuter le système X Window et, s'ils démarrent X, ils auront probablement d'autres problèmes, comme lancer des navigateurs ou autres. En copiant les quotas d'utilisateur, rappelez-vous que si vous copiez les quotas d'un utilisateur pour un autre utilisateur qui a été présent un moment sur le système, les limites peuvent être dépassées immédiatement, il est donc important d'en être conscient. Vous devrez toujours vérifier l'utilisation du disque d'un utilisateur, s'il s'agit d'un utilisateur existant. Un autre point à savoir — si le système de fichiers comporte déjà des quotas, veillez à les désactiver avant d'exécuter un quotacheck, parce qu'il risque de causer des dommages.

Les commandes :

quotacheck : balaie un système de fichiers pour vérifier l'utilisation d'un disque, crée, vérifie et répare les fichiers de quotas
quotaon : active les quotas pour le système de fichiers
quotaoff : désactive les quotas pour le système de fichiers
edquota : modifie les quotas d'utilisateur
repquota : affiche un rapport de statistiques de quotas des utilisateurs
quota : commande pour examiner le quota et les statistiques d'utilisation du disque

Joey est né à Phoenix et a commencé à programmer à l'âge de quatorze ans sur un Timex Sinclair 1000©. Il espérait pouvoir tirer quelque chose de ce modèle d'ordinateur ancien. Maîtrisant rapidement le BASIC et l'Assembleur, Joey est devenu programmeur en 1990 et a ajouté le COBOL, le Fortran et le Pascal à son répertoire de langages de programmation. Depuis lors, il se passionne pour presque tous les aspects de l'informatique. Il s'est perfectionné et a découvert RedHat Linux© en 2002, quand on lui a donné une version 6 de RedHat©. Ce fut le début d'une nouvelle passion centrée sur Linux. Actuellement, Joey termine sa formation en gestion de réseau sous Linux et travaille sur le campus pour la RedHat Academy de l'université, en Arizona. Il fait aussi partie de l'équipe de la Linux Gazette comme coordinateur de miroirs.

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://wiki.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.