如果您在Linux计算机上,并且拥有一个激活的用户配额的文件系统,则可以通过以下命令检查quotacheck是否可以通过绑定挂接达到多次计算文件(如果这些绑定挂载的源和目标两者都驻留在quotacheck访问的文件系统上):
# we assume /home has active user-quota repquota /home # check used quota before changes mkdir /home/test_user/dir mkdir /home/other_dir mount -o bind /home/test_user/dir /home/other_dir head -c1000000 /dev/urandom > /home/test_user/dir/test chown test_user /home/test_user/dir/test repquota /home # repquota now reports 1000000 bytes more for test_user # umount /home/test_user/dir # possible solution quotaoff -a quotacheck -vuam quotaon -a # mount -o bind /home/test_user/dir /home/other_dir # possible solution repquota /home # repquota now reports 2000000 bytes more for test_user
我能想到的唯一解决scheme是在执行quotacheck之前umount所有绑定安装的目录,然后重新装入它们。 还有其他解决scheme吗? 从绑定安装的目录中删除usrquota选项似乎不起作用(不感到惊讶,不要麻烦解释它)。 排除某些目录被quotacheck访问似乎不可能(手册页没有提及任何相关的选项)。 顺便说一下,我testing了这个在Debian 8(内核3.16.0,配额4.01)。
澄清 :除了绑定之外, /home下的所有内容都属于单个文件系统。
你有一个非常有趣的问题。 看起来没有任何选项可以忽略目录。 可能您需要更改quotacheck作业,并为每卷忽略绑定的作业运行。 你可以用findmnt来获得绑定卷的列表,如下所示:
findmnt | awk '$2 ~ /\[.*\]$/'
所以可能你的cron工作可能是这样的
findmnt --noheadings --raw | awk '$2 !~ /\[.*\]$/ {print$1}' | while read FS ; do quotacheck -vum $FS ; done
它看起来不是一个非常优雅的方式,我相信如果绑定挂载在你要检查的目录中,它将不起作用,但不幸的是,我不知道另一种方式给出一个列表目录忽略。
原来在quotacheck有一个错误。 我提交了一个修补程序来解决这个问题,但是当(或者甚至是)发布包含该修补程序的新版本的配额时,并不知情。 直接将文件附加到我的答案似乎是不可能的,所以我不会在这里发布补丁。 但是如果有人有兴趣,请发表评论,我将贴片作为代码块。
编辑:我的补丁没有被接受,因为它在旁边。 当使用EXT2_DIRECT选项进行编译并在ext文件系统上使用时,quotacheck已经能够在绑定挂载的情况下正常工作。 不幸的是,一个错误阻止了在作者已经修复的ext4文件系统上工作(在git://git.code.sf.net/p/linuxquota/code中提交2b3795805c8d1bd8873b046508777fa6e9a5c83d)。