#language fr ~-[[fr/DebianWiki/EditorGuide#traduction|Traduction(s)]] : aucune-~ ---- || {{attachment:disk-quota.png}}|| Cet article tente de présenter les différentes manières de gérer les quotas sous Debian. Notez que la notion de quota peut s'appliquer à un grand nombre de ressources locales, pas uniquement au système de fichier et pas uniquement la taille d'un répertoire. Le but de cet article n'est pas de dire quelle est la meilleure méthode, mais de présenter ce qui existe. Le lecteur sera seul juge pour savoir ce qui correspond le mieux à son besoin.|| ## Si votre article est assez long, décommentez la table des matières <> = Système de fichier = == Limiter la taille d'un répertoire == === Présentation générale === Les outils de gestion de quota sont fonctions du système d'exploitation, du système de fichier et éventuellement du serveur de partage de fichiers utilisé. L'objectif de cette partie est d'étudier les différents choix possibles dans le contexte Debian. __Références:__ * http://www.lea-linux.org/documentations/index.php/Admin-admin_fs-quotas * http://www.commentcamarche.net/forum/affich-2437886-quota-et-samba * http://en.wikipedia.org/wiki/Comparison_of_file_systems * [[DebianMan:8/xfs_quota|project quota]] * http://fr.wikipedia.org/wiki/Access_Control_List#Sous_UNIX __Cadre:__ * Distribution: Debian Lenny * Noyau: Linux * Système de fichier Ext3, XFS * Serveur de partage de données: Samba 3 __Objectif:__ Étudier les solutions bas-niveau permettant de limiter l'espace disque alloué à certaines branches d'une arborescence de répertoire. __Présentation des méthodes existantes :__ Sous Linux, il existe trois méthodes : * L'association d'un quota à un compte utilisateur appelée ''user quota'' * L'association d'un quota à un groupe utilisateur appelée ''group quota'' * L'association d'un quota à un répertoire appelée ''project quota'' A priori, seul le système de fichier XFS supporte [[DebianMan:8/xfs_quota|project quota]]. {{{#!wiki debian ~- __Question(s):__ * Pourquoi n'utilise-t-on pas XFS plutôt que Ext3 par défaut sous Debian ? [[http://www.debian-administration.org/articles/388|1]] [[http://buffalo.nas-central.org/index.php?title=Using_XFS_instead_of_ext3_%28network_performance_boost%29|2]] * Ext4 supporte-il le project quota ? -~ }}} === user quota et group quota === ==== Présentation ==== Les droits UNIX standards n'autorisent l'affectation que d'un groupe par répertoire. Dans le cas d'une arborescence de dossiers, deux possibilités seront disponibles : '''avec ou sans ACL'''. Il faut savoir que les quotas utilisent exclusivement les droits UNIX standards et pas les ACL : * Il est donc préférable d'utiliser les ACL pour la gestion des droits d'accès réels et d'utiliser les droits UNIX standards pour la gestion des quotas * Il n'est pas possible d'avoir un répertoire appartenant à plusieurs quotas. ''(un user quota et un group quota maximum)'' {{{#!wiki debian ~- __Remarque(s):__ * A noter cependant que '''si''' les droits d'accès suivent '''scrupuleusement''' les mêmes affectations que les quotas alors, dans ce cas très particulier, on n'aura pas besoin d'utiliser les ACL et les quotas seront directement affectés aux groupes désignant les droits d'accès. * Attention, l'utilisateur "root" n'est pas toujours affecté par les quotas. Il n'est pas recommandé de tester le bon fonctionnement d'un quota avec ce compte utilisateur. * Enfin, il est important de comprendre que le quota sera réellement porté par le groupe et pas un répertoire. Si vous affectez ce groupe à trois répertoires, les trois consommeront le même quota. -~ }}} Dans la suite de cette présentation, les __droits d'accès__ aux répertoires seront supportés par des groupes affectés au niveau __ACL__. la gestion des __quotas__ sera supportée par des groupes affectés au niveau des droits __UNIX standard__. Si vous comprenez cet exemple, vous serez à même de l'appliquer pour toute autre situation. ==== Mise en place système ==== __Sous l'utilisateur root__ * Le noyau Linux doit être compilé avec les options quota. C'est le cas avec le noyau fourni par Debian : {{{ grep -i CONFIG_QUOTA= /boot/config-* /boot/config-2.6.26-2-486:CONFIG_QUOTA=y /boot/config-2.6.26-2-686:CONFIG_QUOTA=y }}} * Installation du nécessaire logiciel : {{{ aptitude update aptitude install quota quotatool acl }}} * Création d'un système de fichier Ext3 : {{{ dd if=/dev/zero of=/root/file.ext3 bs=1M count=100 mkfs.ext3 /root/file.ext3 }}} {{{#!wiki debian ~- __Question(s):__ * En plus de Ext3, quels sont les autres formats de système de fichiers supportés par cette méthode ? -~ }}} * Montage du système de fichier : {{{ mkdir /media/mount.ext3 mount -o loop,usrquota,grpquota,acl /root/file.ext3 /media/mount.ext3 }}} * Initialisation des informations de quota pour le système de fichier : {{{ quotacheck -c /media/mount.ext3 }}} * Démarrage du système de quota au niveau du système d'exploitation : {{{ /etc/init.d/quota start Checking quotas...done. Turning on quotas...done. }}} * Consultation de l'état d'activation des quotas sur les systèmes de fichier : {{{ quotaon -ugvap group quota on /media/mount.ext3 (/dev/loop0) is on user quota on /media/mount.ext3 (/dev/loop0) is on }}} * Consultation des quotas utilisateurs ''(que nous n'utiliserons pas)'': {{{ repquota -ust /media/mount.ext3 *** Rapport pour les quotas user sur le périphérique /dev/loop0 Période de sursis bloc : 7days ; période de sursis inode : 7days Limites bloc Limites fichier Utilisateur utilisé souple stricte sursis utilisé souple stricte sursis ---------------------------------------------------------------------- root -- 5663 0 0 4 0 0 }}} * Consultation des quotas des groupes ''(que nous utiliserons en association avec un répertoire)'': {{{ repquota -gst /media/mount.ext3 *** Rapport pour les quotas group sur le périphérique /dev/loop0 Période de sursis bloc : 7days ; période de sursis inode : 7days Limites bloc Limites fichier Groupe utilisé souple stricte sursis utilisé souple stricte sursis ---------------------------------------------------------------------- root -- 5663 0 0 4 0 0 }}} ==== Configuration des quotas ==== * Création du répertoire à limiter à 20 Mo : {{{ mkdir /media/mount.ext3/dir20 }}} * Création d'un groupe correspondant au répertoire ''dir20'' et qui ''portera'' cette notion de quota : {{{ addgroup quota-dir20 }}} * Affectation du groupe quota-dir20 au répertoire dir20 de manière récursive avec une héritage permanent : {{{ chown -R :quota-dir20 /media/mount.ext3/dir20 chmod -R g+s /media/mount.ext3/dir20 }}} * Contrôle de la bonne affectation du groupe sur le répertoire dir20 {{{ ls -l /media/mount.ext3 | grep dir20 drwxr-sr-x 2 root quota-dir20 1024 aoû 13 09:32 dir20 }}} * Contrôle de l'héritage des droits d'accès du groupe : {{{ touch /media/mount.ext3/dir20/file1 mkdir /media/mount.ext3/dir20/subdir touch /media/mount.ext3/dir20/subdir/file2 ls -lgR /media/mount.ext3/ /media/mount.ext3/: total 26 -rw------- 1 root 7168 aoû 13 09:37 aquota.group -rw------- 1 root 6144 aoû 13 09:26 aquota.user drwxr-sr-x 3 quota-dir20 1024 aoû 13 09:39 dir20 drwx------ 2 root 12288 aoû 13 09:22 lost+found /media/mount.ext3/dir20: total 1 -rw-r--r-- 1 quota-dir20 0 aoû 13 09:39 file1 drwxr-sr-x 2 quota-dir20 1024 aoû 13 09:39 subdir /media/mount.ext3/dir20/subdir: total 0 -rw-r--r-- 1 quota-dir20 0 aoû 13 09:39 file2 }}} * Affectation d'un quota de type hardlimit de 20Mo sur le groupe quota-dir20 {{{ quotatool -g quota-dir20 -b -l 20MB /media/mount.ext3 }}} {{{#!wiki debian ~- __Remarque(s):__ * C'est aussi faisable avec edquota -~ }}} * Contrôle du bon enregistrement du quota {{{ repquota -gst /media/mount.ext3 *** Rapport pour les quotas group sur le périphérique /dev/loop0 Période de sursis bloc : 7days ; période de sursis inode : 7days Limites bloc Limites fichier Groupe utilisé souple stricte sursis utilisé souple stricte sursis ---------------------------------------------------------------------- root -- 5663 0 0 4 0 0 quota-dir -- 2 0 20480 4 0 0 }}} ==== Test de saturation ==== * Création d'un utilisateur lambda : {{{ useradd usertest }}} * Création d'un groupe dédié aux accès à subdir {{{ groupadd access-subdir-rw }}} * Affectation au répertoire subdir des droits d'accès lecture/écriture pour le groupe access-subdir-rw : {{{ setfacl -R -m g:access-subdir-rw:rwx /media/mount.ext3/dir20/subdir }}} * Affectation de l'héritage du droits d'accès ''(option '''d''')'' : {{{ setfacl -R -m d:g:access-subdir-rw:rwx /media/mount.ext3/dir20/subdir }}} * Vérification de la bonne affectation des droits d'accès: {{{ getfacl -R /media/mount.ext3/dir20/subdir getfacl: Removing leading '/' from absolute path names # file: media/mount.ext3/dir20/subdir # owner: root # group: quota-dir20 user::rwx group::r-x group:access-subdir-rw:rwx mask::rwx other::r-x default:user::rwx default:group::r-x default:group:access-subdir-rw:rwx default:mask::rwx default:other::r-x # file: media/mount.ext3/dir20/subdir/file2 # owner: root # group: quota-dir20 user::rw- group::r-- group:access-subdir-rw:rwx mask::rwx other::r-- }}} * Rendre l'utilisateur ''usertest'' membre du groupe ''access-subdir-rw'' {{{ usermod -a -G access-subdir-rw usertest }}} * Vérification : {{{ id usertest uid=1001(usertest) gid=1004(usertest) groupes=1004(usertest),1005(access-subdir-rw) }}} * Passage sous l'identité de l'utilisateur usertest ''(on était en root jusqu'à maintenant ...)'' {{{ su - usertest }}} * Vérification de l'impossibilité d'écrire dans le répertoire dir20 : {{{ touch /media/mount.ext3/dir20/file3 touch: ne peut faire un touch sur `/media/mount.ext3/dir20/file3': Permission non accordée }}} * Vérification de la possibilité d'écrire dans le répertoire subdir : {{{ touch /media/mount.ext3/dir20/subdir/file3 }}} * Contrôle du bon héritage du quota et des droits d'accès : {{{ getfacl /media/mount.ext3/dir20/subdir/file3 getfacl: Removing leading '/' from absolute path names # file: media/mount.ext3/dir20/subdir/file3 # owner: usertest # group: quota-dir20 user::rw- group::r-x #effective:r-- group:access-subdir-rw:rwx #effective:rw- mask::rw- other::r-- }}} * Test d'écriture avec un premier fichier de 10 Mo : {{{ dd if=/dev/zero of=/media/mount.ext3/dir20/subdir/10Mo.file1 bs=1M count=10 10+0 enregistrements lus 10+0 enregistrements écrits 10485760 bytes (10 MB) copied, 0,103248 s, 102 MB/s }}} * Contrôle avec l'utilisateur root de l'état du quota quota-dir20 : {{{ exit repquota -gst /media/mount.ext3 *** Rapport pour les quotas group sur le périphérique /dev/loop0 Période de sursis bloc : 7days ; période de sursis inode : 7days Limites bloc Limites fichier Groupe utilisé souple stricte sursis utilisé souple stricte sursis ---------------------------------------------------------------------- root -- 5663 0 0 4 0 0 quota-dir -- 10287 0 20480 6 0 0 }}} * Passage sous l'identité de l'utilisateur usertest {{{ su - usertest }}} * Test de saturation du quota avec un fichier supplémentaire de 10 Mo : {{{ dd if=/dev/zero of=/media/mount.ext3/dir20/subdir/10Mo.file2 bs=1M count=10 dd: écriture de `/media/mount.ext3/dir20/subdir/10Mo.file2': Débordement du quota d'espace disque 10+0 enregistrements lus 9+0 enregistrements écrits 10391552 bytes (10 MB) copied, 0,100972 s, 103 MB/s }}} {{{#!wiki debian ~- __Remarque(s) :__ * On voit que le programme '''dd''' n'a pu écrire que 9 enregistrements de 1Mo, le dixième ayant occasionné le débordement de quota. -~ }}} * Test d'une copie : {{{ cp /media/test/dir20/subdir/10Mo.file1 /media/mount.ext3/dir20/subdir/10Mo.file3 cp: ne peut créer le fichier régulier `/media/mount.ext3/dir20/subdir/10Mo.file3': Débordement du quota d'espace disque }}} ==== Dépannage ==== Trouver ici les messages d'erreur rencontrés lors de cette expérimentation. ===== quotaon: Impossible de trouver le fichier de quotas ===== __Symptôme:__ {{{ quotaon -ugva quotaon: Impossible de trouver le fichier de quotas sur /media/test [/dev/loop0] pour activer/désactiver les quotas. quotaon: Impossible de trouver le fichier de quotas sur /media/test [/dev/loop0] pour activer/désactiver les quotas. }}} __Résolution:__ * Initialiser les fichiers d'enregistrement des quotas : {{{ quotacheck -c /media/mount.ext3 }}} === project quota === __Réf:__ * [[DebianMan:8/xfs_quota|xfs_quota]] * http://www.vanemery.com/Linux/ACL/linux-acl.html#XFS-notes ==== Présentation ==== La méthode ''project quota'' est à ma connaissance supportée que par le système de fichier XFS. L'intérêt est qu'il n'est plus obligatoire de passer par les ACL dans le cas où la délimitation des quotas ne suit pas scrupuleusement celles des droits d'accès. En effet, les droits d'accès pourront continuer d'être affectés directement au niveau des droits UNIX standards. Les quotas seront quant à eux gérés dans un '''fichier de configuration dédié'''. {{{#!wiki debian ~- __A noter que XFS supporte nativement la gestion des quotas et des ACL :__ * Il n'y a donc pas à les spécifier lors du montage du système de fichier. * Il n'y a aucune étape d'initialisation à faire comme avec les Ext3. * Il n'y a pas de groupe fictif à créer pour chaque quota et ''polluant'' la liste des groupes du système * Les informations des quotas étant enregistrés dans des fichiers dédiés et non dans /etc/group, il est plus facile de gérer des sécurisations haute disponibilté comme Hearbeat/DRDB et la sauvegarde de cette configuration. * Même l'utilisateur root est concerné par ce type quota. * Le noyau Linux est compilé par défaut pour gérer 25 ACL maximum par répertoire (cf. linux-source-2.6.26_2.6.26-26lenny2_all\data\linux-source-2.6.26\linux-source-2.6.26\fs\xfs\xfs_acl.h, #define XFS_ACL_MAX_ENTRIES 25) -~ }}} Dans le cas suivant, les droits d'accès aux répertoires seront supportés par des groupes affectés au niveau ACL. Mais comme indiqué précédemment, la gestion des droits d'accès exclusivement via les droits UNIX standards est tout à fait possible si elle vous convient. Vous n'êtes pas '''obligés''' d'utiliser les ACL. ==== Mise en place système ==== __Sous l'utilisateur root:__ * Le kernel Linux doit être compilé avec les options quota. C'est le cas avec le noyau fourni par Debian : {{{ grep -i CONFIG_XFS_QUOTA= /boot/config-* /boot/config-2.6.26-2-486:CONFIG_XFS_QUOTA=y /boot/config-2.6.26-2-686:CONFIG_XFS_QUOTA=y }}} * Installation du nécessaire logiciel: {{{ aptitude update aptitude install xfsprogs xfsdump }}} {{{#!wiki debian ~- __Question(s):__ * Je ne suis pas certain qu'xfsdump soit utile dans le cadre de cet exemple. A revérifier à l'occasion, mais il reste un outil bas niveau très recommandé lors de l'utilisation de système de fichier au format XFS. -~ }}} * Création d'un système de fichier XFS : {{{ dd if=/dev/zero of=/root/file.xfs bs=1M count=100 mkfs.xfs /root/file.xfs }}} * Montage du système de fichier : {{{ mkdir /media/mount.xfs mount -o loop,prjquota /root/file.xfs /media/mount.xfs }}} ==== Configuration des quotas ==== * Création du répertoire à limiter à 20 Mo : {{{ mkdir /media/mount.xfs/dir20 }}} * Déclaration du '''project quota''' lié au répertoire dir20. Nous donnons de manière arbitraire l'identifiant n°1 à ce projet. L'essentiel est de cet identifiant soit unique dans le fichier. {{{ echo 1:/media/mount.xfs/dir20 >> /etc/projects }}} * Affectation d'un nom arbitraire "prjdir20" à ce project quota n°1 : {{{ echo prjdir20:1 >> /etc/projid }}} {{{#!wiki debian ~- __Question(s):__ * Les noms et l'emplacement de ces deux fichiers de configuration sont-ils personnalisable ? En alternative, utiliser des liens symboliques pour stocker physiquement ces fichiers à un autre endroit de votre choix. -~ }}} * Enregistrement du project quota prjdir20 sur le système de fichier : {{{ xfs_quota -x -c 'project -s prjdir20' /media/mount.xfs Setting up project prjdir20 (path /media/mount.xfs/dir20)... Processed 1 /etc/projects paths for project prjdir20 }}} {{{#!wiki debian ~- __Remarque(s):__ * La ligne de commande peut sembler un peu barbare, mais en fait, xfs_quota utilise sa propre interface de ligne de commande. J'ai choisi ici d'utiliser l'option '''-c''' pour lui passer directement les commandes à exécuter pour une question de présentation dans cet article. Vous pouvez également lancer '''xfs_quota /media/mount.xfs''', puis une fois à l'invite de commande "xfs_quota>", saisissez la commande '''project -s prjdir20''' * [[DebianMan:8/xfs_quota|xfs_quota]] pour plus d'info. -~ }}} * Affectation d'un quota de 20 Mo {{{ xfs_quota -x -c 'limit -p bhard=20m prjdir20' /media/mount.xfs }}} * Vérification de l'enregistrement du project quota auprès du système de fichier : {{{ xfs_quota -x -c report /media/mount.xfs Project quota on /media/mount.xfs (/dev/loop1) Blocks Project ID Used Soft Hard Warn/Grace ---------- -------------------------------------------------- prjdir20 0 0 20480 00 [--------] }}} * Création d'un sous répertoire subdir : {{{ mkdir /media/mount.xfs/dir20/subdir }}} ==== Test de saturation ==== * Création d'un fichier de 5 Mo dans subdir : {{{ dd if=/dev/zero of=/media/mount.xfs/dir20/subdir/5Mo.file bs=1M count=5 5+0 enregistrements lus 5+0 enregistrements écrits 5242880 bytes (5,2 MB) copied, 0,0131463 s, 399 MB/s }}} * Vérification de l'enregistrement du project quota auprès du système de fichier : {{{ xfs_quota -x -c report /media/mount.xfs Project quota on /media/mount.xfs (/dev/loop1) Blocks Project ID Used Soft Hard Warn/Grace ---------- -------------------------------------------------- prjdir20 '''5120''' 0 20480 00 [--------] }}} * Test de saturation avec l'utilisateur root : {{{ dd if=/dev/zero of=/media/mount.xfs/dir20/subdir/20Mo.file bs=1M count=20 dd: écriture de `/media/mount.xfs/dir20/subdir/20Mo.file': Aucun espace disponible sur le périphérique 15+0 enregistrements lus 14+0 enregistrements écrits 15724544 bytes (16 MB) copied, 1,53576 s, 10,2 MB/s }}} * Suppression du test {{{ rm /media/mount.xfs/dir20/subdir/20Mo.file }}} * Création d'un utilisateur lambda : {{{ useradd usertest }}} * Création d'un groupe dédié aux accès liés à subdir {{{ groupadd access-subdir-rw }}} * Affectation au répertoire subdir des droits d'accès lecture/écriture pour le groupe access-subdir-rw : {{{ setfacl -R -m g:access-subdir-rw:rwx /media/mount.xfs/dir20/subdir }}} * Affectation de l'héritage du droits d'accès : {{{ setfacl -R -m d:g:access-subdir-rw:rwx /media/mount.xfs/dir20/subdir }}} * Vérification de la bonne affectation des droits d'accès : {{{ getfacl -R /media/mount.xfs/dir20/subdir getfacl: Removing leading '/' from absolute path names # file: media/mount.xfs/dir20/subdir # owner: root # group: root user::rwx group::r-x group:access-subdir-rw:rwx mask::rwx other::r-x default:user::rwx default:group::r-x default:group:access-subdir-rw:rwx default:mask::rwx default:other::r-x # file: media/mount.xfs/dir20/subdir/5Mo.file # owner: root # group: root user::rw- group::r-- group:access-subdir-rw:rwx mask::rwx other::r-- }}} * Rendre l'utilisateur ''usertest'' membre du groupe ''access-subdir-rw'' {{{ usermod -a -G access-subdir-rw usertest }}} * Vérification : {{{ id usertest uid=1001(usertest) gid=1004(usertest) groupes=1004(usertest),1005(access-subdir-rw) }}} * Passage sous l'identité de l'utilisateur usertest {{{ su - usertest }}} * Vérification de l'impossibilité d'écrire dans le répertoire dir20 : {{{ touch /media/mount.xfs/dir20/file3 touch: ne peut faire un touch sur `/media/mount.xfs/dir20/file3': Permission non accordée }}} * Vérification de l'impossibilité d'écrire dans le répertoire dir20 : {{{ touch /media/mount.xfs/dir20/subdir/file3 }}} * Contrôle du bon héritage du quota et des droits d'accès : {{{ getfacl /media/mount.xfs/dir20/subdir/file3 getfacl: Removing leading '/' from absolute path names # file: media/mount.xfs/dir20/subdir/file3 # owner: usertest # group: usertest user::rw- group::r-x #effective:r-- group:access-subdir-rw:rwx #effective:rw- mask::rw- other::r-- }}} * Test d'écriture avec un premier fichier de 10Mo: {{{ dd if=/dev/zero of=/media/mount.xfs/dir20/subdir/10Mo.file1 bs=1M count=10 10+0 enregistrements lus 10+0 enregistrements écrits 10485760 bytes (10 MB) copied, 0,0249121 s, 421 MB/s }}} * Contrôle avec l'utilisateur root de l'état du quota quota-dir20 : {{{ exit xfs_quota -x -c report /media/mount.xfs Project quota on /media/mount.xfs (/dev/loop1) Blocks Project ID Used Soft Hard Warn/Grace ---------- -------------------------------------------------- prjdir20 15364 0 20480 00 [--------] }}} * Passage sous l'identité de l'utilisateur usertest {{{ su - usertest }}} * Test de saturation du quota avec un fichier supplémentaire de 10 Mo : {{{ dd if=/dev/zero of=/media/mount.xfs/dir20/subdir/10Mo.file2 bs=1M count=10 dd: écriture de `/media/mount.xfs/dir20/subdir/10Mo.file2': Aucun espace disponible sur le périphérique 5+0 enregistrements lus 4+0 enregistrements écrits 5234688 bytes (5,2 MB) copied, 1,51469 s, 3,5 MB/s }}} * Test d'une copie: {{{ cp /media/mount.xfs/dir20/subdir/10Mo.file1 /media/mount.xfs/dir20/subdir/10Mo.file3 cp: ne peut créer le fichier régulier `/media/mount.xfs/dir20/subdir/10Mo.file3': Débordement du quota d'espace disque }}} ==== Quotas imbriqués ==== * Déclaration du project quota lié au répertoire subdir. Nous donnons de manière arbitraire l'identifiant n°2 à ce projet. A noter que ce nouveau project quota est imbriqué dans prjdir20. Ce qui n'est pas faisable avec la méthode ''group quota'' {{{ echo 2:/media/mount.xfs/dir20/subdir >> /etc/projects }}} * Affectation d'un nom "prjsubdir" à ce project quota n°2 : {{{ echo prjsubdir:2 >> /etc/projid }}} * Enregistrement du project quota prjdir20 sur le système de fichier : {{{ xfs_quota -x -c 'project -s prjsubdir' /media/mount.xfs Setting up project prjsubdir (path /media/mount.xfs/dir20/subdir)... Processed 1 /etc/projects paths for project prjsubdir }}} * Affectation d'un quota de 10Mo {{{ xfs_quota -x -c 'limit -p bhard=10m prjsubdir' /media/mount.xfs }}} * Vérification de l'enregistrement du project quota auprès du système de fichier : {{{ xfs_quota -x -c report /media/mount.xfs Project quota on /media/mount.xfs (/dev/loop1) Blocks Project ID Used Soft Hard Warn/Grace ---------- -------------------------------------------------- prjdir20 0 0 20480 00 [--------] prjsubdir 20476 0 10240 00 [--none--] }}} * Suppression des fichiers de test : {{{ rm /media/mount.xfs/dir20/subdir/* }}} * Vérification : {{{ xfs_quota -x -c report /media/mount.xfs Project quota on /media/mount.xfs (/dev/loop1) Blocks Project ID Used Soft Hard Warn/Grace ---------- -------------------------------------------------- prjdir20 0 0 20480 00 [--------] prjsubdir 4 0 10240 00 [--------] }}} * Ecriture dans prjdir20, mais pas dans prjsubdir : {{{ dd if=/dev/zero of=/media/mount.xfs/dir20/5Mo.file bs=1M count=5 5+0 enregistrements lus 5+0 enregistrements écrits 5242880 bytes (5,2 MB) copied, 0,0131275 s, 399 MB/s }}} * Vérification {{{ xfs_quota -x -c report /media/mount.xfs Project quota on /media/mount.xfs (/dev/loop1) Blocks Project ID Used Soft Hard Warn/Grace ---------- -------------------------------------------------- prjdir20 5120 0 20480 00 [--------] prjsubdir 4 0 10240 00 [--------] }}} * Ecriture dans prjsubdir. Est-ce que le fichier est aussi comptabilisé dans prjdir20 ? {{{ dd if=/dev/zero of=/media/mount.xfs/dir20/subdir/5Mo.file bs=1M count=5 5+0 enregistrements lus 5+0 enregistrements écrits 5242880 bytes (5,2 MB) copied, 0,0133598 s, 392 MB/s }}} * Les quotas imbriqués ne cumulent pas les données. Les espaces sont comptabilisés de manière scindée. {{{ xfs_quota -x -c report /media/mount.xfs Project quota on /media/mount.xfs (/dev/loop1) Blocks Project ID Used Soft Hard Warn/Grace ---------- -------------------------------------------------- prjdir20 5120 0 20480 00 [--------] prjsubdir 5124 0 10240 00 [--------] }}} {{{#!wiki debian ~- __Remarque(s):__ Attention à bien comprendre cette gestion où les quotas imbriqués se décomptent les uns des autres. Prennez bonne note de l'effet de bord suivant : * Soit un système de fichier de 35Go /fs * J'ai un répertoire /fs/a sur lequel j'affecte un project quota de 30 Go * J'utilise deux sous-répertoires /fs/a/b1 et /fs/a/b2 contenant un volume de données respectif de 15 Go et 10 Go * A ce stade, mon quota est à 25Go sur 30Go d'utilisation et mon système de fichier n'est pas saturé. * Si je crée un fichier de 15 Go dans /fs/a/b2, je me heurte au project quota défini sur /fs/a et je ne sature pas mon système de fichier /fs * Maintenant je souhaite définir un nouveau project quota sur /fs/a/b1 de 20Go ù Si je créé un fichier de 15 Go dans /fs/a/b2, je ne me heurte pas au project quota défini sur /fs/a car il ne prend plus en compte les données dans /fs/a/b1. Par contre je viens de saturer mon système de fichier.... J'aurais dû exclure manuellement le quota de /fs/a/b1 en redéfinissant le quota de /fs/a à (30 - 20 = 10Go) En tant que procédure de contrôle, vérifiez que la somme des quota ne dépasse pas la taille du système de fichier ! -~ }}} = ToDo = * Etudier BtrFS, notament la fonction de subvolume + petite parenthèse à la compression : https://btrfs.wiki.kernel.org ---- CategoryPortal | CategorySystemAdministration