Les quotas des systèmes de fichiers ZFS peuvent être définis et affichés à l'aide des commandes zfs set et zfs get. Dans l'exemple suivant, un quota de 10 Go est défini sur tank/home/jeff :
# zfs set quota=10G tank/home/jeff # zfs get quota tank/home/jeff NAME PROPERTY VALUE SOURCE tank/home/jeff quota 10G local
Les quotas affectent également la sortie des commandes zfs list et df. Par exemple :
# zfs list -r tank/home NAME USED AVAIL REFER MOUNTPOINT tank/home 1.45M 66.9G 36K /tank/home tank/home/eric 547K 66.9G 547K /tank/home/eric tank/home/jeff 322K 10.0G 291K /tank/home/jeff tank/home/jeff/ws 31K 10.0G 31K /tank/home/jeff/ws tank/home/lori 547K 66.9G 547K /tank/home/lori tank/home/mark 31K 66.9G 31K /tank/home/mark # df -h /tank/home/jeff Filesystem Size Used Avail Use% Mounted on tank/home/jeff 10G 306K 10G 1% /tank/home/jeff
Toutefois, tank/home dispose de 66.9 GO d'espace disque, et tank/home/jeff et tank/home/jeff/ws disposent uniquement de 10 GO d'espace disponible, respectivement, en raison du quota défini pour tank/home/jeff.
Vous pouvez définir une propriété refquota sur un système de fichiers pour limiter l'espace disque occupé par le système de fichiers. Cette limite fixe ne comprend pas l'espace disque utilisé par les descendants. Par exemple, le quota de 10 Go de studentA n'est pas affecté par l'espace utilisé par les instantanés.
# zfs set refquota=10g students/studentA # zfs list -t all -r students NAME USED AVAIL REFER MOUNTPOINT students 150M 66.8G 32K /students students/studentA 150M 9.85G 150M /students/studentA students/studentA@yesterday 0 - 150M - # zfs snapshot students/studentA@today # zfs list -t all -r students students 150M 66.8G 32K /students students/studentA 150M 9.90G 100M /students/studentA students/studentA@yesterday 50.0M - 150M - students/studentA@today 0 - 100M -
Par souci de commodité, vous pouvez définir un autre quota pour un système de fichiers afin de vous aider à gérer l'espace disque utilisé par les instantanés. Par exemple :
# zfs set quota=20g students/studentA # zfs list -t all -r students NAME USED AVAIL REFER MOUNTPOINT students 150M 66.8G 32K /students students/studentA 150M 9.90G 100M /students/studentA students/studentA@yesterday 50.0M - 150M - students/studentA@today 0 - 100M -
Dans ce scénario, studentA peut atteindre la limite maximale de refquota (10 Go), mais studentA peut supprimer des fichiers pour libérer de l'espace même en présence d'instantanés.
Dans l'exemple précédent, le plus petit des deux quotas (10 Go par rapport à 20 Go) s'affiche dans la sortie zfs list. Pour afficher la valeur des deux quotas, utilisez la commande zfs get. Par exemple :
# zfs get refquota,quota students/studentA NAME PROPERTY VALUE SOURCE students/studentA refquota 10G local students/studentA quota 20G local
Vous pouvez définir un quota d'utilisateurs ou de groupes en utilisant respectivement les commandes zfs userquota et zfs groupquota. Par exemple :
# zfs create students/compsci # zfs set userquota@student1=10G students/compsci # zfs create students/labstaff # zfs set groupquota@labstaff=20GB students/labstaff
Affichez le quota d'utilisateurs ou de groupes actuel comme suit :
# zfs get userquota@student1 students/compsci NAME PROPERTY VALUE SOURCE students/compsci userquota@student1 10G local # zfs get groupquota@labstaff students/labstaff NAME PROPERTY VALUE SOURCE students/labstaff groupquota@labstaff 20G local
Vous pouvez afficher l'utilisation générale de l'espace disque par les utilisateurs et les groupes en interrogeant les propriétés suivantes :
# zfs userspace students/compsci TYPE NAME USED QUOTA POSIX User root 350M none POSIX User student1 426M 10G # zfs groupspace students/labstaff TYPE NAME USED QUOTA POSIX Group labstaff 250M 20G POSIX Group root 350M none
Pour identifier l'utilisation de l'espace disque d'un groupe ou d'un utilisateur, vous devez interroger les propriétés suivantes :
# zfs get userused@student1 students/compsci NAME PROPERTY VALUE SOURCE students/compsci userused@student1 550M local # zfs get groupused@labstaff students/labstaff NAME PROPERTY VALUE SOURCE students/labstaff groupused@labstaff 250 local
Les propriétés de quota d'utilisateurs et de groupes ne sont pas affichées à l'aide de la commande zfs get alldataset, qui affiche une liste de toutes les autres propriétés du système de fichiers.
Vous pouvez supprimer un quota d'utilisateurs ou de groupes comme suit :
# zfs set userquota@student1=none students/compsci # zfs set groupquota@labstaff=none students/labstaff
Les quotas d'utilisateurs et de groupes sur les systèmes de fichiers ZFS offrent les fonctionnalités suivantes :
Un quota d'utilisateurs ou de groupes défini sur un système de fichiers parent n'est pas automatiquement hérité par un système de fichiers descendant.
Cependant, le quota d'utilisateurs ou de groupes est appliqué lorsqu'un clone ou un instantané est créé à partir d'un système de fichiers lié à un quota d'utilisateurs ou de groupes. De même, un quota d'utilisateurs ou de groupes est inclus avec le système de fichiers lorsqu'un flux est créé à l'aide de la commande zfs send, même sans l'option –R.
Les utilisateurs dénués de privilèges peuvent uniquement disposer de leur propre utilisation d'espace disque. L'utilisateur root ou l'utilisateur qui s'est vu accorder le privilège userused ou groupused peut accéder aux informations de comptabilité de l'espace disque utilisateur ou groupe de tout le monde.
Les propriétés userquota et groupquota ne peuvent pas être définies sur les volumes ZFS, sur un système de fichiers antérieur à la version 4, ou sur un pool antérieur à la version 15.
L'application des quotas d'utilisateurs et de groupes peut être différée de quelques secondes. Ce délai signifie que les utilisateurs peuvent dépasser leurs quotas avant que le système ne le remarque et refuse d'autres écritures en affichant le message d'erreur EDQUOT .
Vous pouvez utiliser la commande quota héritée pour examiner les quotas d'utilisateurs dans un environnement NFS où un système de fichiers ZFS est monté, par exemple. Sans aucune option, la commande quota affiche uniquement la sortie en cas de dépassement du quota de l'utilisateur. Par exemple :
# zfs set userquota@student1=10m students/compsci # zfs userspace students/compsci TYPE NAME USED QUOTA POSIX User root 350M none POSIX User student1 550M 10M # quota student1 Block limit reached on /students/compsci
Si vous réinitialisez le quota d'utilisateurs et que la limite du quota n'est plus dépassée, vous devez utiliser la commande quota –v pour examiner le quota de l'utilisateur. Par exemple :
# zfs set userquota@student1=10GB students/compsci # zfs userspace students/compsci TYPE NAME USED QUOTA POSIX User root 350M none POSIX User student1 550M 10G # quota student1 # quota -v student1 Disk quotas for student1 (uid 102): Filesystem usage quota limit timeleft files quota limit timeleft /students/compsci 563287 10485760 10485760 - - - - -