Mettre en place des quotas d'espace disque sous Debian
Lorsque vous avez plusieurs utilisateurs / groupes sur votre système et que vous ne souhaitez pas que ceux-ci utilisent tout l'espace disque, vous pouvez mettre en place des quotas....
La mise en place de quotas va permettre d'attribuer à des utilisateurs / groupes une quantité d'espace disque.
Cette quantité pourra être définie avec 3 types de critères :
- Limite soft : indique la quantité maximale qu'un utilisateur / groupe peut utiliser sur un système de fichiers.
Dès que la limite est atteinte, des messages informant que le quota attribué a été dépassé sont envoyés.
Si après le délai défini par Grace Period, le quota est toujours en dépassement, alors l'utilisateur / groupe ne pourra plus écrire sur le système de fichiers (limite hard).
- Limite hard : Indique la quantité qui ne pourra jamais être dépassée.
Si l'utilisateur / groupe tente de dépasser cette limite, des messages d'avertissement seront envoyés et ceux-ci ne pourront plus écrire sur le système de fichiers.
- Grace Period : Limite de temps avant que la limite soft ne devienne limite hard.
Les unités de temps pouvant être utilisées sont "sec(onds),min(utes), hour(s), day(s), week(s), and month(s)"
Pour configurer les quotas, nous avons besoin des paquets quota et quotatool.
apt -y install quota quotatool root@srvdebian:~# dpkg -l | grep quota | awk {'print $2" "$3'} quota 4.04-2+b1 quotatool 1:1.6.2-5
Pour le tutoriel, j'ai crée les utilisateurs actarus et alcor avec la commande adduser
root@srvdebian:~# grep -E 'actarus|alcor' /etc/passwd actarus:x:1001:1001:actarus,,,:/home/actarus:/bin/bash alcor:x:1002:1002:alcor,,,:/home/alcor:/bin/bash root@srvdebian:~# grep -E 'actarus|alcor' /etc/group actarus:x:1001: alcor:x:1002: root@srvdebian:~# ls -l /home | grep 'actarus\|alcor' drwxr-xr-x 2 actarus actarus 4096 nov. 13 22:53 actarus drwxr-xr-x 2 alcor alcor 4096 nov. 13 22:53 alcor
Je souhaite mettre mes quotas sur /home,
J'ajoute donc les options usrquota ( quotas utilisateurs ) et grpquota ( quotas groupes ) sur la ligne correspondant à ma partition /home dans le fichier /etc/fstab.
PS : un reboot du serveur devra être effectué après les modifications dans le fstab.
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=64e3aeaa-5bf3-4d59-a846-18ead4d898f5 / ext4 errors=remount-ro 0 1
# /home was on /dev/sda6 during installation
UUID=909ca00d-d1e3-4161-ac20-9907b39490ef /home ext4 defaults,usrquota,grpquota 0 2
# swap was on /dev/sda5 during installation
UUID=fd9d2287-0ae2-45ad-a357-1787b0b448dc none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
Il faut ensuite Initialiser la base des quotas avec la commande quotacheck :
quotacheck -ugm /home
-u : vérifie uniquement les quotas utilisateurs listés dans /etc/mtab.
-g : vérifie uniquement les quotas groupes listés dans /etc/mtab.
-m : ne pas essayer pas de remonter le système de fichiers en lecture seule.
On vérifie que les fichiers aquota.group et aquota.user ont bien été crées dans /home.
ls -l /home | grep aquota
On active les quotas avec la commande quotaon :
quotaon -ugv /home
-u : les quotas utilisateurs seront activés
-g : les quotas groupes seront activés
-v : mode verbeux, affiche l'état des quotas.
Enfin, on vérifie l'état des quotas avec la commande quotaon :
quotaon -pa
-p : affiche l'état des quotas
-a : indique que l'option usrquota et/ou grpquota sera activée si celle-ci est indiquée dans /etc/fstab.
PS : Le project quota est à off car il n'est supporté que par le système de fichier XFS.
root@srvdebian:~# quotacheck -ugm /home root@srvdebian:~# ls -l /home | grep aquota -rw------- 1 root root 7168 nov. 13 23:22 aquota.group -rw------- 1 root root 7168 nov. 13 23:22 aquota.user root@srvdebian:~# quotaon -ugv /home /dev/sda6 [/home] : quotas group activés /dev/sda6 [/home] : quotas user activés root@srvdebian:~# quotaon -pa group quota on /home (/dev/sda6) is on user quota on /home (/dev/sda6) is on project quota on /home (/dev/sda6) is off
Pour attribuer un quota à un utilisateur, nous allons utiliser la commande quotatool.
Je mets une limite soft de 500MB et une limite hard de 600MB à l'utilisateur actarus.
Je mets une limite soft de 1GB et une limite hard de 2GB à l'utilisateur alcor.
quotatool -u <nom_utilisateur> -bq <quota< -l <quota> /home
PS : Pour mettre un quota sur un groupe, il faudra utiliser la commande :
quotatool -g <nom_groupe> -bq <quota< -l <quota> /home
root@srvdebian:~# quotatool -u actarus -bq 500MB -l 600MB /home root@srvdebian:~# quotatool -u alcor -bq 1G -l 2G /home
Je visualise le status des quotas avec la commande repquota.
repquota -avus
-a : affiche des informations sur tous les systèmes de fichiers disposant de quotas.
-v : mode verbeux, affiche des infos supplémentaires.
-u : affiche des informations sur les quotas utilisateurs.
-s : affiche au format human readable.
PS : pour visualiser les quotas des groupes, utilisez la commande :
repquota -avgs
Vous pourrez voir les différentes informations relatives aux quotas utilisateurs.
Block limits va se référer a des blocs de données ( la valeur par défaut est 1 bloc = 1k ).
File limits va se référer au nombre de fichiers, ou inodes utilisés.
Vous pouvez voir pour actarus les 500 Mo et 600 Mo qui ont été définis.
Vous pouvez voir pour alcor les 1 Go et 2 Go qui ont été définis.
root@srvdebian:~# repquota -avus *** Rapport pour les quotas user sur le périphérique /dev/sda6 Période de sursis bloc : 7days ; période de sursis inode : 7days Space limits File limits Utilisateur utilisé souple stricte sursis utilisé souple stricte sursis ---------------------------------------------------------------------- root -- 20K 0K 0K 2 0 0 mickael -- 16K 0K 0K 4 0 0 actarus -- 16K 500M 600M 6 0 0 alcor -- 16K 1024M 2048M 4 0 0 Statistiques : Total des blocs : 7 Blocs de données : 1 Entrées : 4 Moyenne d'utilisation : 4,000000 root@srvdebian:~# repquota -avgs *** Rapport pour les quotas group sur le périphérique /dev/sda6 Période de sursis bloc : 7days ; période de sursis inode : 7days Space limits File limits Groupe utilisé souple stricte sursis utilisé souple stricte sursis ---------------------------------------------------------------------- root -- 20K 0K 0K 2 0 0 mickael -- 16K 0K 0K 4 0 0 actarus -- 16K 0K 0K 6 0 0 alcor -- 16K 0K 0K 4 0 0 Statistiques : Total des blocs : 7 Blocs de données : 1 Entrées : 4 Moyenne d'utilisation : 4,000000
Si vous souhaitez modifier le délai de grâce pour tous les utilisateurs, utilisez la commande edquota :
edquota -t
Mettez ensuite les secondes, minutes, heures ou jours que vous souhaitez.
Sursis avant l'application des limites souples pour users : Unités de temps peuvent être : days (jours), hours (heures), minutes, ou seconds Système de fichiers période de sursis bloc période de sursis inode /dev/sda6 7days 7days
Pour modifier le délai de grâce pour tous les groupes, utilisez la commande edquota :
edquota -gt
Sursis avant l'application des limites souples pour groups : Unités de temps peuvent être : days (jours), hours (heures), minutes, ou seconds Système de fichiers période de sursis bloc période de sursis inode /dev/sda6 7days 7days
Avec l'utilisateur actarus, je vais créer des données dans mon répertoire personnel avec la commande dd .
Vous pouvez voir que l'avertissement sda6: warning, user block quota exceeded s'affiche.
Cet avertissement indique que la limite souple a été dépassée.
En visualisant le status des quotas, vous pouvez voir que le signe + est apparu indiquant que la limite souple a été dépassée et 7 days indique le nombre de jours que nous avons pour revenir en dessous de la limite souple.
actarus@srvdebian:~$ dd if=/dev/zero of=fichier1 bs=1M count=500 sda6: warning, user block quota exceeded. 500+0 enregistrements lus 500+0 enregistrements écrits 524288000 octets (524 MB, 500 MiB) copiés, 0,618201 s, 848 MB/s actarus@srvdebian:~$ sudo repquota -auvs *** Rapport pour les quotas user sur le périphérique /dev/sda6 Période de sursis bloc : 7days ; période de sursis inode : 7days Space limits File limits Utilisateur utilisé souple stricte sursis utilisé souple stricte sursis ---------------------------------------------------------------------- root -- 20K 0K 0K 2 0 0 mickael -- 16K 0K 0K 4 0 0 actarus +- 501M 500M 600M 7days 7 0 0 alcor -- 16K 1024M 2048M 4 0 0 Statistiques : Total des blocs : 7 Blocs de données : 1 Entrées : 4 Moyenne d'utilisation : 4,000000
Je ne prends pas en compte l'avertissement, et je crée un nouveau fichier.
Vous pouvez voir que le message sda6: write failed, user block limit reached s'affiche.
Cet avertissement indique que la limite dure a été dépassée et qu'il n'est plus possible d'écrire pour actarus.
actarus@srvdebian:~$ dd if=/dev/zero of=fichier2 bs=1M count=500 sda6: write failed, user block limit reached. dd: erreur d'écriture dans 'fichier2': Débordement du quota d'espace disque 100+0 enregistrements lus 99+0 enregistrements écrits 104837120 octets (105 MB, 100 MiB) copiés, 0,0976644 s, 1,1 GB/s actarus@srvdebian:~$ sudo repquota -auvs *** Rapport pour les quotas user sur le périphérique /dev/sda6 Période de sursis bloc : 7days ; période de sursis inode : 7days Space limits File limits Utilisateur utilisé souple stricte sursis utilisé souple stricte sursis ---------------------------------------------------------------------- root -- 20K 0K 0K 2 0 0 mickael -- 16K 0K 0K 4 0 0 actarus +- 525M 500M 600M 7days 8 0 0 alcor -- 16K 1024M 2048M 4 0 0 Statistiques : Total des blocs : 7 Blocs de données : 1 Entrées : 4 Moyenne d'utilisation : 4,000000
Avec mon utilisateur alcor, je vais crée un fichier le 05 novembre.
Vous pouvez voir que l'avertissement sda6: warning, user block quota exceeded s'affiche.
Cet avertissement indique que la limite souple a été dépassée.
En visualisant le status des quotas, vous pouvez voir que le signe + est apparu indiquant que la limite souple a été dépassée et 7 days indique le nombre de jours que nous avons pour revenir en dessous de la limite souple.
alcor@srvdebian:~$ date mardi 5 novembre 2019, 12:14:44 (UTC+0100) alcor@srvdebian:~$ dd if=/dev/zero of=fichier1 bs=1M count=1500 sda6: warning, user block quota exceeded. 1500+0 enregistrements lus 1500+0 enregistrements écrits 1572864000 octets (1,6 GB, 1,5 GiB) copiés, 1,97479 s, 796 MB/s alcor@srvdebian:~$ sudo repquota -auvs *** Rapport pour les quotas user sur le périphérique /dev/sda6 Période de sursis bloc : 7days ; période de sursis inode : 7days Space limits File limits Utilisateur utilisé souple stricte sursis utilisé souple stricte sursis ---------------------------------------------------------------------- root -- 20K 0K 0K 2 0 0 mickael -- 16K 0K 0K 4 0 0 actarus -- 20K 500M 600M 6 0 0 alcor +- 1501M 1024M 2048M 7days 6 0 0 Statistiques : Total des blocs : 7 Blocs de données : 1 Entrées : 4 Moyenne d'utilisation : 4,000000
Je laisse s'écouler le délai de grâce de 7 jours et le 14 novembre, je veux créer un nouveau fichier.
Vous pouvez voir que l'avertissement sda6: write failed, user block quota exceeded too long s'affiche.
Le total de l'espace occupé reste inférieur à la limite dure, mais je ne peux plus écrire.
alcor@srvdebian:~$ date jeudi 14 novembre 2019, 21:25:41 (UTC+0100) alcor@srvdebian:~$ dd if=/dev/zero of=fichier2 bs=1M count=1500 sda6: write failed, user block quota exceeded too long. dd: erreur d'écriture dans 'fichier2': Débordement du quota d'espace disque 1+0 enregistrements lus 0+0 enregistrements écrits 0 octet copié, 0,0064084 s, 0,0 kB/s alcor@srvdebian:~$ sudo repquota -auvs *** Rapport pour les quotas user sur le périphérique /dev/sda6 Période de sursis bloc : 7days ; période de sursis inode : 7days Space limits File limits Utilisateur utilisé souple stricte sursis utilisé souple stricte sursis ---------------------------------------------------------------------- root -- 20K 0K 0K 2 0 0 mickael -- 16K 0K 0K 4 0 0 actarus -- 20K 500M 600M 6 0 0 alcor +- 1501M 1024M 2048M aucun 7 0 0 Statistiques : Total des blocs : 7 Blocs de données : 1 Entrées : 4 Moyenne d'utilisation : 4,000000
Ceci n'est qu'une configuration simple et maintenant vous en savez un peu plus sur la mise en place des quotas...
N'hésitez pas à me faire part de vos remarques / commentaires.