diff options
Diffstat (limited to 'man2/quotactl.2')
-rw-r--r-- | man2/quotactl.2 | 806 |
1 files changed, 0 insertions, 806 deletions
diff --git a/man2/quotactl.2 b/man2/quotactl.2 deleted file mode 100644 index 3cfaaf5..0000000 --- a/man2/quotactl.2 +++ /dev/null @@ -1,806 +0,0 @@ -.\" Copyright (c) 2010, Jan Kara -.\" A few pieces copyright (c) 1996 Andries Brouwer (aeb@cwi.nl) -.\" and copyright 2010 (c) Michael Kerrisk <mtk.manpages@gmail.com> -.\" -.\" SPDX-License-Identifier: Linux-man-pages-copyleft -.\" -.TH quotactl 2 2024-03-03 "Linux man-pages 6.7" -.SH NAME -quotactl \- manipulate disk quotas -.SH LIBRARY -Standard C library -.RI ( libc ", " \-lc ) -.SH SYNOPSIS -.nf -.B #include <sys/quota.h> -.BR "#include <xfs/xqm.h>" " /* Definition of " Q_X* " and " XFS_QUOTA_* \ -" constants" -.RB " (or " <linux/dqblk_xfs.h> "; see NOTES) */" -.P -.BI "int quotactl(int " op ", const char *_Nullable " special ", int " id , -.BI " caddr_t " addr ); -.fi -.SH DESCRIPTION -The quota system can be used to set per-user, per-group, and per-project limits -on the amount of disk space used on a filesystem. -For each user and/or group, -a soft limit and a hard limit can be set for each filesystem. -The hard limit can't be exceeded. -The soft limit can be exceeded, but warnings will ensue. -Moreover, the user can't exceed the soft limit for more than grace period -duration (one week by default) at a time; -after this, the soft limit counts as a hard limit. -.P -The -.BR quotactl () -call manipulates disk quotas. -The -.I op -argument indicates an operation to be applied to the user or -group ID specified in -.IR id . -To initialize the -.I op -argument, use the -.I QCMD(subop, type) -macro. -The -.I type -value is either -.BR USRQUOTA , -for user quotas, -.BR GRPQUOTA , -for group quotas, or (since Linux 4.1) -.\" 847aac644e92e5624f2c153bab409bf713d5ff9a -.BR PRJQUOTA , -for project quotas. -The -.I subop -value is described below. -.P -The -.I special -argument is a pointer to a null-terminated string containing the pathname -of the (mounted) block special device for the filesystem being manipulated. -.P -The -.I addr -argument is the address of an optional, operation-specific, data structure -that is copied in or out of the system. -The interpretation of -.I addr -is given with each operation below. -.P -The -.I subop -value is one of the following operations: -.TP -.B Q_QUOTAON -Turn on quotas for a filesystem. -The -.I id -argument is the identification number of the quota format to be used. -Currently, there are three supported quota formats: -.RS -.TP 13 -.B QFMT_VFS_OLD -The original quota format. -.TP -.B QFMT_VFS_V0 -The standard VFS v0 quota format, which can handle 32-bit UIDs and GIDs -and quota limits up to 2\[ha]42 bytes and 2\[ha]32 inodes. -.TP -.B QFMT_VFS_V1 -A quota format that can handle 32-bit UIDs and GIDs -and quota limits of 2\[ha]63 \- 1 bytes and 2\[ha]63 \- 1 inodes. -.RE -.IP -The -.I addr -argument points to the pathname of a file containing the quotas for -the filesystem. -The quota file must exist; it is normally created with the -.BR quotacheck (8) -program -.IP -Quota information can be also stored in hidden system inodes -for ext4, XFS, and other filesystems if the filesystem is configured so. -In this case, there are no visible quota files and there is no need to -use -.BR quotacheck (8). -Quota information is always kept consistent by the filesystem and the -.B Q_QUOTAON -operation serves only to enable enforcement of quota limits. -The presence of hidden -system inodes with quota information is indicated by the -.B DQF_SYS_FILE -flag in the -.I dqi_flags -field returned by the -.B Q_GETINFO -operation. -.IP -This operation requires privilege -.RB ( CAP_SYS_ADMIN ). -.TP -.B Q_QUOTAOFF -Turn off quotas for a filesystem. -The -.I addr -and -.I id -arguments are ignored. -This operation requires privilege -.RB ( CAP_SYS_ADMIN ). -.TP -.B Q_GETQUOTA -Get disk quota limits and current usage for user or group -.IR id . -The -.I addr -argument is a pointer to a -.I dqblk -structure defined in -.I <sys/quota.h> -as follows: -.IP -.in +4n -.EX -/* uint64_t is an unsigned 64\-bit integer; - uint32_t is an unsigned 32\-bit integer */ -\& -struct dqblk { /* Definition since Linux 2.4.22 */ - uint64_t dqb_bhardlimit; /* Absolute limit on disk - quota blocks alloc */ - uint64_t dqb_bsoftlimit; /* Preferred limit on - disk quota blocks */ - uint64_t dqb_curspace; /* Current occupied space - (in bytes) */ - uint64_t dqb_ihardlimit; /* Maximum number of - allocated inodes */ - uint64_t dqb_isoftlimit; /* Preferred inode limit */ - uint64_t dqb_curinodes; /* Current number of - allocated inodes */ - uint64_t dqb_btime; /* Time limit for excessive - disk use */ - uint64_t dqb_itime; /* Time limit for excessive - files */ - uint32_t dqb_valid; /* Bit mask of QIF_* - constants */ -}; -\& -/* Flags in dqb_valid that indicate which fields in - dqblk structure are valid. */ -\& -#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) -.EE -.in -.IP -The -.I dqb_valid -field is a bit mask that is set to indicate the entries in the -.I dqblk -structure that are valid. -Currently, the kernel fills in all entries of the -.I dqblk -structure and marks them as valid in the -.I dqb_valid -field. -Unprivileged users may retrieve only their own quotas; -a privileged user -.RB ( CAP_SYS_ADMIN ) -can retrieve the quotas of any user. -.TP -.BR Q_GETNEXTQUOTA " (since Linux 4.6)" -.\" commit 926132c0257a5a8d149a6a395cc3405e55420566 -This operation is the same as -.BR Q_GETQUOTA , -but it returns quota information for the next ID greater than or equal to -.I id -that has a quota set. -.IP -The -.I addr -argument is a pointer to a -.I nextdqblk -structure whose fields are as for the -.IR dqblk , -except for the addition of a -.I dqb_id -field that is used to return the ID for which -quota information is being returned: -.IP -.in +4n -.EX -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; -}; -.EE -.in -.TP -.B Q_SETQUOTA -Set quota information for user or group -.IR id , -using the information supplied in the -.I dqblk -structure pointed to by -.IR addr . -The -.I dqb_valid -field of the -.I dqblk -structure indicates which entries in the structure have been set by the caller. -This operation supersedes the -.B Q_SETQLIM -and -.B Q_SETUSE -operations in the previous quota interfaces. -This operation requires privilege -.RB ( CAP_SYS_ADMIN ). -.TP -.BR Q_GETINFO " (since Linux 2.4.22)" -Get information (like grace times) about quotafile. -The -.I addr -argument should be a pointer to a -.I dqinfo -structure. -This structure is defined in -.I <sys/quota.h> -as follows: -.IP -.in +4n -.EX -/* 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 */ -\& -/* Quota format QFMT_VFS_OLD */ -\& -#define DQF_ROOT_SQUASH (1 << 0) /* Root squash enabled */ - /* Before Linux v4.0, this had been defined - privately as V1_DQF_RSQUASH */ -\& -/* Quota format QFMT_VFS_V0 / QFMT_VFS_V1 */ -\& -#define DQF_SYS_FILE (1 << 16) /* Quota stored in - a system file */ -\& -/* Flags in dqi_valid that indicate which fields in - dqinfo structure are valid. */ -\& -#define IIF_BGRACE 1 -#define IIF_IGRACE 2 -#define IIF_FLAGS 4 -#define IIF_ALL (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS) -.EE -.in -.IP -The -.I dqi_valid -field in the -.I dqinfo -structure indicates the entries in the structure that are valid. -Currently, the kernel fills in all entries of the -.I dqinfo -structure and marks them all as valid in the -.I dqi_valid -field. -The -.I id -argument is ignored. -.TP -.BR Q_SETINFO " (since Linux 2.4.22)" -Set information about quotafile. -The -.I addr -argument should be a pointer to a -.I dqinfo -structure. -The -.I dqi_valid -field of the -.I dqinfo -structure indicates the entries in the structure -that have been set by the caller. -This operation supersedes the -.B Q_SETGRACE -and -.B Q_SETFLAGS -operations in the previous quota interfaces. -The -.I id -argument is ignored. -This operation requires privilege -.RB ( CAP_SYS_ADMIN ). -.TP -.BR Q_GETFMT " (since Linux 2.4.22)" -Get quota format used on the specified filesystem. -The -.I addr -argument should be a pointer to a 4-byte buffer -where the format number will be stored. -.TP -.B Q_SYNC -Update the on-disk copy of quota usages for a filesystem. -If -.I special -is NULL, then all filesystems with active quotas are sync'ed. -The -.I addr -and -.I id -arguments are ignored. -.TP -.BR Q_GETSTATS " (supported up to Linux 2.4.21)" -Get statistics and other generic information about the quota subsystem. -The -.I addr -argument should be a pointer to a -.I dqstats -structure in which data should be stored. -This structure is defined in -.IR <sys/quota.h> . -The -.I special -and -.I id -arguments are ignored. -.IP -This operation is obsolete and was removed in Linux 2.4.22. -Files in -.I /proc/sys/fs/quota/ -carry the information instead. -.P -For XFS filesystems making use of the XFS Quota Manager (XQM), -the above operations are bypassed and the following operations are used: -.TP -.B Q_XQUOTAON -Turn on quotas for an XFS filesystem. -XFS provides the ability to turn on/off quota limit enforcement -with quota accounting. -Therefore, XFS expects -.I addr -to be a pointer to an -.I "unsigned int" -that contains a bitwise combination of the following flags (defined in -.IR <xfs/xqm.h> ): -.IP -.in +4n -.EX -XFS_QUOTA_UDQ_ACCT /* User quota accounting */ -XFS_QUOTA_UDQ_ENFD /* User quota limits enforcement */ -XFS_QUOTA_GDQ_ACCT /* Group quota accounting */ -XFS_QUOTA_GDQ_ENFD /* Group quota limits enforcement */ -XFS_QUOTA_PDQ_ACCT /* Project quota accounting */ -XFS_QUOTA_PDQ_ENFD /* Project quota limits enforcement */ -.EE -.in -.IP -This operation requires privilege -.RB ( CAP_SYS_ADMIN ). -The -.I id -argument is ignored. -.TP -.B Q_XQUOTAOFF -Turn off quotas for an XFS filesystem. -As with -.BR Q_QUOTAON , -XFS filesystems expect a pointer to an -.I "unsigned int" -that specifies whether quota accounting and/or limit enforcement need -to be turned off (using the same flags as for -.B Q_XQUOTAON -operation). -This operation requires privilege -.RB ( CAP_SYS_ADMIN ). -The -.I id -argument is ignored. -.TP -.B Q_XGETQUOTA -Get disk quota limits and current usage for user -.IR id . -The -.I addr -argument is a pointer to an -.I fs_disk_quota -structure, which is defined in -.I <xfs/xqm.h> -as follows: -.IP -.in +4n -.EX -/* All the blk units are in BBs (Basic Blocks) of - 512 bytes. */ -\& -#define FS_DQUOT_VERSION 1 /* fs_disk_quota.d_version */ -\& -#define XFS_USER_QUOTA (1<<0) /* User quota type */ -#define XFS_PROJ_QUOTA (1<<1) /* Project quota type */ -#define XFS_GROUP_QUOTA (1<<2) /* Group quota type */ -\& -struct fs_disk_quota { - int8_t d_version; /* Version of this structure */ - int8_t d_flags; /* XFS_{USER,PROJ,GROUP}_QUOTA */ - uint16_t d_fieldmask; /* Field specifier */ - uint32_t d_id; /* User, project, or group ID */ - uint64_t d_blk_hardlimit; /* Absolute limit on - disk blocks */ - uint64_t d_blk_softlimit; /* Preferred limit on - disk blocks */ - uint64_t d_ino_hardlimit; /* Maximum # allocated - inodes */ - uint64_t d_ino_softlimit; /* Preferred inode limit */ - uint64_t d_bcount; /* # disk blocks owned by - the user */ - uint64_t d_icount; /* # inodes owned by the user */ - int32_t d_itimer; /* Zero if within inode limits */ - /* If not, we refuse service */ - int32_t d_btimer; /* Similar to above; for - disk blocks */ - uint16_t d_iwarns; /* # warnings issued with - respect to # of inodes */ - uint16_t d_bwarns; /* # warnings issued with - respect to disk blocks */ - int32_t d_padding2; /* Padding \- for future use */ - uint64_t d_rtb_hardlimit; /* Absolute limit on realtime - (RT) disk blocks */ - uint64_t d_rtb_softlimit; /* Preferred limit on RT - disk blocks */ - uint64_t d_rtbcount; /* # realtime blocks owned */ - int32_t d_rtbtimer; /* Similar to above; for RT - disk blocks */ - uint16_t d_rtbwarns; /* # warnings issued with - respect to RT disk blocks */ - int16_t d_padding3; /* Padding \- for future use */ - char d_padding4[8]; /* Yet more padding */ -}; -.EE -.in -.IP -Unprivileged users may retrieve only their own quotas; -a privileged user -.RB ( CAP_SYS_ADMIN ) -may retrieve the quotas of any user. -.TP -.BR Q_XGETNEXTQUOTA " (since Linux 4.6)" -.\" commit 8b37524962b9c54423374717786198f5c0820a28 -This operation is the same as -.BR Q_XGETQUOTA , -but it returns (in the -.I fs_disk_quota -structure pointed by -.IR addr ) -quota information for the next ID greater than or equal to -.I id -that has a quota set. -Note that since -.I fs_disk_quota -already has -.I q_id -field, no separate structure type is needed (in contrast with -.B Q_GETQUOTA -and -.B Q_GETNEXTQUOTA -operations) -.TP -.B Q_XSETQLIM -Set disk quota limits for user -.IR id . -The -.I addr -argument is a pointer to an -.I fs_disk_quota -structure. -This operation requires privilege -.RB ( CAP_SYS_ADMIN ). -.TP -.B Q_XGETQSTAT -Returns XFS filesystem-specific quota information in the -.I fs_quota_stat -structure pointed by -.IR addr . -This is useful for finding out how much space is used to store quota -information, and also to get the quota on/off status of a given local XFS -filesystem. -The -.I fs_quota_stat -structure itself is defined as follows: -.IP -.in +4n -.EX -#define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */ -\& -struct fs_qfilestat { - uint64_t qfs_ino; /* Inode number */ - uint64_t qfs_nblks; /* Number of BBs - 512\-byte\-blocks */ - uint32_t qfs_nextents; /* Number of extents */ -}; -\& -struct fs_quota_stat { - int8_t qs_version; /* Version number for - future changes */ - uint16_t qs_flags; /* XFS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */ - int8_t qs_pad; /* Unused */ - struct fs_qfilestat qs_uquota; /* User quota storage - information */ - struct fs_qfilestat qs_gquota; /* Group quota storage - information */ - uint32_t qs_incoredqs; /* Number of dquots in core */ - int32_t qs_btimelimit; /* Limit for blocks timer */ - int32_t qs_itimelimit; /* Limit for inodes timer */ - int32_t qs_rtbtimelimit;/* Limit for RT - blocks timer */ - uint16_t qs_bwarnlimit; /* Limit for # of warnings */ - uint16_t qs_iwarnlimit; /* Limit for # of warnings */ -}; -.EE -.in -.IP -The -.I id -argument is ignored. -.TP -.B Q_XGETQSTATV -Returns XFS filesystem-specific quota information in the -.I fs_quota_statv -pointed to by -.IR addr . -This version of the operation uses a structure with proper versioning support, -along with appropriate layout (all fields are naturally aligned) and -padding to avoiding special compat handling; -it also provides the ability to get statistics regarding -the project quota file. -The -.I fs_quota_statv -structure itself is defined as follows: -.IP -.in +4n -.EX -#define FS_QSTATV_VERSION1 1 /* fs_quota_statv.qs_version */ -\& -struct fs_qfilestatv { - uint64_t qfs_ino; /* Inode number */ - uint64_t qfs_nblks; /* Number of BBs - 512\-byte\-blocks */ - uint32_t qfs_nextents; /* Number of extents */ - uint32_t qfs_pad; /* Pad for 8\-byte alignment */ -}; -\& -struct fs_quota_statv { - int8_t qs_version; /* Version for future - changes */ - uint8_t qs_pad1; /* Pad for 16\-bit alignment */ - uint16_t qs_flags; /* XFS_QUOTA_.* flags */ - uint32_t qs_incoredqs; /* Number of dquots incore */ - struct fs_qfilestatv qs_uquota; /* User quota - information */ - struct fs_qfilestatv qs_gquota; /* Group quota - information */ - struct fs_qfilestatv qs_pquota; /* Project quota - information */ - int32_t qs_btimelimit; /* Limit for blocks timer */ - int32_t qs_itimelimit; /* Limit for inodes timer */ - int32_t qs_rtbtimelimit; /* Limit for RT blocks - timer */ - uint16_t qs_bwarnlimit; /* Limit for # of warnings */ - uint16_t qs_iwarnlimit; /* Limit for # of warnings */ - uint64_t qs_pad2[8]; /* For future proofing */ -}; -.EE -.in -.IP -The -.I qs_version -field of the structure should be filled with the version of the structure -supported by the callee (for now, only -.I FS_QSTAT_VERSION1 -is supported). -The kernel will fill the structure in accordance with -version provided. -The -.I id -argument is ignored. -.TP -.BR Q_XQUOTARM " (buggy until Linux 3.16)" -.\" 9da93f9b7cdf8ab28da6b364cdc1fafc8670b4dc -Free the disk space taken by disk quotas. -The -.I addr -argument should be a pointer to an -.I "unsigned int" -value containing flags (the same as in -.I d_flags -field of -.I fs_disk_quota -structure) -which identify what types of quota -should be removed. -(Note that the quota type passed in the -.I op -argument is ignored, but should remain valid in order to pass preliminary -quotactl syscall handler checks.) -.IP -Quotas must have already been turned off. -The -.I id -argument is ignored. -.TP -.BR Q_XQUOTASYNC " (since Linux 2.6.15; no-op since Linux 3.4)" -.\" Added in commit ee34807a65aa0c5911dc27682863afca780a003e -This operation was an XFS quota equivalent to -.BR Q_SYNC , -but it is no-op since Linux 3.4, -.\" 4b217ed9e30f94b6e8e5e262020ef0ceab6113af -as -.BR sync (1) -writes quota information to disk now -(in addition to the other filesystem metadata that it writes out). -The -.IR special ", " id " and " addr -arguments are ignored. -.SH RETURN VALUE -On success, -.BR quotactl () -returns 0; on error \-1 -is returned, and -.I errno -is set to indicate the error. -.SH ERRORS -.TP -.B EACCES -.I op -is -.BR Q_QUOTAON , -and the quota file pointed to by -.I addr -exists, but is not a regular file or -is not on the filesystem pointed to by -.IR special . -.TP -.B EBUSY -.I op -is -.BR Q_QUOTAON , -but another -.B Q_QUOTAON -had already been performed. -.TP -.B EFAULT -.I addr -or -.I special -is invalid. -.TP -.B EINVAL -.I op -or -.I type -is invalid. -.TP -.B EINVAL -.I op -is -.BR Q_QUOTAON , -but the specified quota file is corrupted. -.TP -.BR EINVAL " (since Linux 5.5)" -.\" 3dd4d40b420846dd35869ccc8f8627feef2cff32 -.I op -is -.BR Q_XQUOTARM , -but -.I addr -does not point to valid quota types. -.TP -.B ENOENT -The file specified by -.I special -or -.I addr -does not exist. -.TP -.B ENOSYS -The kernel has not been compiled with the -.B CONFIG_QUOTA -option. -.TP -.B ENOTBLK -.I special -is not a block device. -.TP -.B EPERM -The caller lacked the required privilege -.RB ( CAP_SYS_ADMIN ) -for the specified operation. -.TP -.B ERANGE -.I op -is -.BR Q_SETQUOTA , -but the specified limits are out of the range allowed by the quota format. -.TP -.B ESRCH -No disk quota is found for the indicated user. -Quotas have not been turned on for this filesystem. -.TP -.B ESRCH -.I op -is -.BR Q_QUOTAON , -but the specified quota format was not found. -.TP -.B ESRCH -.I op -is -.B Q_GETNEXTQUOTA -or -.BR Q_XGETNEXTQUOTA , -but there is no ID greater than or equal to -.I id -that has an active quota. -.SH NOTES -Instead of -.I <xfs/xqm.h> -one can use -.IR <linux/dqblk_xfs.h> , -taking into account that there are several naming discrepancies: -.IP \[bu] 3 -Quota enabling flags (of format -.BR XFS_QUOTA_[UGP]DQ_{ACCT,ENFD} ) -are defined without a leading "X", as -.BR FS_QUOTA_[UGP]DQ_{ACCT,ENFD} . -.IP \[bu] -The same is true for -.B XFS_{USER,GROUP,PROJ}_QUOTA -quota type flags, which are defined as -.BR FS_{USER,GROUP,PROJ}_QUOTA . -.IP \[bu] -The -.I dqblk_xfs.h -header file defines its own -.BR XQM_USRQUOTA , -.BR XQM_GRPQUOTA , -and -.B XQM_PRJQUOTA -constants for the available quota types, but their values are the same as for -constants without the -.B XQM_ -prefix. -.SH SEE ALSO -.BR quota (1), -.BR getrlimit (2), -.BR quotacheck (8), -.BR quotaon (8) |