Comment définir des quotas de système de fichiers sur Ubuntu 18.04

introduction

Les quotas servent à limiter la quantité d’espace disque qu’un utilisateur ou un groupe peut utiliser sur un système de fichiers. Sans ces limites, un utilisateur pourrait remplir le disque de la machine et causer des problèmes à d’autres utilisateurs et services.

Dans ce didacticiel, nous allons installer des outils de ligne de commande pour créer et inspecter des quotas de disque, puis définir un quota pour un exemple d’utilisateur.

Conditions préalables

Ce didacticiel suppose que vous êtes connecté à un serveur Ubuntu 18.04, avec un utilisateur non-root et sudo, comme décrit dans https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-. 18-04 [Configuration initiale du serveur avec Ubuntu 18.04].

Les techniques de ce didacticiel devraient généralement fonctionner sur des distributions Linux autres que Ubuntu, mais peuvent nécessiter une certaine adaptation.

Étape 1 - Installation des outils de quota

Pour définir et vérifier les quotas, nous devons d’abord installer les outils de ligne de commande quota en utilisant + apt +. Mettons à jour notre liste de paquets, puis installons le paquet:

sudo apt update
sudo apt install quota

Vous pouvez vérifier que les outils sont installés en exécutant la commande + quota + et en demandant ses informations de version:

quota --version
OutputQuota utilities version .
. . .

C’est bien si votre sortie affiche un numéro de version légèrement différent.

Nous nous assurerons ensuite de disposer des modules de noyau appropriés pour surveiller les quotas.

Étape 2 - Installation du module de noyau de quota

Si vous êtes sur un serveur virtuel basé sur un nuage, votre installation Ubuntu Linux par défaut risque de ne pas disposer des modules de noyau nécessaires pour prendre en charge la gestion de quotas. Pour vérifier, nous utiliserons + find + pour rechercher les modules + quota_v1 + et + quota_v2 + dans le répertoire + / lib / modules /…​+:

find /lib/modules/`uname -r` -type f -name '*quota_v*.ko*'
Output/lib/modules//kernel/fs/quota/quota_v1.ko
/lib/modules//kernel/fs/quota/quota_v2.ko

La version de votre noyau - mise en évidence dans les chemins de fichiers ci-dessus - sera probablement différente, mais tant que les deux modules sont répertoriés, vous êtes tous ensemble et pouvez ignorer le reste de cette étape.

Si vous n’obtenez aucun résultat avec la commande ci-dessus, installez le package + linux-image-extra-virtual:

sudo apt install linux-image-extra-virtual

Cela fournira les modules de noyau nécessaires à la mise en œuvre des quotas. Exécutez à nouveau la commande + find + précédente pour vérifier que l’installation a réussi.

Ensuite, nous mettrons à jour les options + mount + de notre système de fichiers pour activer les quotas sur notre système de fichiers * racine *.

Étape 3 - Mise à jour des options de montage du système de fichiers

Pour activer les quotas sur un système de fichiers particulier, nous devons le monter avec quelques options spécifiées liées aux quotas. Pour ce faire, nous mettons à jour l’entrée du système de fichiers dans le fichier de configuration + / etc / fstab +. Ouvrez ce fichier dans votre éditeur de texte préféré maintenant:

sudo nano /etc/fstab

Le contenu de ce fichier sera similaire à celui-ci:

/ etc / fstab

LABEL=UEFI      /boot/efi       vfat    defaults        0 0

Ce fichier + fstab + provient d’un serveur virtuel. Un ordinateur de bureau ou un ordinateur portable aura probablement un + fstab + légèrement différent, mais dans la plupart des cas, vous aurez un système de fichiers + / + ou * root * qui représente tout votre espace disque.

Mettez à jour la ligne pointant vers le système de fichiers racine en remplaçant l’option + defaults + par les options en surbrillance suivantes:

/ etc / fstab

LABEL=cloudimg-rootfs   /        ext4           0 0
. . .

Cette modification nous permettra d’activer les quotas utilisateur (+ usrquota +) et basés sur les groupes (+ grpquota +) sur le système de fichiers. Si vous n’avez besoin que de l’un ou de l’autre, vous pouvez laisser l’option non utilisée. Si votre ligne + fstab + avait déjà des options listées à la place de + defaults +, vous devriez ajouter les nouvelles options à la fin de ce qui existe déjà, en veillant à bien séparer toutes les options par une virgule et sans espace.

Remontez le système de fichiers pour que les nouvelles options prennent effet:

sudo mount -o remount /

Nous pouvons vérifier que les nouvelles options ont été utilisées pour monter le système de fichiers en consultant le fichier + / proc / mounts +. Ici, nous utilisons + grep + pour afficher uniquement l’entrée du système de fichiers racine de ce fichier:

cat /proc/mounts | grep ' / '
Output/dev/vda1 / ext4 rw,relatime,quota,,,data=ordered 0 0

Notez les deux options que nous avons spécifiées. Maintenant que nous avons installé nos outils et mis à jour nos options de système de fichiers, nous pouvons activer le système de quotas.

Étape 4 - Activation des quotas

Avant d’activer le système de quotas, nous devons exécuter manuellement la commande + quotacheck + une fois:

sudo quotacheck -ugm /

Cette commande crée les fichiers + / aquota.user n et` + / a quota.group`. Ces fichiers contiennent des informations sur les limites et l’utilisation du système de fichiers. Ils doivent exister avant l’activation de la surveillance des quotas. Les paramètres + quotacheck + que nous avons utilisés sont:

  • * + u +: * spécifie qu’un fichier de quota basé sur l’utilisateur doit être créé

  • * + g +: * indique qu’un fichier de quota basé sur un groupe doit être créé

  • * + m +: * désactive le remontage du système de fichiers en lecture seule lors du décompte initial des quotas. Remonter le système de fichiers en lecture seule donnera des résultats plus précis si un utilisateur enregistre activement des fichiers pendant le processus, mais n’est pas nécessaire lors de cette configuration initiale.

Si vous n’avez pas besoin d’activer les quotas basés sur les utilisateurs ou les groupes, vous pouvez laisser l’option + quotacheck + correspondante.

Nous pouvons vérifier que les fichiers appropriés ont été créés en listant le répertoire racine:

ls /
Output  bin   dev  home        initrd.img.old  lib64       media  opt   root  sbin  srv  tmp  var      vmlinuz.old
  boot  etc  initrd.img  lib             lost+found  mnt    proc  run   snap  sys  usr  vmlinuz

Si vous n’avez pas inclus les options + u + ou + g + dans la commande + quotacheck +, le fichier correspondant sera manquant. Nous sommes maintenant prêts à activer le système de quotas:

sudo quotaon -v /

Notre serveur surveille et applique actuellement les quotas, mais nous n’en avons pas encore défini! Ensuite, nous allons définir un quota de disque pour un seul utilisateur.

Étape 5 - Configuration des quotas pour un utilisateur

Il existe plusieurs façons de définir des quotas pour des utilisateurs ou des groupes. Ici, nous verrons comment définir des quotas avec les commandes + edquota + et + setquota +.

Utilisation de + edquota + pour définir un quota d’utilisateur

Nous utilisons la commande + edquota + pour ed it quota s. Modifions notre exemple de quota * sammy * user:

sudo edquota -u

L’option + -u + indique qu’il s’agit d’un quota + utilisateur + que nous allons éditer. Si vous souhaitez plutôt modifier le quota d’un groupe, utilisez l’option + -g + à sa place.

Cela ouvrira un fichier dans votre éditeur de texte par défaut, similaire à la façon dont + crontab -e + ouvre un fichier temporaire que vous pouvez éditer. Le fichier ressemblera à ceci:

Disk quotas for user sammy (uid 1000):
 Filesystem                   blocks       soft       hard     inodes     soft     hard
 /dev/vda1                        40          0          0         13        0        0

Ceci répertorie le nom d’utilisateur et + uid +, les systèmes de fichiers sur lesquels des quotas sont activés, ainsi que l’utilisation et les limites basées sur block et inode. La définition d’un quota basé sur un inode limiterait le nombre de fichiers et de répertoires qu’un utilisateur peut créer, quelle que soit la quantité d’espace disque utilisée. La plupart des gens voudront des quotas par blocs, qui limitent spécifiquement l’utilisation de l’espace disque. C’est ce que nous allons configurer.

Chaque type de quota vous permet de définir à la fois une limite logicielle et une limite stricte. Lorsqu’un utilisateur dépasse la limite souple, il dépasse le quota, mais rien ne l’empêche immédiatement de consommer plus d’espace ou d’inodes. Au lieu de cela, une marge de manœuvre est laissée: l’utilisateur a - par défaut - sept jours pour récupérer son disque sous la limite souple. À la fin de la période de grâce de sept jours, si l’utilisateur dépasse toujours la limite souple, il sera traité comme une limite stricte. Une limite dure est moins tolérante: toute création de nouveaux blocs ou inodes est immédiatement arrêtée lorsque vous atteignez la limite stricte spécifiée. Cela se comporte comme si le disque manquait complètement d’espace disque: l’écriture échouera, la création de fichiers temporaires échouera et l’utilisateur commencera à voir des avertissements et des erreurs lors de l’exécution de tâches courantes.

Mettons à jour notre utilisateur * sammy * pour avoir un quota de bloc avec une limite souple de 100 Mo et une limite stricte de 110 Mo:

Disk quotas for user sammy (uid 1000):
 Filesystem                   blocks       soft       hard     inodes     soft     hard
 /dev/vda1                        40                       13        0        0

Enregistrez et fermez le fichier. Pour vérifier le nouveau quota, nous pouvons utiliser la commande + quota +:

sudo quota -vs
OutputDisk quotas for user sammy (uid 1000):
    Filesystem   space   quota   limit   grace   files   quota   limit   grace
     /dev/vda1     40K                      13       0       0

La commande affiche notre statut de quota actuel et indique que notre quota est égal à «+ 100M » et notre limite à « 110M +». Cela correspond respectivement aux limites soft et hard.

Utilisation de + setquota + pour définir un quota d’utilisateur

Contrairement à + ​​edquota +, + setquota + mettra à jour les informations de quota de nos utilisateurs en une seule commande, sans étape d’édition interactive. Nous spécifierons le nom d’utilisateur et les limites strictes et rigoureuses pour les quotas basés sur des blocs et des inodes, et enfin le système de fichiers auquel appliquer le quota:

sudo setquota -u  200M 220M 0 0 /

La commande ci-dessus doublera les limites de quota de * sammy * en blocs à 200 et 220 mégaoctets. Les limites «+0 0 +» pour les limites logicielles et matérielles basées sur un inode indiquent qu’elles restent non définies. Cela est nécessaire même si nous ne définissons pas de quotas basés sur un inode.

Encore une fois, utilisez la commande + quota pour vérifier votre travail:

sudo quota -vs
OutputDisk quotas for user sammy (uid 1000):
    Filesystem   space   quota   limit   grace   files   quota   limit   grace
     /dev/vda1     40K    200M    220M              13       0       0

Maintenant que nous avons défini des quotas, voyons comment générer un rapport de quota.

Étape 6 - Générer des rapports de quota

Pour générer un rapport sur l’utilisation actuelle des quotas pour tous les utilisateurs d’un système de fichiers particulier, utilisez la commande + repquota +:

sudo repquota -s /
Output*** Report for user quotas on device /dev/vda1
Block grace time: 7days; Inode grace time: 7days
                       Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   1696M      0K      0K          75018     0     0
daemon    --     64K      0K      0K              4     0     0
man       --   1048K      0K      0K             81     0     0
nobody    --   7664K      0K      0K              3     0     0
syslog    --   2376K      0K      0K             12     0     0

Dans ce cas, nous générons un rapport pour le système de fichiers + / + * racine *. La commande + -s + indique + repquota + d’utiliser des nombres lisibles par l’homme lorsque cela est possible. Il existe quelques utilisateurs système répertoriés, pour lesquels aucun quota n’a probablement été défini par défaut. Notre utilisateur * sammy * est répertorié en bas, avec les quantités utilisées et les limites souples et strictes.

Notez également le délai de grâce + Block: 7days +, ainsi que la colonne + grace +. Si notre utilisateur avait dépassé la limite souple, la colonne + grace + indiquerait le temps qu’il lui restait pour revenir en dessous de la limite.

Dans la prochaine étape, nous mettrons à jour les délais de grâce pour notre système de quotas.

Étape 7 - Configuration d’un délai de grâce pour les dépassements

Nous pouvons configurer la période pendant laquelle un utilisateur est autorisé à flotter au-dessus de la limite souple. Nous utilisons la commande + setquota + pour le faire:

sudo setquota -t 864000 864000 /

La commande ci-dessus définit les délais de grâce du bloc et de l’inode à 864 000 secondes, soit 10 jours. Ce paramètre s’applique à tous les utilisateurs. Les deux valeurs doivent être fournies même si vous n’utilisez pas les deux types de quota (bloc ou bloc). inode).

Notez que les valeurs _ doivent être spécifiées en secondes.

Exécutez à nouveau + repquota + pour vérifier que les modifications ont pris effet:

sudo repquota -s /
OutputBlock grace time: ; Inode grace time:
. . .

Les modifications doivent être immédiatement reflétées dans la sortie + repquota +.

Conclusion

Dans ce didacticiel, nous avons installé les outils de ligne de commande + quota +, vérifié que notre noyau Linux peut gérer les quotas de surveillance, configuré un quota basé sur des blocs pour un utilisateur et généré un rapport sur l’utilisation des quotas de notre système de fichiers.

Annexe: Messages d’erreur courants liés aux quotas

Voici quelques erreurs courantes que vous pouvez constater lors de la configuration et de la manipulation de quotas de système de fichiers.

quotaon Outputquotaon: cannot find //aquota.group on /dev/vda1 [/]
quotaon: cannot find //aquota.user on /dev/vda1 [/]

C’est une erreur que vous pourriez voir si vous avez essayé d’activer les quotas (en utilisant + quotaon +) avant d’exécuter la commande initiale + quotacheck +. La commande + quotacheck + crée les fichiers + aquota + ou + quota + nécessaires à l’activation du système de quotas. Voir le lien: # step-4-% E2% 80% 93-enable-quotas [Step 4] pour plus d’informations.

quotaon Outputquotaon: using //aquota.group on /dev/vda1 [/]: No such process
quotaon: Quota format not supported in kernel.
quotaon: using //aquota.user on /dev/vda1 [/]: No such process
quotaon: Quota format not supported in kernel.

Cette erreur + quotaon + nous dit que notre noyau ne supporte pas les quotas, ou du moins ne supporte pas la version correcte (il existe à la fois une version + quota_v1 + et + quota_v2 +). Cela signifie que les modules du noyau dont nous avons besoin ne sont pas installés ou ne sont pas chargés correctement. Sur Ubuntu Server, la cause la plus probable de ceci est l’utilisation d’une image d’installation réduite sur un serveur virtuel en nuage.

Si c’est le cas, vous pouvez le réparer en installant le paquetage + linux-image-extra-virtuel + avec + apt +. Voir le lien: # step-2-% E2% 80% 93 -install-the-quota-kernel-module [Étape 2] pour plus de détails.

quota Outputquota: Cannot open quotafile //aquota.user: Permission denied
quota: Cannot open quotafile //aquota.user: Permission denied
quota: Cannot open quotafile //quota.user: No such file or directory

C’est l’erreur que vous verrez si vous exécutez + quota + et que votre utilisateur actuel n’a pas l’autorisation de lire les fichiers de quota pour votre système de fichiers. Vous (ou votre administrateur système) devrez ajuster les autorisations de fichier de manière appropriée ou utiliser + sudo + lors de l’exécution de commandes nécessitant un accès au fichier de quotas.

Pour en savoir plus sur les autorisations Linux, y compris la propriété des utilisateurs et des groupes, veuillez consulter An Introduction aux autorisations Linux