the commands used for xfs are different. this is only valid for ext3/ext4.

preparation: you should move your /home to a separate partition.

Warning! You will need to have „physical“ access to the server’s console in order to perform these steps – remote login via ssh won’t be enough (init 1 – no ssh in rescue mode)

lets go

will configure a disk-quota for user „user“ on ext3 partition /dev/sdb1 mounted as /home

su; # become root
apt-get update; # update repo
apt-get install quota quotatool; # install software

vim /etc/fstab; # open up mount config file
/dev/sdb1       /home                                   ext3 quota,usrquota,relatime,errors=remount-ro 0 1
                                                              \_add this \_and that
init 1; # single-user, maintenance mode, all networking and ssh will be stopped

type in root password to get a promt/shell/terminal:

this sub-window can be scrolled!

umount /home; # try to unmount home
"target is busy"
lsof|grep home; # check processes using /home
bash  1305
kill -9 1305; # kill all processes using /home

umount /home; # try to unmount home, again, should work now
mount -a; # remount according to fstab with quota enabled

 mount |grep home; # you now should see
/dev/sdb1 on /home type ext3 (rw,relatime,quota,usrquota,errors=remount-ro,data=ordered)
                                            \______\___partition was mounted with quota-feature enabled
quotacheck -aug; # generate /home/aquota.user /home/ (if you want group-wise-quota, also needs to be put into fstab)

/etc/init.d/quota restart; # restart quota service

blockdev --getbsz /dev/sdb1; # view blocksize of partition
4096 (ext3 default size 4KByte)

edquota -u user; # set quota for user "user"

Disk quotas for user user (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                      1548     100.000    120.000        159        0        0
                                   \_ in use \ by user right now
                                              \_soft limit / hard limit 120.000 Blocks ~120 MByte

edquota -p user `awk -F: '$3 > 1000 {print $1}' /etc/passwd`; # if you want the same quota settings for all other users with UID larger than 1000

edquota -t; # change grace period

quotaon -a; # switch quota on - whatever this does

quotacheck -avugm; # whatever this does :-D

view quotas:

root@debian:~# repquota /home

*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
root      --      56       0       0              9     0     0
user      --    1536  100000  120000            158     0     0
maria     --      20  100000  120000              5     0     0

# reboot, test and be happy! :-D

test quota

# as non-root user "user" try to exhaust your quota by generating a 1GByte test file
user@debian:~$ dd if=/dev/urandom of=1GBybe.testfile bs=64M count=16 iflag=fullblock; # generate 1GByte test file that

contains random data
sdb1: warning, user block quota exceeded.
sdb1: write failed, user block limit reached.
dd: error writing ‘1GBybe.testfile’: Disk quota exceeded
2+0 records in
1+0 records out
121184256 bytes (121 MB) copied, 11.9736 s, 10.1 MB/s

# the user itself can check - if a quota is set - and status of his/her quota
user@debian:~$ quota
Disk quotas for user user (uid 1000):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1  120000*  100000  120000   7days     159       0       0
                     \___ hard limit of quota reached

user@debian:~$ rm 1GBybe.testfile; # remove test file

user@debian:~$ quota
Disk quotas for user user (uid 1000):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1    1536  100000  120000             157       0       0
                     \______\___ 98464 blocks of space left, before soft-quota is reached

dd if=/dev/urandom of=64MByte.testfile bs=64M count=1 iflag=fullblock; # generate 1GByte test file that

user@debian:~$ stat 64MByte.testfile
  File: ‘64MByte.testfile’
  Size: 67108864        Blocks: 131208     IO Block: 4096   regular file
Device: 811h/2065d      Inode: 262207      Links: 1

# 67108864/131208 = on average 511Bytes per 1x4096Byte-Block is used. what a waste :-D


soft-quota and hard-quota

soft-quota is a soft-limit – user will be warned that he/she is over quota – but can continue writing to disk until hard-limit is reached.

grace time of 7 days means – if the user stays over soft-quota for 7 days – user’s soft limit will become user’s hard limit.

it is possible that without Administrator – user can not login anymore. (no space left to write to)