Troubleshooting: Configure User Quotas on XFS File Systems Using Ansible

Learn how to resolve the common error related to user quota configuration on XFS file systems with Ansible.


Error Summary

When attempting to configure user quotas on an XFS file system with Ansible, you might encounter the following error:

TASK [Configure user quotas for "devops" on /] *****************************************
fatal: [debian.example.com]: FAILED! => {"changed": false, "msg": "Path '/' is not mounted with the uquota/usrquota/quota/uqnoenforce/qnoenforce option."}

This error occurs because the root file system / is not mounted with the necessary options (usrquota and grpquota) required to enable quota tracking.


Root Cause

The XFS file system requires specific mount options (usrquota, grpquota) for quotas to function. Without these options, the kernel cannot track or enforce disk usage limits.


Solution: Enable Quota Support for XFS

1. Verify Current Mount Options

Use the mount command to confirm the current mount options for the root file system:

mount | grep ' / '

Example output:

/dev/nvme0n1p2 on / type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)

2. Update /etc/fstab to Add Quota Options

Edit /etc/fstab to include the usrquota and grpquota options:

UUID=1f46e518-142f-4d88-ae7f-cf401c9e7dd0 / xfs defaults,usrquota,grpquota 0 0

3. Remount the File System

Apply the updated mount options by remounting the file system:

mount -o remount /

4. Enable Quota Management

Use the xfs_quota tool to enable quotas on the file system:

xfs_quota -x -c 'quota enable' /

5. Set User Quotas

Set specific disk usage limits for a user (e.g., devops):

xfs_quota -x -c 'limit bsoft=2G bhard=3G devops' /

6. Verify Quota Configuration

Check the quota status for all users:

xfs_quota -x -c 'report' /

Automating the Process with Ansible

Update your Ansible playbook to automate the configuration of quotas on XFS file systems.

Example Playbook:

- name: Configure user quotas on XFS
  hosts: all
  become: yes
  tasks:
    - name: Ensure quota package is installed
      apt:
        name: quota
        state: present

    - name: Update fstab for quota support
      lineinfile:
        path: /etc/fstab
        regexp: '^UUID=1f46e518-142f-4d88-ae7f-cf401c9e7dd0'
        line: 'UUID=1f46e518-142f-4d88-ae7f-cf401c9e7dd0 / xfs defaults,usrquota,grpquota 0 0'
        backrefs: yes

    - name: Remount root file system with quota options
      command: mount -o remount /

    - name: Enable quotas
      command: xfs_quota -x -c 'quota enable' /

    - name: Set quota limits for devops user
      command: xfs_quota -x -c 'limit bsoft=2G bhard=3G devops' /

Testing the Playbook

Run the playbook to apply the configuration:

ansible-playbook configure-xfs-quotas.yml

Conclusion

Configuring user quotas on XFS file systems requires enabling specific mount options and initializing quota management. By incorporating these steps into your Ansible playbooks, you can automate the process and avoid quota-related errors, ensuring efficient disk usage management across your infrastructure.