Disk Quotas on Ubuntu to Manage User Storage

By Anurag Singh

Updated on May 20, 2025

Disk Quotas on Ubuntu to Manage User Storage

In this tutorial, We'll discuss disk quotas on Ubuntu to manage user storage.

Implementing Disk Quotas on Ubuntu to Manage User Storage

Managing storage effectively is crucial to ensuring fair resource allocation and maintaining server stability. Implementing disk quotas on Ubuntu servers allows us to efficiently control how much storage space each user can occupy. By setting disk quotas, we prevent any single user from consuming excessive disk space, which could negatively impact other users hosted on the same server. We will guide through the step-by-step process of configuring disk quotas on an Ubuntu server.

Why Disk Quotas Are Important

As a hosting provider, we frequently deal with a diverse range of users, each having unique storage needs. Without disk quotas, some users might inadvertently (or intentionally) consume more space than allocated, potentially leading to system slowdowns, resource exhaustion, and degraded server performance. Disk quotas help us proactively manage these scenarios, ensuring all users have fair and sufficient access to server resources.

Prerequisites

Before proceeding, make sure you have the following in place:

Disk Quotas on Ubuntu to Manage User Storage

Step 1: Installing Quota Management Tools

Ubuntu typically does not come with quota management tools pre-installed. We'll first install these tools with the following command:

sudo apt update
sudo apt install quota

Step 2: Preparing Filesystem for Disk Quotas

Follow this step if you have /home filesystem in your fstab.

We need to enable disk quota support on the filesystem where user data is stored. Typically, this is the /home directory. We'll edit the filesystem options in /etc/fstab:

Open /etc/fstab in a text editor:

sudo nano /etc/fstab

Find the entry for the partition containing /home. Modify it by adding the options usrquota and grpquota. An example line should look like this:

UUID=xxxx-xxxx  /home  ext4  defaults,usrquota,grpquota  0  2

Save and close the file.

To apply these changes, we need to remount the filesystem:

sudo mount -o remount /home

Follow these steps if you don't have /home filesystem in your fstab

Edit your /etc/fstab:

Find this line:

/dev/disk/by-uuid/af574f85-0c08-4c97-a460-dc899ba87a80 / ext4 defaults 0 1

Add usrquota,grpquota to the options:

Change it to:

/dev/disk/by-uuid/af574f85-0c08-4c97-a460-dc899ba87a80 / ext4 defaults,usrquota,grpquota 0 1

Save and close the file.

Since the quotas are now enabled for /, run:

sudo mount -o remount /

Step 3: Initializing Quota Database Files

Follow for /home filesystem

Next, we'll generate the quota database files required to manage disk usage:

sudo quotacheck -cum /home
sudo quotaon /home

Here:

quotacheck scans the filesystem and creates quota databases.
quotaon activates quotas on the specified filesystem.

Follow for root filesystem

Now, continue the tutorial steps, but use / (not /home) for all quota commands:

sudo quotacheck -cum /
sudo quotaon /

Step 4: Setting Disk Quotas for Users

Now, we can set storage limits for specific users. The disk quota can be set in two ways:

  • Soft Limit: Users receive a warning when exceeding the soft limit but can temporarily continue writing data.
  • Hard Limit: Users cannot exceed the hard limit under any circumstance.

For example, to set quotas for a user named exampleuser, we execute:

sudo edquota -u exampleuser

This command opens a quota file in an editor, similar to:

Disk quotas for user exampleuser (uid 1001):
  Filesystem   blocks   soft   hard   inodes   soft   hard
  /dev/sda1     2048       0      0       10      0      0

Here, we set the soft and hard limits (in blocks, where each block is typically 1KB). For example, to restrict the user to 1GB soft limit (approximately 1,000,000 blocks) and 1.2GB hard limit (approximately 1,200,000 blocks), the file should appear as:

Disk quotas for user exampleuser (uid 1001):
  Filesystem   blocks     soft      hard   inodes   soft   hard
/dev/sda1     2048  1000000   1200000       10      0      0

Save and close the editor after entering the values.

Step 5: Viewing Quota Status and Usage

To monitor quotas and ensure they are working correctly, we use:

sudo repquota -a

This command outputs a detailed list of all users' quotas, current usage, soft and hard limits, and any exceeded quotas.

Example output:

*** Report for user quotas on device /dev/sda1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                  File limits
User            used    soft    hard  grace    used  soft  hard  grace
---------------------------------------------------------------------- 
exampleuser    2048 1000000 1200000            10     0     0

Step 6: Adjusting Grace Period

If a user surpasses their soft limit, they have a predefined "grace period" during which they can continue to use storage before the soft limit becomes enforced. We can adjust this grace period:

sudo edquota -t

Modify grace periods (typically set as days):

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/sda1                    7days                  7days

Change as desired and save.

Tips for Managing Disk Quotas Effectively

  • Regularly check disk quotas with repquota.
  • Set realistic limits that balance user needs with server performance.
  • Notify users proactively about approaching their limits to prevent unexpected interruptions.

Final Thoughts

In this tutorial, We've discussed disk quotas on Ubuntu to manage user storage. Implementing disk quotas is a best practice that significantly enhances our ability to maintain stable, responsive, and equitable hosting services. Regularly monitoring and adjusting disk quotas ensures our servers remain healthy, our users satisfied, and our business reliable.

By following this guide, we maintain optimal resource allocation, keeping both our servers and our customers happy and productive.