# BeeGFS Quota Tests
-----
## Test Environment
* Host `vm-master`
* CentOS Linux 8.4.2105
* Kernel 4.18.0-305.7.1.el8_4.x86_64
* `firewalld` disabled
* SELinux disabled
* Package group "Development Tools" installed
* gcc 8.4.1 20200928 (Red Hat 8.4.1-1)
* BeeGFS 7.2.3
* Client
* Host `vm-storage`
* CentOS Linux 8.4.2105
* Kernel 4.18.0-305.7.1.el8_4.x86_64
* `firewalld` disabled
* SELinux disabled
* Package group "Development Tools" installed
* gcc 8.4.1 20200928 (Red Hat 8.4.1-1)
* BeeGFS 7.2.3
* Metadata (ext4 filesystem)
* Storage (xfs filesystem)
-----
## Key Points during Setup
From BeeGFS documentation:
> BeeGFS quota management relies on quota data provided by the **underlying file systems of storage server targets**.
>
> ...
>
> Quota tracking is designed to generally work with any underlying local file system on the storage servers that supports user and group quota ... but has only been **fully tested** with **ext4**, **XFS**, and **ZFS**.
For **ext4** filesystem, use the mount options `usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv1`.
For **XFS** filesystem, use the mount options `uqnoenforce,gqnoenforce`.
References:
* [BeeGFS Quota Management](https://doc.beegfs.io/latest/advanced_topics/quota.html)
* [ext4 Manual Page](https://man7.org/linux/man-pages/man5/ext4.5.html#MOUNT_OPTIONS)
* [xfs Manual Page](https://man7.org/linux/man-pages/man5/xfs.5.html#MOUNT_OPTIONS)
```
[alice@vm-storage ~]$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 vfat E149-39FC /boot/efi
├─sda2 xfs a4a9d540-ca25-4e02-96b5-368b4fbab172 /boot
└─sda3 LVM2_member ZC7437-RiWy-vFcK-nvee-2SPd-49l1-2Eo5TN
├─cl-root xfs ea6f8c18-e737-4566-9a1d-178ddaba6c81 /
└─cl-swap swap 6b1ae7f3-9470-46d5-a1e1-3047c06ca3df [SWAP]
sdb
├─sdb1 ext4 dfd7b4e8-24bd-475e-b6eb-834959ff9ae3 /mnt/beegfs/meta
└─sdb2 xfs e4045e0f-dc7b-4fe7-ae01-fbfad06881ef /mnt/beegfs/stor
[alice@vm-storage ~]$ cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Jul 2 16:26:04 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=a4a9d540-ca25-4e02-96b5-368b4fbab172 /boot xfs defaults 0 0
UUID=E149-39FC /boot/efi vfat umask=0077,shortname=winnt 0 2
/dev/mapper/cl-swap none swap defaults 0 0
UUID=dfd7b4e8-24bd-475e-b6eb-834959ff9ae3 /mnt/beegfs/meta ext4 defaults,nofail 0 0
UUID=e4045e0f-dc7b-4fe7-ae01-fbfad06881ef /mnt/beegfs/stor xfs defaults,uqnoenforce,gqnoenforce,nofail 0 0
```
-----
## Results
```
[alice@vm-master quota-test]$ id
uid=1000(alice) gid=1000(alice) groups=1000(alice),10(wheel)
[alice@vm-master quota-test]$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 858M 0 858M 0% /dev
tmpfs tmpfs 877M 0 877M 0% /dev/shm
tmpfs tmpfs 877M 17M 860M 2% /run
tmpfs tmpfs 877M 0 877M 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 28G 3.0G 25G 11% /
/dev/sda2 xfs 1014M 254M 761M 25% /boot
/dev/sda1 vfat 599M 7.3M 592M 2% /boot/efi
vm-storage:/nfsopt nfs4 28G 3.0G 25G 11% /mnt/opt
beegfs_nodev beegfs 28G 232M 28G 1% /mnt/beegfs
tmpfs tmpfs 176M 0 176M 0% /run/user/1000
[alice@vm-master quota-test]$ pwd
/mnt/beegfs/quota-test
[alice@vm-master quota-test]$ beegfs-ctl --getquota --defaultlimits
Quota information for storage pool Default (ID: 1):
user size limit: 1024.00 MiB
user chunk files limit: unlimited
group size limit: unlimited
group chunk files: unlimited
[alice@vm-master quota-test]$ ls -l
total 0
[alice@vm-master quota-test]$ dd if=/dev/zero of=./zeros.bin bs=1024 count=1048576
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.58403 s, 192 MB/s
[alice@vm-master quota-test]$ ls -l
total 1048576
-rw-rw-r-- 1 alice alice 1073741824 Jul 8 01:40 zeros.bin
[alice@vm-master quota-test]$ beegfs-ctl --getquota --uid alice
Quota information for storage pool Default (ID: 1):
user/group || size || chunk files
name | id || used | hard || used | hard
--------------|------||------------|------------||---------|---------
alice| 1000|| 1024.00 MiB| 1024.00 MiB|| 1|unlimited
[alice@vm-master quota-test]$ dd if=/dev/zero of=./zeros_.bin bs=1024 count=1024
dd: error writing './zeros_.bin': Disk quota exceeded
dd: closing output file './zeros_.bin': Disk quota exceeded
```
-----
## Summary
Yes, it works!