Quick HOWTO : Ch28 : Managing Disk Usage with Quotas
From Linux Home Networking
You may eventually need to restrict the amount of disk space used on each partition by each user or group of users as your disk drives become filled with data. The disk quota feature of RedHat/Fedora Linux enables you to do this, and the setup is fairly simple.
Setting Up Quotas
For example, your family Linux server is running out of space in the /home filesystem because of an abundance of MP3 downloads.
Enter Single-User Mode
As you'll need to remount the /home filesystem, you make sure that no other users or processes are using it by first entering single-user mode from the console. If you are certain that you're the only user on the system, you might be able to skip this step. Entering single-user mode automatically logs off all users and stops cron jobs, so wait until after hours to do in a business environment. The procedure is quick:
1) Use the who command to see which users are logged in. If there are any, besides yourself, send a message stating that the system is about to shutdown with the wall command:
[root@bigboy tmp]# who root pts/0 Nov 6 14:46 (192-168-1-242.my-site.com) bob pts/0 Nov 6 12:01 (192-168-1-248.my-site.com) bunny pts/0 Nov 6 16:25 (192-168-1-250.my-site.com) [root@bigboy tmp]# wall The system is shutting down now! Broadcast message from root (pts/0) (Sun Nov 7 15:04:27 2004): The system is shutting down now! [root@bigboy tmp]#
2) Log into the VGA console and enter single user mode.
[root@bigboy tmp]# init 1
Edit Your /etc/fstab File
The /etc/fstab file lists all the partitions that need to be auto-mounted when the system boots. You have to alert Linux that quotas are enabled on the filesystem by editing the /etc/fstab file and modifying the options for the /home directory. You'll need to add the usrquota option. In case you forget the name, the usrquota option is mentioned in the fstab man pages.
The old /etc/fstab looked like
LABEL=/home /home ext3 defaults 1 2
but your new /etc/fstab should be
LABEL=/home /home ext3 defaults,usrquota 1 2
Remount The Filesystem
Editing the /etc/fstab file isn't enough, Linux needs to reread the file to get its instructions for /home. You can do this using the mount command with the -o remount qualifier.
bash-2.05b# mount -o remount /home
Get Out of Single-user Mode
Return to your original run state by using either the exit, init 3 or init 5 commands. Continue to the next step once the system is back to its normal state. You can also use the exit command to return to your default runlevel.
Create The Partition Quota Configuration Files
The uppermost directory of the filesystem needs to have an aquota.user file (defines quotas by user) and an aquota.group file (defines quotas by group), or both. The man page for quota lists them at the bottom. In this case just enable per-user quotas for the /home filesystem.
[root@bigboy tmp]# touch /home/aquota.user
[root@bigboy tmp]# chmod 600 /home/aquota.user [root@bigboy tmp]#
Initialize The Quota Table
Editing the /etc/fstab file and remounting the file system only alerted Linux to the fact that the filesystem has quota capabilities. You have to generate a quota table, separate from the aquota files, that lists all the current allocations for each user on the file system. This table will be automatically and transparently updated each time a file is modified. Linux compares the values in this table with the quota limitations that the systems administrator has placed in the aquota files and uses this information to determine whether the user has rights to increased disk usage. You initialize the table with the quotacheck command. Be prepared: You'll get an error the first time you enter the command, because Linux will realize that the aquota file wasn't created using one of the quota commands:
[root@bigboy tmp]# quotacheck -vagum quotacheck: WARNING - Quotafile /home/aquota.user was probably truncated. Can't save quota settings... quotacheck: Scanning /dev/hda3 [/home] done quotacheck: Checked 185 directories and 926 files [root@bigboy tmp]#
Edit The User's Quota Information
Now you need to edit the user's quota information. The edquota command enables you to selectively edit a portion of the aquota.user file on a per-user basis:
[root@bigboy tmp]# edquota -u mp3user
The command will invoke the vi editor.
Disk quotas for user mp3user (uid 503): Filesystem blocks soft hard inodes soft hard /dev/hda3 24 0 0 7 0 0
From here, you can edit a number of fields:
Here user mp3user is limited to a maximum of 5MB of data storage on /dev/hda3 (/home):
Disk quotas for user mp3user (uid 503):
Filesystem blocks soft hard inodes soft hard /dev/hda3 24 5000 0 7 0 0
Linux checks the total amount of disk space a user uses each time a file is accessed and compares it against the values in the quota file. If the values are exceeded, depending on the configuration, then Linux prevents the creation of new files or the expansion of existing files to use more disk space.
Other Quota Topics
Creating disk quotas frequently isn't enough. You also have to manage the process by reviewing the quota needs of each user and adjusting them according to the policies of your company. You'll need to make Linux scan its hard disks periodically to check for exceeded quotas. This section describes the most common quota management activities.
Editing Grace Periods
The edquota -t command sets the grace period for each filesystem. Like the edquota -u command, it invokes the vi editor.
The grace period is a time limit before the soft limit is enforced for a quota-enabled file system. You can use time units of seconds, minutes, hours, days, weeks, and months. This is what you'll see with the command edquota -t.
[root@bigboy tmp]# edquota -t
Grace period before enforcing soft limits for users: Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period /dev/hda3 7days 7days
Note: There should be no spaces between the number and the unit of time measure. Therefore in this example, "7days" is correct and "7 days" is wrong.
Editing Group Quotas
Editing quotas on a per-group basis can be done similarly with the edquota -g command.
Getting Quota Reports
The repquota command lists quota usage limits of all users on the system. Here is an example.
[root@bigboy tmp]# repquota /home *** Report for user quotas on device /dev/hda3 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 52696 0 0 1015 0 0 ... ... ... mp3user -- 24 0 0 7 0 0 [root@bigboy tmp]#
Disk quotas are good to put in place for specific users whose disk usage activities need to be curtailed. It helps to not only limit the use of physical disk resources that could potentially be put to better use, but also reduces the likelihood of having fragmented disk structures that slow disk access due to the presence of too many files. User education must play a major role in your strategy too; users must be made aware of the challenges you face as a result of excessive disk usage. Of course, there comes a time when you are faced with no option but to expand the number of disks in your system. Chapter 27, "Expanding Disk Capacity", covers a variety of approaches to increasing your storage capacity.