1. NOM

quotactl - Manipuler les quotas de disque

2. SYNOPSIS

 
Sélectionnez
#include <sys/quota.h>
 #include <xfs/xqm.h>
 

int quotactl(int cmd, const char *special, int id, caddr_t addr);

3. DESCRIPTION

Le système de quotas permet de définir une limite sur la quantité d'espace disque utilisé sur un système de fichiers, qui peut être mise par utilisateur ou par groupe. Pour chaque utilisateur ou groupe, une limite souple et une limite impérative peuvent être définies sur chaque système de fichiers. La limite impérative ne peut pas être dépassée. La limite souple peut être dépassée, mais des avertissements s'en suivront. De plus, l'utilisateur ne peut pas dépasser une limite souple pendant plus d'une semaine (par défaut) d'affilée. Une fois la semaine écoulée, la limite souple devient une limite impérative. L'appel quotactl() manipule ces quotas. L'argument cmd indique une commande à appliquer à l'identifiant d'utilisateur ou de groupe spécifié dans id. Pour initialiser l'argument cmd, utilisez la macro QCMD(subcmd,type). La valeur type vaut soit USRQUOTA (pour les quotas d'utilisateur), soit GRPQUOTA (pour les quotas de groupe). La valeur de subcmd est décrite plus bas. L'argument special est un pointeur vers une chaîne de caractères (terminée par le caractère nul) contenant le chemin du périphérique spécial en mode bloc pour le système de fichiers à manipuler. L'argument addr est l'adresse d'une structure de données optionnelle, spécifique à la commande, qui est copiée sur ou depuis le système. L'interprétation d'addr est donnée avec chaque commande ci-dessous. La valeur de subcmd prend une de ces valeurs :

  • Q_QUOTAON
            Activer les quotas pour un système de fichiers. L'argument id est le numéro d'identification du format de quotas à utiliser. Il existe actuellement trois formats possibles de quotas :
  • QFMT_VFS_OLD
                 Le format original de quotas.
  • QFMT_VFS_V0
        Le standard VFS v0 format de quotas, qui peut manipuler des identifiants d'utilisateur et de groupe sur 32 bits, et des limites de quotas jusqu'à 2^42 octets et 2^32 inœuds.
  • QFMT_VFS_V1
        Un format de quotas qui peut manipuler des identifiants d'utilisateur et de groupe sur 32 bits, et des limites de quotas jusqu'à 2^64 octets et 2^64 inœuds.

L'argument addr pointe sur le chemin d'un fichier contenant les quotas du système de fichiers. Le fichier de quotas doit exister ; il est habituellement créé par la commande quotacheck(8). Cette opération nécessite le privilège CAP_SYS_ADMIN.

  • Q_QUOTAOFF
            Désactiver les quotas pour un système de fichiers. Les arguments addr et id sont ignorés. Cette opération nécessite le privilège CAP_SYS_ADMIN.
  • Q_GETQUOTA
        Obtenir les limites actuelles et l'utilisation courante de l'espace disque pour l'utilisateur ou le groupe id. L'argument addr est un pointeur sur une structure dqblk définie dans <sys/quota.h> comme ceci :
 
Sélectionnez
/* uint64_t est un entier non signé 64 bits
   uint32_t est un entier non signé 32 bits */
struct dqblk {          /* Definition depuis Linux 2.4.22 */
    uint64_t dqb_bhardlimit;   /* limite impérative sur le
                                  nombre de blocs disques */
    uint64_t dqb_bsoftlimit;   /* limite douce sur le nombre
                                  de blocs disques */
    uint64_t dqb_curspace;     /* nombre de blocs actuel dans
                                  le quota */
    uint64_t dqb_ihardlimit;   /* nombre maximal d'inœuds
                                  alloués */
    uint64_t dqb_isoftlimit;   /* limite douce d'inœuds */
    uint64_t dqb_curinodes;    /* nombre d'inœuds actuellement
                                  alloués */
    uint64_t dqb_btime;        /* limite de temps pour utilisation
                                  abusive du disque */
    uint64_t dqb_itime;        /* limite de temps pour utilisation
                                  des fichiers */
    uint32_t dqb_valid;        /* masque de bit des constantes
                                  QIF_* */
};
/* Attributs de dqb_valid qui indiquent quels champs
   de la structure dqblk sont valables. */
#define QIF_BLIMITS   1
#define QIF_SPACE     2
#define QIF_ILIMITS   4
#define QIF_INODES    8
#define QIF_BTIME     16
#define QIF_ITIME     32
#define QIF_LIMITS    (QIF_BLIMITS | QIF_ILIMITS)
#define QIF_USAGE     (QIF_SPACE | QIF_INODES)
#define QIF_TIMES     (QIF_BTIME | QIF_ITIME)
#define QIF_ALL       (QIF_LIMITS | QIF_USAGE | QIF_TIMES)

Le champ dqb_valid est un masque de bit qui permet d'indiquer quelles entrées de la structure sont valables. Actuellement, le noyau remplit toutes les entrées de la structure dqblk et les marque comme valables dans le champ dqb_valid. Les utilisateurs non privilégiés ne peuvent connaitre que leurs propres quotas ; un utilisateur avec le privilège CAP_SYS_ADMIN peut connaitre les quotas de tous les utilisateurs.

  • Q_SETQUOTA
        Définir les informations de quotas pour l'utilisateur ou le groupe id, en utilisant les informations fournies par la structure dqblk dont l'adresse est contenue dans addr. Le champ dqb_valid de la structure dqblk indique quelles entrées de la structure ont été définies par l'appelant. Cette opération remplace les opérations Q_SETQLIM et Q_SETUSE de l'interface antérieure de quotas. Cette opération nécessite le privilège CAP_SYS_ADMIN.
  • Q_GETINFO
        Obtenir les limites actuelles et l'utilisation courante de l'espace disque. L'argument addr est un pointeur sur une structure dqblk (définie dans <sys/quota.h>).
 
Sélectionnez
/* uint64_t est un entier non signé 64 bits
   uint32_t est un entier non signé 32 bits */
struct dqinfo {          /* Définie depuis le noyau 2.4.22 */
    uint64_t dqi_bgrace; /* Temps avant qu'une limite douce sur
                            les blocs ne devienne impérative */
    uint64_t dqi_igrace;    /* Temps avant qu'une limite douce sur
                               les inœuds ne devienne impérative */
    uint32_t dqi_flags;     /* Attributs pour le fichier de quotas
                               (DQF_*) */
    uint32_t dqi_valid;
};
/* Bits pour dqi_flags */
/* Format de quota QFMT_VFS_OLD */
#define V1_DQF_RSQUASH	1   /* Activer « root squash » */
/* Les autres formats de quotas n'ont pas de bits dqi_flags définis */
/* Attributs de dqi_valid qui indiquent quels champs
   de la structure dqinfo sont valables. */
# define IIF_BGRACE	1
# define IIF_IGRACE	2
# define IIF_FLAGS	4
# define IIF_ALL	(IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)

Le champ dqi_valid de la structure dqinfo indique les entrées de la structure qui sont valables. Le noyau remplit actuellement toutes les entrées de la structure dqinfo et les marque comme étant valables dans le champ dqi_valid. L'argument id est ignoré.

  • Q_SETINFO
        Définir les informations au sujet du fichier de quotas. L'argument addr devrait être un pointeur vers une structure dqinfo. Le champ dqi_valid de la structure dqinfo indique quelles entrées de la structure ont été définies par l'appelant. Cette opération remplace les opérations Q_SETGRACE et Q_SETFLAGS de l'interface antérieure de quotas. L'argument id est ignoré. Cette opération nécessite le privilège CAP_SYS_ADMIN.
  • Q_GETFMT
        Obtenir le format de quotas utilisé sur le système de fichiers spécifié. L'argument addr est un pointeur sur un tampon de 4 octets qui contient le numéro du format.
  • Q_SYNC
        Met à jour la copie sur disque de l'utilisation des quotas sur un système de fichiers. Si special vaut NULL, alors tous les systèmes de fichiers avec des quotas activés sont synchronisés. Les arguments addr et id sont ignorés.
  • Q_GETSTATS Récupère des statistiques et d'autres informations génériques sur le sous-système de quotas. L'argument addr doit être un pointeur sur une structure dqstats dans laquelle les données seront stockées. Cette structure est définie dans <sys/quota.h>. Les arguments special et id sont ignorés. Cette opération est obsolète et n'est plus acceptée par les noyaux récents ; elle est remplacée par les fichiers dans /proc/sys/fs/quota/, qui contiennent les informations.

Pour des systèmes de fichiers XFS qui utilisent le gestionnaire de quotas XFS (XFS Quota Manager, ou XQM), les commandes ci-dessus doivent être remplacées par les commandes suivantes :

  • Q_XQUOTAON
            Activer les quotas sur un système de fichiers XFS. XFS permet d'activer et désactiver le renforcement des limites avec la gestion des quotas. Par conséquent, XFS attend qu'addr soit un pointeur sur un unsigned int qui contient soit les attributs XFS_QUOTA_UDQ_ACCT et/ou XFS_QUOTA_UDQ_ENFD (pour les quotas d'utilisateur), ou XFS_QUOTA_GDQ_ACCT et/ou XFS_QUOTA_GDQ_ENFD (pour les quotas de groupe), comme défini dans <xfs/xqm.h>. Cette opération nécessite le privilège CAP_SYS_ADMIN.
  • Q_XQUOTAOFF
        Désactiver les quotas pour un système de fichiers XFS. Comme pour Q_QUOTAON, le système de fichier XFS attend un pointeur vers un unsigned int qui spécifie si le décompte des quotas et/ou le renforcement des limites doit être désactivé. Cette opération nécessite le privilège CAP_SYS_ADMIN.
  • Q_XGETQUOTA
        Obtenir les limites actuelles et l'utilisation courante de l'espace disque pour l'utilisateur id. L'argument addr est un pointeur sur une structure fs_disk_quota (définie dans <xfs/xqm.h>). Les utilisateurs non privilégiés ne peuvent connaitre que leurs propres quotas ; un utilisateur avec le privilège CAP_SYS_ADMIN peut connaitre les quotas de tous les utilisateurs.
  • Q_XSETQLIM
        Définir les informations de quotas pour l'utilisateur id. L'argument addr contient un pointeur vers une structure fs_disk_quota (définie dans <xfs/xqm.h>). Cette opération nécessite le privilège CAP_SYS_ADMIN.
  • Q_XGETQSTAT
        Renvoie une structure fs_quota_stat contenant des informations de quotas spécifiques au système de fichiers XFS. Ceci est utile pour savoir combien d'espace est utilisé pour stocker les informations sur les quotas, ainsi que pour connaitre l'état activé ou non des quotas d'un système de fichiers local XFS spécifique.
  • Q_XQUOTARM
        Libère l'espace disque pris par les quotas sur le disque. Les quotas doivent avoir été désactivés au préalable.

Il n'existe pas de commande équivalente à Q_SYNC pour XFS puisque sync(1) écrit les informations de quotas sur le disque (en plus des autres méta-données du système de fichiers qui sont écrits sur le disque).

4. VALEUR RENVOYÉE

L'appel renvoie zéro s'il réussit, ou -1 s'il échoue auquel cas errno contient le code d'erreur.

5. ERREURS

  • EFAULT
        addr ou special n'est pas valable.
  • EINVAL
        cmd ou type n'est pas valable.
  • ENOENT
        Le fichier spécifié par special ou addr n'existe pas.
  • ENOSYS
        Le noyau a été compilé sans l'option CONFIG_QUOTA.
  • ENOTBLK
        special n'est pas un périphérique bloc.
  • EPERM
        L'appelant ne possède pas le privilège nécessaire (CAP_SYS_ADMIN) pour l'opération demandée.
  • ESRCH
        Aucun quota de disque n'est imposé pour l'utilisateur spécifié. Les quotas n'ont pas été activés sur ce système de fichiers.

Si cmd vaut Q_SETQUOTA, quotactl() peut aussi définir errno ainsi :

  • ERANGE
        Les limites spécifiées sont en dehors de l'intervalle autorisé for le format de quotas.

Si cmd vaut Q_QUOTAON, quotactl() peut aussi définir errno ainsi :

  • EACCES
        Le fichier de quotas pointé par addr existe, mais n'est pas un fichier normal ; ou alors, le fichier de quotas pointé par addr existe, mais n'est pas dans le système de fichiers pointé par special.
  • EBUSY
        Tentative de Q_QUOTAON, mais un autre Q_QUOTAON a déjà été réalisé.
  • EINVAL
        Le fichier de quotas est corrompu.
  • ESRCH
        Le format de quotas spécifié n'a pas été trouvé.

6. VOIR AUSSI

quota(1), getrlimit(2), quotacheck(8), quotaon(8)

7. COLOPHON

Cette page fait partie de la publication 3.52 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

8. TRADUCTION

Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à < >.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».