Size: 28727
Comment: layout
|
Size: 28699
Comment: use Debian manpages
|
Deletions are marked like this. | Additions are marked like this. |
Line 21: | Line 21: |
* http://linux.die.net/man/8/xfs_quota project quota | * [[DebianMan:8/xfs_quota|project quota]] |
Line 40: | Line 40: |
A priori, seul le système de fichier XFS supporte [[http://linux.die.net/man/8/xfs_quota|project quota]]. | A priori, seul le système de fichier XFS supporte [[DebianMan:8/xfs_quota|project quota]]. |
Line 373: | Line 373: |
* http://linux.die.net/man/8/xfs_quota | * [[DebianMan:8/xfs_quota|xfs_quota]] |
Line 462: | Line 462: |
* http://linux.die.net/man/8/xfs_quota pour plus d'info. | * [[DebianMan:8/xfs_quota|xfs_quota]] pour plus d'info. |
Traduction(s) : aucune
|
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. |
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
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 project quota.
Question(s):
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)
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.
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
Question(s):
- 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
Remarque(s):
- 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
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:
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é.
A noter que XFS supporte nativement la gestion des quotas et des ACL : Il n'y a pas de groupe fictif à créer pour chaque quota et polluant la liste des groupes du système
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
Question(s):
- 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
Question(s):
- 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
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 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 [--------]
Remarque(s):
ToDo
Etudier BtrFS, notament la fonction de subvolume + petite parenthèse à la compression : https://btrfs.wiki.kernel.org
Voir aussi:
CategoryPortal | CategorySystemAdministration | ?CategoryLocalResourcesManagement