How is disk space usage calculated?

Starting from DirectAdmin version 1.59.6, the new internal default config variable below will apply to all existing and new installs alike:

realtime_quota=2
1

This will make use of the system quotas to let Users see their usage in realtime. If set to 2, the panel will use fastest kernel-level quotactl function calls to get usage.

Other options:
realtime_quota=0 - for a nightly tally to update disk usage per user
realtime_quota=1 - for a slower binary 'quota -v username'

NOTE: DA needs the device names to pass to the quotactl call. This is done with the "mount" program, but for efficiency purposes, this is only done once at startup in the master process. This means that you'll need to be sure to restart DA to get an updated mount list if you make any changes to your partitions/quotas.

Inode counts are also updated in realtime with realtime_quota turned on.

SPECIFIC OS CASES

Use realtime_quota=2 when possible.

FreeBSD often does not have quotas compiled into the kernel. If that's the case, you cannot use 2. However, if that's the case, then you might as well stick with 0, as it's probably a nightly quotacheck cron anyway, so you'd gain nothing from realtime quotas. After testing back to FreeBSD 9, a value of 1 was the best that worked in these trials.

CentOS 5 "quota -v user" does not support "no-wrap" -w, so you must use 2.

CentOS 6/7 is fine with both 1 and 2, but the quota command does not support --show-mntpoint, so DA uses the block device lookup, which should already be cached anyway for mode 2. Use 2 for CentOS 6 when possible.

Debian 7+ works for both cases.

If you're noticing that the quotas returned seem to be too low, ensure the correct quota type is set in the directadmin.conf.

Check your mount of / (or /home), e.g.,

[root@server directadmin]# mount | grep ' / '
/dev/mapper/vg_es664-lv_root on / type xfs (rw,relatime,attr2,inode64,usrquota,prjquota)
1
2

If that's showing xfs, then ensure you're using use_xfs_quota=1 and change it to 1 if you are not:

cd /usr/local/directadmin
./directadmin c | grep use_xfs_quota
./directadmin set use_xfs_quota 1
service directadmin restart
1
2
3
4

If the mount shows ext4, and you see use_xfs_quota=1, then set it to 0.

Why is the used disk usage above the limit?

If you're wondering why a User might be using more space than is assigned to him in his disk usage limit, there are a few reasons:

  1. There is a soft limit and a hard limit. The hard limit will be 1.1x the value you set in DA. This is to allow some grace if files are too big. http://www.directadmin.com/features.php?id=918open in new window
    You can lower it to 1.0 if you prefer to not have any room for temporary overusage.

  2. Also, not all files counted by DA are governed under the system quotas, e.g.,

  • MySQL databases
  • Files owned by apache
  • Data for mailing lists
  • etc..

Since they're not chown'd to the User, they won't be under the system quotas, and thus are not enforced by the system quotas, even though DA does count them.

  1. If you want to suspend for overusage (not recommended), see the following: http://www.directadmin.com/features.php?id=713open in new window

What bandwidth does DirectAdmin calculate?

DirectAdmin will log all bandwidth that it is able to, but does not monitor at the device level and so is restricted to certain logs. All banwidth that is logged by DA must be able to be assigned to a specific user, then all user bandwidth totals are added up, thus giving the box total in DA. This value will always be lower than the device total since many things that cannot be assigned to one user will be in the device's count but not DAs.

What DirectAdmin does count:

  • Apache Usage: Any data sent out for a request on that User's domain. Logging for /~username traffic is also counted.
  • FTP Usage: Any files uploaded and downloaded are logged.
  • Outgoing Email: All outgoing email where DA is able to determine who sent the email is logged in /etc/virtual/usage/username.bytes.
  • Incoming Email: Any email that is addressed to a valid email account is counted in the username.bytes log. Forwarders, spam, and invalid accounts are not logged.
  • Pop/Imap: As of DA 1.40.0, if you're using dovecot, this data will be logged.
  • DirectAdmin: Everything DA-related is counted, including FTP downloads and uploads for backups (can be disabled).

What DirectAdmin does not count:

  • Data transfers from within scripts, such as uploads/downloads done by code within a script.
  • SSH level commands such as wget
  • Service updates using custombuild, yum, apt-get
  • The named (bind) dns service
  • Any low level network traffic, pings, etc.

Reseller bandwidth

DirectAdmin v1.595+

The reseller.usage will now log the bandwidth calculated from the Reseller's:

/usr/local/directadmin/data/users/RESELLER/bandwidth.reseller.tally

which is used to count the bandwidth used by a User prior to their deletion (so you're not also deleting the bandwidth usage).

A new field was added to the reseller.usage file, so it can be displayed to Admins when viewing the Reseller usage.

This count will be a subset of the total bandwidth already shown.

The variable in the reseller.usage file is:

deleted_user_bandwidth=123456
1

which, like the bandwidth option, is in Megabytes.

This value is only there for efficiency. It's recounted each night based on the bandwidth.reseller.tally file.

If the deleted_user_bandwidth= value is missing or 0, then the field will not be shown.

The monthly reset clears the bandwidth.reseller.tally file for anyone whose deletion time is within the previous stats window.

Notifying users about overusage

User Limit Templates

Message system email templates used for notifying Users and Resellers about overusage exist here:

/usr/local/directadmin/data/templates/user_limit.txt

/usr/local/directadmin/data/templates/reseller_limit.txt

Tokens include:

SUSPENDATLIMIT
LANG
BANDWIDTHUSAGEGIG
BANDWIDTHLIMITGIG
QUOTAUSAGEGIG
QUOTALIMITGIG
TIMELEFT
BANDWIDTH_MAY_RUN_OUT
DAYS_REMAINING_THIS_MONTH
REASON=quota|bandwidth|inode
INODE
INODELIMIT
INODEUSAGE
BANDWIDTH_EXCEEDED=yes
QUOTA_EXCEEDED=yes
INODES_EXCEEDED=yes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

The "exceeded" wording in the tokens above refers to the threshold in order to generate the warning email, not necessarily a 100% usage, but the following directadmin.conf settings in percents:

user_warning_thresh=80
user_warning_thresh_disk=95
user_warning_thresh_inode=95
1
2
3

Per-Reseller Checks

Per-Reseller user_limit.txt checks are allowed. The check order is as follows:

  1. /usr/local/directadmin/data/users/CREATOR/user_limit.txt
  2. /usr/local/directadmin/data/data/templates/custom/user_limit.txt
  3. /usr/local/directadmin/data/data/templates/user_limit.txt

Pre/Post scripts:

The custom script to be called after a warning/notice email is sent out is:

/usr/local/directadmin/scripts/custom/overusage_notice_post.sh

The custom script to be called before a warning/notice email is sent out is:

/usr/local/directadmin/scripts/custom/overusage_notice_pre.sh

Environmental variables available for these pre/post scripts include:

USERNAME
BANDWIDTH
QUOTA
BANDWIDTHLIMITGIG
BANDWIDTHUSAGEGIG
BANDWIDTHLIMITMEG
BANDWIDTHUSAGEMEG
QUOTALIMITGIG
QUOTAUSAGEGIG
QUOTALIMITMEG
QUOTAUSAGEMEG
TIMELEFT
SUSPENDATLIMIT
CREATOR
LANG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Disabling overusage notices if the account is suspended

There are three variables to be used in the user.conf file:

sentwarning_bandwidth=yes|no
sentwarning_inode=yes|no
sentwarning_quota=yes|no
1
2
3

which are used to determine if an overusage notice on specified resource was sent or not.

When an Admin or Reseller manually suspends an account, this will also set account=OFF in the user.conf file, so the overusage warning messages for such accounts aren't sent.

The sentwarning=yes will not be set in the user.conf, allowing it to be sent at a later date should the account=ON be set later on.

The custom overusage_notice_post.sh script will still be called, if it exists.

Bandwidth breakdown for previous months

Since we already have the bandwidth.tally.cache file, just before the monthly reset, save a copy of this file for future viewing. This will allow comparisons between past months.

Will have a new folder: /usr/local/directadmin/data/users/username/history and each file would be called YYYY-MM.log: 2019-09.log

Note that the creation of this log is not merely a file copy. Instead it's a smart merge, in case the reset is run many times.

Only the last months data will be set there. For the current month, use the normal "Details" button on your stats page.

To view these history files, they'll be under the "User History" button. If more than 0 files exist in the "history" directory, a new "Details" column will be added to the User History page, where a JS pop-up will show the previous months.

The CMD_API_BANDWIDTH_BREAKDOWN URI will be able to use this as well. Just add year=2012&month=9 to the end of your call (either the ?user=user method, or the "self" method with no "user").

Last Updated: 6/23/2021, 9:36:08 PM