| quotactl(2) | System Calls Manual | quotactl(2) |
quotactl - Manipuler les quotas de disque
Bibliothèque C standard (libc, -lc)
#include <sys/quota.h>
#include <xfs/xqm.h> /* Définition des constantes Q_X* et XFS_QUOTA_*
(ou <linux/dqblk_xfs.h>; voir NOTES) */
int quotactl(int cmd, const char *_Nullable special, int id,
caddr_t addr);
Le système de quotas permet de définir une limite sur la quantité d'espace disque utilisée sur un système de fichiers, qui peut être mise par utilisateur, par groupe ou par projet. 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'ensuivront. De plus, l'utilisateur ne peut pas dépasser une limite souple pendant une certaine période de grâce d’affilée (une semaine par défaut). Une fois cette durée é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), soit PRJQUOTA (pour les projets depuis Linux 4.1). 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 l’octet NULL) contenant le chemin du périphérique (monté) 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 opération ci-dessous.
La valeur de subcmd vaut une des opérations suivantes :
/* uint64_t est un entier non signé 64 bits
uint32_t est un entier non signé 32 bits */
struct dqblk { /* Définition depuis Linux 2.4.22 */
uint64_t dqb_bhardlimit; /* Limite absolue de blocs de quota alloués sur
le disque */
uint64_t dqb_bsoftlimit; /* Limite préférée de quota de blocs sur le
disque */
uint64_t dqb_curspace; /* Espace actuellement occupé
(en octets) */
uint64_t dqb_ihardlimit; /* Nombre maximal d'inœuds alloués */
uint64_t dqb_isoftlimit; /* Limite préférée d'inœuds */
uint64_t dqb_curinodes; /* Nombre actuel d'inœuds
alloués */
uint64_t dqb_btime; /* Limite de temps de dépassement
d'utilisation du disque */
uint64_t dqb_itime; /* Limite de temps de dépassement
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)
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;
};
/* uint64_t est un entier non signé 64 bits
uint32_t est un entier non signé 32 bits */
struct dqinfo { /* Définie depuis Linux 2.4.22 */
uint64_t dqi_bgrace; /* Durée avant que la limite souple de blocs
ne devienne impérative */
uint64_t dqi_igrace; /* Durée avant que la limite souple d'inœuds
ne devienne impérative */
uint32_t dqi_flags; /* Attributs du fichier de quotas
(DQF_*) */
uint32_t dqi_valid;
};
/* Bits pour dqi_flags */
/* Format de quota QFMT_VFS_OLD */
#define DQF_ROOT_SQUASH (1 << 0) /* « Root squash » activé */
/* Avant Linux v4.0, cela était défini
/* en privé comme V1_DQF_RSQUASH */
/* Format de quota QFMT_VFS_V0 / QFMT_VFS_V1 */
#define DQF_SYS_FILE (1 << 16) /* Quota stocké dans
un système 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)
Pour des systèmes de fichiers XFS qui utilisent le gestionnaire de quotas XFS (XFS Quota Manager, ou XQM), les opérations ci-dessus doivent être remplacées par les commandes suivantes :
XFS_QUOTA_UDQ_ACCT /* Décompte du quota de l'utilisateur */
XFS_QUOTA_UDQ_ENFD /* Application des limites du quota de l'utilisateur */
XFS_QUOTA_GDQ_ACCT /* Décompte du quota du groupe */
XFS_QUOTA_GDQ_ENFD /* Activation des limites de quota du groupe */
XFS_QUOTA_PDQ_ACCT /* Décompte du quota du projet */
XFS_QUOTA_PDQ_ENFD /* Activation des limites de quota du projet */
/* Toutes les unités 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; /* Spécificateur 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 préférée sur
les blocs de disque */
uint64_t d_ino_hardlimit; /* nombre maximal d'inœuds
alloués */
uint64_t d_ino_softlimit; /* Limite préférée d'inœuds */
uint64_t d_bcount; /* Nombre de blocs de disque appartenant
à l'utilisateur */
uint64_t d_icount; /* Nombre d’inœuds de l'utilisateur */
int32_t d_itimer; /* Zéro si dans les limites d'inœuds */
/* Sinon, on refuse le service */
int32_t d_btimer; /* Identique à ci-dessus ; pour
les blocs de disque */
uint16_t d_iwarns; /* Nombre d’avertissements intervenus par
rapport au nombre d’inœuds */
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 réel (RT) */
uint64_t d_rtb_softlimit; /* Limite préférée de blocs de disque
en RT */
uint64_t d_rtbcount; /* Nombre de blocs en temps réel possédés */
int32_t d_rtbtimer; /* Identique à ci-dessus ; pour les blocs de
disque en RT */
uint16_t d_rtbwarns; /* Nombre d’avertissements envoyés par rapport
aux blocs de disque en RT */
int16_t d_padding3; /* Remplissage – utilisation future */
char d_padding4[8]; /* Encore plus de remplissage */
};
#define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */
struct fs_qfilestat {
uint64_t qfs_ino; /* Nombre d'inœuds */
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; /* Numéro de version pour des
futurs changements */
uint16_t qs_flags; /* XFS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */
int8_t qs_pad; /* Inusité */
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 délai pour les blocs */
int32_t qs_itimelimit; /* Limite du délai pour les inœuds */
int32_t qs_rtbtimelimit;/* Limite de délai pour les blocs en
RT */
uint16_t qs_bwarnlimit; /* Limite du nombre d’avertissements */
uint16_t qs_iwarnlimit; /* Limite du nombre d’avertissements */
};
#define FS_QSTATV_VERSION1 1 /* fs_quota_statv.qs_version */
struct fs_qfilestatv {
uint64_t qfs_ino; /* Nombre d'inœuds */
uint64_t qfs_nblks; /* Nombre de BB de
512 octets */
uint32_t qfs_nextents; /* Nombre d'extensions */
uint32_t qfs_pad; /* Remplissage aligné sur 8 octets */
};
struct fs_quota_statv {
int8_t qs_version; /* Numéro de version pour de futurs
changements */
uint8_t qs_pad1; /* Remplissage aligné 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 délai pour les blocs */
int32_t qs_itimelimit; /* Limite de délai pour les inœuds */
int32_t qs_rtbtimelimit; /* Limite du délai 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 démonstration */
};
L'appel renvoie 0 s'il réussit, ou -1 s'il échoue auquel cas errno contient le code d'erreur.
Vous pouvez utiliser <linux/dqblk_xfs.h> au lieu de <xfs/xqm.h>, en prenant en compte le fait qu'il y a plusieurs décalages de nommage :
quota(1), getrlimit(2), quotacheck(8), quotaon(8)
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.
| 10 février 2023 | Pages du manuel de Linux 6.03 |