quotactl(2) System Calls Manual quotactl(2) NOM quotactl - Manipuler les quotas de disque BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include #include /* Definition des constantes Q_X* et XFS_QUOTA_* (ou ; voir NOTES) */ int quotactl(int cmd, const char *_Nullable special, int id, caddr_t addr); DESCRIPTION Le systeme de quotas permet de definir une limite sur la quantite d'espace disque utilisee sur un systeme de fichiers, qui peut etre mise par utilisateur, par groupe ou par projet. Pour chaque utilisateur ou groupe, une limite souple et une limite imperative peuvent etre definies sur chaque systeme de fichiers. La limite imperative ne peut pas etre depassee. La limite souple peut etre depassee, mais des avertissements s'ensuivront. De plus, l'utilisateur ne peut pas depasser une limite souple pendant une certaine periode de grace d'affilee (une semaine par defaut). Une fois cette duree ecoulee, la limite souple devient une limite imperative. L'appel quotactl() manipule ces quotas. L'argument cmd indique une commande a appliquer a l'identifiant d'utilisateur ou de groupe specifie 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), soit PRJQUOTA (pour les projets depuis Linux 4.1). La valeur de subcmd est decrite plus bas. L'argument special est un pointeur vers une chaine de caracteres (terminee par l'octet NULL) contenant le chemin du peripherique (monte) special en mode bloc pour le systeme de fichiers a manipuler. L'argument addr est l'adresse d'une structure de donnees optionnelle, specifique a la commande, qui est copiee sur ou depuis le systeme. L'interpretation d'addr est donnee avec chaque operation ci-dessous. La valeur de subcmd vaut une des operations suivantes : Q_QUOTAON Activer les quotas pour un systeme de fichiers. L'argument id est le numero d'identification du format de quotas a utiliser. Il existe actuellement trois formats possibles de quotas : QFMT_VFS_OLD Le format original de quotas. QFMT_VFS_V0 Le format standard VFS v0 de quotas, qui peut manipuler des identifiants d'utilisateur et de groupe sur 32 bits, et des limites de quotas jusqu'a 2^42 octets et 2^32 inoeuds. 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'a 2^63 octets et 2^63 inoeuds. L'argument addr pointe sur le chemin d'un fichier contenant les quotas du systeme de fichiers. Le fichier de quotas doit exister ; il est habituellement cree par la commande quotacheck(8). Des informations de quotas peuvent egalement etre stockees dans des inoeuds caches du systeme pour ext4, XFS et d'autres systemes de fichiers s'ils sont configures pour cela. Dans ce cas, aucun fichier de quota n'est visible et il n'est pas necessaire d'utiliser quotacheck(8). Les informations de quotas sont toujours maintenues en coherence par le systeme de fichiers et l'operation Q_QUOTAON ne sert qu'a lancer l'application des quotas. La presence d'inoeuds systeme caches avec des informations de quotas est indiquee par l'attribut DQF_SYS_FILE du champ dqi_flags renvoye par l'operation Q_GETINFO. Cette operation exige le privilege (CAP_SYS_ADMIN). Q_QUOTAOFF Desactiver les quotas pour un systeme de fichiers. Les arguments addr et id sont ignores. Cette operation necessite le privilege CAP_SYS_ADMIN. Q_GETQUOTA Obtenir les limites de quota et l'utilisation actuelle d'espace disque pour l'utilisateur ou le groupe id. L'argument addr est un pointeur sur une structure dqblk definie dans comme ceci : /* uint64_t est un entier non signe 64 bits uint32_t est un entier non signe 32 bits */ struct dqblk { /* Definition depuis Linux 2.4.22 */ uint64_t dqb_bhardlimit; /* Limite absolue de blocs de quota alloues sur le disque */ uint64_t dqb_bsoftlimit; /* Limite preferee de quota de blocs sur le disque */ uint64_t dqb_curspace; /* Espace actuellement occupe (en octets) */ uint64_t dqb_ihardlimit; /* Nombre maximal d'inoeuds alloues */ uint64_t dqb_isoftlimit; /* Limite preferee d'inoeuds */ uint64_t dqb_curinodes; /* Nombre actuel d'inoeuds alloues */ uint64_t dqb_btime; /* Limite de temps de depassement d'utilisation du disque */ uint64_t dqb_itime; /* Limite de temps de depassement 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 entrees de la structure dqblk sont valables. Actuellement, le noyau remplit toutes les entrees de la structure dqblk et les marque comme valables dans le champ dqb_valid. Les utilisateurs non privilegies ne peuvent connaitre que leurs propres quotas ; un utilisateur avec le privilege CAP_SYS_ADMIN peut connaitre les quotas de tous les utilisateurs. Q_GETNEXTQUOTA (depuis Linux 4.6) Cette operation est la meme que Q_GETQUOTA, mais elle renvoie les informations de quotas du prochain identifiant superieur ou egal a id ou un quota est positionne. L'argument addr est un pointeur vers une structure nextdqblk dont les champs sont identiques a dqblk, excepte un champ dqb_id supplementaire pour renvoyer l'identifiant pour lequel les informations de quota seront renvoyees : struct nextdqblk { uint64_t dqb_bhardlimit; uint64_t dqb_bsoftlimit; uint64_t dqb_curspace; uint64_t dqb_ihardlimit; uint64_t dqb_isoftlimit; uint64_t dqb_curinodes; uint64_t dqb_btime; uint64_t dqb_itime; uint32_t dqb_valid; uint32_t dqb_id; }; Q_SETQUOTA Definir 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 entrees de la structure ont ete definies par l'appelant. Cette operation remplace les operations Q_SETQLIM et Q_SETUSE de l'interface anterieure de quotas. Cette operation necessite le privilege CAP_SYS_ADMIN. Q_GETINFO (depuis Linux 2.4.22) Obtenir les informations (comme le delai de grace) du fichier de quotas. L'argument addr est un pointeur sur une structure dqinfo. Cette structure est definie dans de la maniere suivante : /* uint64_t is an unsigned 64-bit integer; uint32_t is an unsigned 32-bit integer */ struct dqinfo { /* Defined since Linux 2.4.22 */ uint64_t dqi_bgrace; /* Time before block soft limit becomes hard limit */ uint64_t dqi_igrace; /* Time before inode soft limit becomes hard limit */ uint32_t dqi_flags; /* Flags for quotafile (DQF_*) */ uint32_t dqi_valid; }; /* Bits for dqi_flags */ /* Format de quota QFMT_VFS_OLD */ #define DQF_ROOT_SQUASH (1 << 0) /* << Root squash >> active */ /* Avant Linux v4.0, cela etait defini /* en prive comme V1_DQF_RSQUASH */ /* Format de quota QFMT_VFS_V0 / QFMT_VFS_V1 */ #define DQF_SYS_FILE (1 << 16) /* Quota stocke dans un systeme de fichiers */ /* 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 entrees de la structure qui sont valables. Le noyau remplit actuellement toutes les entrees de la structure dqinfo et les marque comme etant valables dans le champ dqi_valid. L'argument id est ignore. Q_SETINFO (depuis Linux 2.4.22) Definir les informations au sujet du fichier de quotas. L'argument addr devrait etre un pointeur vers une structure dqinfo. Le champ dqi_valid de la structure dqinfo indique quelles entrees de la structure ont ete definies par l'appelant. Cette operation remplace les operations Q_SETGRACE et Q_SETFLAGS de l'interface anterieure de quotas. L'argument id est ignore. Cette operation necessite le privilege CAP_SYS_ADMIN. Q_GETFMT (depuis Linux 2.4.22) Obtenir le format de quotas utilise sur le systeme de fichiers specifie. L'argument addr est un pointeur sur un tampon de 4 octets qui contient le numero du format. Q_SYNC Mettre a jour la copie sur disque de l'utilisation des quotas sur un systeme de fichiers. Si special vaut NULL, alors tous les systemes de fichiers avec des quotas actives sont synchronises. Les arguments addr et id sont ignores. Q_GETSTATS (pris en charge jusqu'a Linux 2.4.21) Recuperer des statistiques et d'autres informations generiques sur le sous-systeme de quotas. L'argument addr doit etre un pointeur sur une structure dqstats dans laquelle les donnees seront stockees. Cette structure est definie dans . Les arguments special et id sont ignores. Cette operation est obsolete et a ete supprimee dans Linux 2.4.22. Les fichiers dans /proc/sys/fs/quota/ contiennent desormais les informations. Pour des systemes de fichiers XFS qui utilisent le gestionnaire de quotas XFS (XFS Quota Manager, ou XQM), les operations ci-dessus doivent etre remplacees par les commandes suivantes : Q_XQUOTAON Activer les quotas sur un systeme de fichiers XFS. XFS permet d'activer et desactiver l'application des limites avec la gestion des quotas. Par consequent, XFS attend qu'addr soit un pointeur sur un unsigned int qui contient une combinaison bit a bit des attributs suivants (definis dans ) : XFS_QUOTA_UDQ_ACCT /* Decompte du quota de l'utilisateur */ XFS_QUOTA_UDQ_ENFD /* Application des limites du quota de l'utilisateur */ XFS_QUOTA_GDQ_ACCT /* Decompte du quota du groupe */ XFS_QUOTA_GDQ_ENFD /* Activation des limites de quota du groupe */ XFS_QUOTA_PDQ_ACCT /* Decompte du quota du projet */ XFS_QUOTA_PDQ_ENFD /* Activation des limites de quota du projet */ Cette operation exige un privilege (CAP_SYS_ADMIN). L'argument id est ignore. Q_XQUOTAOFF Desactiver les quotas pour un systeme de fichiers XFS. Comme pour Q_QUOTAON, le systeme de fichier XFS attend un pointeur vers un unsigned int qui specifie si le decompte des quotas et/ou l'application des limites doit etre desactive (en utilisant les memes attributs que pour l'operation Q_XQUOTAON). Cette operation necessite le privilege CAP_SYS_ADMIN. L'argument id est ignore. Q_XGETQUOTA Obtenir les limites de quotas et l'utilisation actuelle d'espace disque pour l'utilisateur id. L'argument addr est un pointeur sur une structure fs_disk_quota definie dans comme ceci : /* Toutes les unites de bloc sont en BB (Basic Blocks) de 512 octets. */ #define FS_DQUOT_VERSION 1 /* fs_disk_quota.d_version */ #define XFS_USER_QUOTA (1<<0) /* Type de quota utilisateur */ #define XFS_PROJ_QUOTA (1<<1) /* Type de quota projet */ #define XFS_GROUP_QUOTA (1<<2) /* Type de quota groupe */ struct fs_disk_quota { int8_t d_version; /* Version de cette structure */ int8_t d_flags; /* XFS_{USER,PROJ,GROUP}_QUOTA */ uint16_t d_fieldmask; /* Specificateur de champ */ uint32_t d_id; /* ID utilisateur, projet ou groupe */ uint64_t d_blk_hardlimit; /* Limite absolue sur les blocs de disque */ uint64_t d_blk_softlimit; /* Limite preferee sur les blocs de disque */ uint64_t d_ino_hardlimit; /* nombre maximal d'inoeuds alloues */ uint64_t d_ino_softlimit; /* Limite preferee d'inoeuds */ uint64_t d_bcount; /* Nombre de blocs de disque appartenant a l'utilisateur */ uint64_t d_icount; /* Nombre d'inoeuds de l'utilisateur */ int32_t d_itimer; /* Zero si dans les limites d'inoeuds */ /* Sinon, on refuse le service */ int32_t d_btimer; /* Identique a ci-dessus ; pour les blocs de disque */ uint16_t d_iwarns; /* Nombre d'avertissements intervenus par rapport au nombre d'inoeuds */ uint16_t d_bwarns; /* Nombre d'avertissements intervenus par rapport aux blocs de disque */ int32_t d_padding2; /* Remplissage -- utilisation future */ uint64_t d_rtb_hardlimit; /* Limite absolue des blocs de disque en temps reel (RT) */ uint64_t d_rtb_softlimit; /* Limite preferee de blocs de disque en RT */ uint64_t d_rtbcount; /* Nombre de blocs en temps reel possedes */ int32_t d_rtbtimer; /* Identique a ci-dessus ; pour les blocs de disque en RT */ uint16_t d_rtbwarns; /* Nombre d'avertissements envoyes par rapport aux blocs de disque en RT */ int16_t d_padding3; /* Remplissage - utilisation future */ char d_padding4[8]; /* Encore plus de remplissage */ }; Les utilisateurs non privilegies ne peuvent connaitre que leurs propres quotas ; un utilisateur avec les droits CAP_SYS_ADMIN peut connaitre les quotas de tous les utilisateurs. Q_XGETNEXTQUOTA (depuis Linux 4.6) Cette operation est la meme que Q_XGETQUOTA mais elle renvoie (dans la structure fs_disk_quota vers laquelle pointe addr) les informations de quotas du prochain identifiant superieur ou egal a id ayant des quotas. Remarquez que comme fs_disk_quota a deja un champ q_id, aucun type de structure separee n'est necessaire (contrairement aux operations Q_GETQUOTA et Q_GETNEXTQUOTA). Q_XSETQLIM Definir les informations de quotas pour l'utilisateur id. L'argument addr contient un pointeur vers une structure fs_disk_quota. Cette operation necessite les privileges CAP_SYS_ADMIN. Q_XGETQSTAT Renvoyer les informations de quotas specifiques au systeme de fichiers XFS dans la structure fs_quota_stat vers laquelle pointe addr. Cela est utile pour savoir combien d'espace est utilise pour stocker les informations sur les quotas, ainsi que pour connaitre l'etat active ou non des quotas d'un systeme de fichiers local XFS specifique. La structure fs_quota_stat se definit comme suit : #define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */ struct fs_qfilestat { uint64_t qfs_ino; /* Nombre d'inoeuds */ uint64_t qfs_nblks; /* Nombre de BB de 512 octets */ uint32_t qfs_nextents; /* Nombre d'extensions */ }; struct fs_quota_stat { int8_t qs_version; /* Numero de version pour des futurs changements */ uint16_t qs_flags; /* XFS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */ int8_t qs_pad; /* Inusite */ struct fs_qfilestat qs_uquota; /* Informations de quota utilisateur */ struct fs_qfilestat qs_gquota; /* Informations de quota groupe */ uint32_t qs_incoredqs; /* Nombre de dquots dans le fichier core */ int32_t qs_btimelimit; /* Limite du delai pour les blocs */ int32_t qs_itimelimit; /* Limite du delai pour les inoeuds */ int32_t qs_rtbtimelimit;/* Limite de delai pour les blocs en RT */ uint16_t qs_bwarnlimit; /* Limite du nombre d'avertissements */ uint16_t qs_iwarnlimit; /* Limite du nombre d'avertissements */ }; L'argument id est ignore. Q_XGETQSTATV Renvoyer les informations de quotas specifiques au systeme de fichiers XFS dans la structure fs_quota_statv vers laquelle pointe l'argument addr. Cette version de l'operation utilise une structure gerant correctement les versions, et ayant une bonne mise en page (avec tous les champs naturellement alignes) et le remplissage pour eviter de gerer les fichiers speciaux de compat ; elle donne aussi la possibilite d'avoir des statistiques sur le fichier de quotas du projet. La structure fs_quota_statv elle-meme est definie comme suit : #define FS_QSTATV_VERSION1 1 /* fs_quota_statv.qs_version */ struct fs_qfilestatv { struct fs_qfilestatv { uint64_t qfs_ino; /* Nombre d'inoeuds */ uint64_t qfs_nblks; /* Nombre de BB de 512 octets */ uint32_t qfs_nextents; /* Nombre d'extensions */ uint32_t qfs_pad; /* Remplissage aligne sur 8 octets */ }; struct fs_quota_statv { int8_t qs_version; /* Numero de version pour de futurs changements */ uint8_t qs_pad1; /* Remplissage aligne sur 16 bits */ uint16_t qs_flags; /* Drapeaux XFS_QUOTA_.* */ uint32_t qs_incoredqs; /* Nombre de dquots dans le core */ struct fs_qfilestatv qs_uquota; /* Informations de quota utilisateur */ struct fs_qfilestatv qs_gquota; /* Informations de quota de groupe */ struct fs_qfilestatv qs_pquota; /* Informations de quota de projet */ int32_t qs_btimelimit; /* Limite de delai pour les blocs */ int32_t qs_itimelimit; /* Limite de delai pour les inoeuds */ int32_t qs_rtbtimelimit; /* Limite du delai pour les blocs en RT */ uint16_t qs_bwarnlimit; /* Limite du nombre d'avertissements */ uint16_t qs_iwarnlimit; /* Limite du nombre d'avertissements */ uint64_t qs_pad2[8]; /* Pour une future demonstration */ }; Le champ qs_version de la structure doit etre rempli avec la version de la structure prise en charge par l'appelant (pour l'instant, seul FS_QSTAT_VERSION1 est pris en charge). Le noyau remplira la structure en fonction de la version fournie. L'argument id est ignore. Q_XQUOTARM (bogue jusqu'a Linux 3.16) Liberer l'espace disque concerne par le quota de disque. L'argument addr doit etre un pointeur vers une valeur unsigned int contenant les attributs (les memes que dans le champ d_flags de la structure fs_disk_quota) identifiant les types de quota a supprimer (remarquez que le type de quota fourni dans l'argument cmd est ignore, mais il doit etre valable pour passer les controles prealables du gestionnaire d'appel systeme quotactl). Les quotas doivent deja avoir ete desactives. L'argument id est ignore. Q_XQUOTASYNC (depuis Linux 2.6.15 ; inutilisable depuis Linux 3.4) Cette operation etait un equivalent a Q_SYNC des quotas XFS, mais elle n'est plus utilisable depuis Linux 3.4 car sync(1) ecrit maintenant les informations de quotas sur le disque (en plus d'autres metadonnees du systeme de fichiers). Les arguments special, id et addr sont ignores. VALEUR RENVOYEE L'appel renvoie 0 s'il reussit, ou -1 s'il echoue auquel cas errno contient le code d'erreur. ERREURS EACCES cmd vaut Q_QUOTAON et le fichier de quotas pointe par addr existe, mais n'est pas un fichier normal ou alors n'est pas dans le systeme de fichiers pointe par special. EBUSY cmd vaut Q_QUOTAON, mais un autre Q_QUOTAON a deja ete realise. EFAULT addr ou special n'est pas valable. EINVAL cmd ou type n'est pas valable. EINVAL cmd vaut Q_QUOTAON mais le fichier de quotas indique est corrompu. EINVAL (depuis Linux 5.5) cmd vaut Q_XQUOTARM mais addr ne pointe pas vers des types de quota valables. ENOENT Le fichier specifie par special ou addr n'existe pas. ENOSYS Le noyau a ete compile sans l'option CONFIG_QUOTA. ENOTBLK special n'est pas un peripherique bloc. EPERM L'appelant ne possede pas le privilege necessaire (CAP_SYS_ADMIN) pour l'operation demandee. ERANGE cmd vaut Q_SETQUOTA, mais les limites specifiees sont en dehors de l'intervalle autorise pour le format de quotas. ESRCH Aucun quota de disque n'est impose pour l'utilisateur specifie. Les quotas n'ont pas ete actives sur ce systeme de fichiers. ESRCH cmd vaut Q_QUOTAON, mais le format de quotas specifie n'a pas ete trouve. ESRCH cmd vaut Q_GETNEXTQUOTA ou Q_XGETNEXTQUOTA mais aucun identifiant superieur ou egal a id n'a de quota valable. NOTES Vous pouvez utiliser au lieu de , en prenant en compte le fait qu'il y a plusieurs decalages de nommage : - Les attributs d'activation des quotas (au format XFS_QUOTA_[UGP]DQ_{ACCT,ENFD}) sont definis sans << X >> devant, comme FS_QUOTA_[UGP]DQ_{ACCT,ENFD}. - La meme chose s'applique aux attributs de type de quotas XFS_{USER,GROUP,PROJ}_QUOTA qui sont definis en tant que FS_{USER,GROUP,PROJ}_QUOTA. - Le fichier d'en-tete dqblk_xfs.h definit ses propres constantes XQM_USRQUOTA, XQM_GRPQUOTA et XQM_PRJQUOTA pour les types de quota disponibles, mais leurs valeurs sont les memes que pour les constantes definies sans le prefixe XQM_. VOIR AUSSI quota(1), getrlimit(2), quotacheck(8), quotaon(8) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 quotactl(2)