Subject: Context disk quotas
From: vitalyb <vitalyvb@ukr.net>
Date: Sun, 16 Mar 2008 15:57:40 +0200
Hello,
I have a problem setting up quotas inside of vservers.
Looks like kernel ignores XID while updating /aquota.* files or
quota tools aren't working correctly.
Tested with these setups:
1) Linux 2.6.22.19 + 2.6.22.18-vs2.2.0.6-grsec2.1.11-20080212
2) Linux 2.6.22.19 + 2.6.22.19-vs2.2.0.7
VServer config:
# CONFIG_VSERVER_LEGACY is not set
# CONFIG_VSERVER_LEGACYNET is not set
# CONFIG_VSERVER_REMAP_SADDR is not set
CONFIG_VSERVER_COWBL=y
# CONFIG_VSERVER_VTIME is not set
CONFIG_VSERVER_PROC_SECURE=y
CONFIG_VSERVER_HARDCPU=y
CONFIG_VSERVER_IDLETIME=y
# CONFIG_VSERVER_IDLELIMIT is not set
# CONFIG_TAGGING_NONE is not set
# CONFIG_TAGGING_UID16 is not set
# CONFIG_TAGGING_GID16 is not set
CONFIG_TAGGING_ID24=y
# CONFIG_TAGGING_INTERN is not set
# CONFIG_TAG_NFSD is not set
# CONFIG_PROPAGATE is not set
CONFIG_VSERVER_PRIVACY=y
CONFIG_VSERVER_CONTEXTS=768
CONFIG_VSERVER_WARN=y
# CONFIG_VSERVER_DEBUG is not set
CONFIG_VSERVER=y
CONFIG_VSERVER_SECURITY=y
CONFIG_VSERVER_NGNET=y
Test:
-------------------------------------------------------------------
# ./testfs.sh -l -t -D /dev/loop0 -M /mnt
Linux-VServer FS Test [V0.18] Copyright (C) 2005-2007 H.Poetzl
Linux 2.6.22.19-grsec-vs x86_64/0.30.214
VCI: 0002:0200 236 030007b1 (ID24)
---
testing ext2 filesystem ...
[000]. [001]. [002]. [999].
---
testing ext3 filesystem ...
[000]. [001]. [002]. [999].
---
testing xfs filesystem ...
[000]* (xfs format failed)
---
testing reiser filesystem ...
[000]* (reiserfs format failed)
---
testing jfs filesystem ...
[000]* (jfs format failed)
-------------------------------------------------------------------
# ./testfs.sh -t -D /dev/loop0 -M /mnt/tst/
Linux-VServer FS Test [V0.18] Copyright (C) 2005-2007 H.Poetzl
Linux 2.6.22.19-grsec-vs x86_64/0.30.214
VCI: 0002:0200 236 030007b1 (ID24)
---
testing ext2 filesystem ...
[000]. [001]. [002]. [999].
---
testing ext3 filesystem ...
[000]. [001]. [002]. [999].
---
testing xfs filesystem ...
[000]* (xfs format failed)
---
testing reiser filesystem ...
[000]* (reiserfs format failed)
---
testing jfs filesystem ...
[000]* (jfs format failed)
-------------------------------------------------------------------
# ./testme.sh
Linux-VServer Test [V0.17] Copyright (C) 2003-2006 H.Poetzl
chcontext is working.
chbind is working.
Linux 2.6.22.19-grsec-vs #3 SMP Sat Mar 15 22:46:19 EET 2008 x86_64
Ea 0.30.214 236/glibc (DSa) <v13,net,v21,v22,v23,netv2>
VCI: 0002:0200 236 030007b1 (TbsPHIW)
---
[000]# succeeded.
[001]# succeeded.
[011]# succeeded.
[031]# succeeded.
[101]# succeeded.
[102]# succeeded.
[201]# succeeded.
[202]# succeeded.
-------------------------------------------------------------------
Problem description:
files are tagged with chxid, context 1001
> host# quota -V
> Quota utilities version 3.14.
> Compiled with EXT2_DIRECT
> host# quotacheck /mnt
> host# quotaon /mnt
> host# repquota /mnt
>
> *** Report for user quotas on device /dev/mapper/storage-hosting
> Block grace time: 7days; Inode grace time: 7days
> Block limits File limits
> User used soft hard grace used soft hard grace
> ----------------------------------------------------------------------
> root -- 134224 0 0 5 0 0
> #50331648 -- 15956 0 0 70 0 0
> #50341673 -- 12 0 0 3 0 0
> #50341706 -- 12 0 0 3 0 0
> #50341739 -- 12 0 0 3 0 0
> ....... etc,etc,etc
User ids are weird because of tagging, I believe, for example,
50331648 = 0x3000000 -> uid 0
Is this the way it supposed to be?
next, let's create some files
> vs# dd if=/dev/zero bs=1M count=100 of=file1
> vs# chown 10001 file
> host# repquota /mnt
> Block grace time: 7days; Inode grace time: 7days
> Block limits File limits
> User used soft hard grace used soft hard grace
> ----------------------------------------------------------------------
> root -- 134224 0 0 5 0 0
> #50331648 -- 15956 0 0 70 0 0
> #50341673 -- 12 0 0 3 0 0
> ...
> #10001 -- 102504 0 0 1 0 0
> ...
using vroot device everything's the same and
> vs# repquota -n /dev/hd
> Block grace time: 7days; Inode grace time: 7days
> Block limits File limits
> User used soft hard grace used soft hard grace
> ----------------------------------------------------------------------
> #0 -- 134224 0 0 5 0 0
> #50331648 -- 15956 0 0 70 0 0
> ...
> #10001 -- 102504 0 0 1 0 0
> ...
next,
> host# quotaoff /mnt
> host# quotacheck /mnt
> host# quotao /mnt
> host# repquota /mnt
> root -- 134220 0 0 4 0 0
> #50331648 -- 15960 0 0 71 0 0
> ...
> #50341649 -- 102532 0 0 8 0 0
> ...
Compiling quota without EXT2_DIRECT support makes quotacheck produce
real uids without xid part, but, again, quota does not account xid
values and calculate quotas per uid only.
So, what am I missing? Is there a way to make context quotas work
on a shared partition without sharing quota between same uids
on different vservers?
Thanks!
--
Regards,
Vitaly