Limiter les espaces par utilisateurs avec des QUOTAs

Dans notre quête à une meilleure utilisation des ressources dans l’entreprise, on en vient à partager des espaces de stockages sur des serveurs. Il faut pourtant éviter qu’un utilisateur vienne mettre en péril toute une équipe. Sous Linux ou Unix, mettre en oeuvre des quotas sur les systèmes de fichiers est une solution simple et gagnante pour maitriser ses espaces ; une sorte de thin-provisioning avant l’heure ;-). Dans cet article, vous trouverez les premières clés pour mettre en oeuvre cette solution en quelques minutes.

Etape 1. Installer les packages.

Sous Linux, la mise en oeuvre de quotas nécessite généralement l’installation de packages supplémentaires. Sous Ubuntu, on lancera par exemple:

sudo apt-get install quota

Sur Oracle ou Redhat Enterprise Linux, on lancera par exemple la commande suivante sous root:

yum install quota

Etape 2. Activer l’utilisation des quotas

Pour activer les quotas au niveau de l’utilisateur, il faut ajouter l’option usrquota à votre point de montage dans /etc/fstab pour le rendre persistent par exemple. Dans la séquence ci-dessous, je crée un système de fichier exemple pour mes tests en m’appuyant sur un fichier plutôt qu’un device pour l’exemple :

mkdir disks
cd disks
dd if=/dev/zero of=disk1 bs=1024k count=1 seek=1024
mkfs -t ext3 disk1
sudo mkdir /disk1
sudo mount -t ext3 -o loop,usrquota disk1 /disk1

La première fois que vous montez votre système de fichiers, créer le référentiel des quotas à sa base à l’aide de la commande suivantes :

sudo quotacheck -cu /disk1

Le fichier aquota.user est créé à la racine du système de fichiers; Il ne vous reste plus qu’à activer les quotas en lançant la commande quotaon comme ci-dessous :

sudo quotaon /disk1
sudo mkdir /disk1/arkzoyd
sudo chown arkzoyd /disk1/arkzoyd 

Etape 3. Définir et tester les quotas

La façon la plus simple pour définir des quotas est d’utiliser la commande setquota. La syntaxe ci-dessous spécifie un quota pour l’utilisateur arkzoyd sur le montage /disk1 sont les limites sont de

  • 1024k d’espace « soft » utilisable
  • 2048k d’espace « hard » utilisable
  • 0 (illimité) fichiers « soft » utilisables
  • 0 (illimité) fichiers « hard » utilisables
sudo setquota -u arkzoyd 1024 2048 0 0 /disk1

Vous pouvez vérifier le fonctionnement de quotas en créant un fichier de 500k, 1500k puis 2500k comme ci-dessous :

sudo repquota -as 
*** Report for user quotas on device /dev/loop1
Block grace time: 7days; Inode grace time: 7days
Space limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 16K 0K 0K 1 0 0
arkzoyd -- 0K 1024K 2048K 1 0 0


dd if=/dev/zero of=/disk1/arkzoyd/test1 bs=1k count=500
sudo repquota -as
*** Report for user quotas on device /dev/loop1
Block grace time: 7days; Inode grace time: 7days
Space limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 16K 0K 0K 1 0 0
arkzoyd -- 504K 1024K 2048K 2 0 0


rm /disk1/arkzoyd/test1
dd if=/dev/zero of=/disk1/arkzoyd/test1 bs=1k count=1500
sudo repquota -s -a
*** Report for user quotas on device /dev/loop1
Block grace time: 7days; Inode grace time: 7days
Space limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 16K 0K 0K 1 0 0
arkzoyd +- 1504K 1024K 2048K 7days 2 0 0



rm /disk1/arkzoyd/test1
dd if=/dev/zero of=/disk1/arkzoyd/test1 bs=1k count=2500
dd: writing `/disk1/arkzoyd/test1': Disk quota exceeded
2045+0 records in
2044+0 records out
2093056 bytes (2.1 MB) copied, 0.0133812 s, 156 MB/s

ls -l
-rw-r--r-- 1 arkzoyd arkzoyd 2093056 2010-12-24 12:31 test1
sudo repquota -sa
*** Report for user quotas on device /dev/loop1
Block grace time: 7days; Inode grace time: 7days
Space limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 16K 0K 0K 1 0 0
arkzoyd +- 2048K 1024K 2048K 7days 2 0 0

Vous pouvez supprimer votre configuration pour l’implémenter en vrai :

cd ~/disks
sudo umount /disk1
rm disk1
cd ..
rmdir disks

Notes:
Il y a plein d’exemples sur Internet à commencer par ce tutorial qui présente notamment comment utiliser les quotas avec des groupes ou d’autres commandes très utiles comme quota -s