我们的一位计算机用户几乎超出了 AFS 卷配额。运行fs listquota
或fs lq
给他警告:
olifri@ubuntu:~$ fs listquota ~
Volume Name Quota Used %Used Partition
H.olifri 500000 492787 99%<< 38% <<WARNING
我想与他分享一个 shell 脚本,该脚本可以检测他的哪个目录占用了他的大部分 AFS 卷配额。然后他会更好地了解从哪里开始删除文件。
请注意,在 AFS 文件系统中,用户可以在 AFS 卷内安装其他 AFS 卷。这意味着使用/usr/bin/find的递归可能会进入我们不感兴趣的其他 AFS 卷。
我们的 AFS 客户端软件是 Openafs 1.6.1,它运行在 Ubuntu 12.04 计算机上。我们对 AFS 文件服务器没有管理员权限,因为它们由另一个部门管理。
命令/usr/bin/du似乎不知道 AFS 卷的概念。我现在最好的想法是为每个子目录编写一个脚本,该脚本将测试该目录是否是 AFS 卷的安装点。例如,该命令fs lsmount
可用于此。对于普通目录fs lsmount
会产生此结果
esjolund@ubuntu:~$ mkdir ~/testdir
esjolund@ubuntu:~$ fs lsmount ~/testdir
'/afs/pdc.kth.se/home/e/esjolund/testdir' is not a mount point.
并且对于 AFS 安装点fs lsmount
会产生此结果
esjolund@ubuntu:~$ fs mkmount -dir ~/testmount -vol prj.sbc.esjolund00
esjolund@ubuntu:~$ fs lsmount ~/testmount
'/afs/pdc.kth.se/home/e/esjolund/testmount' is a mount point for volume '#prj.sbc.esjolund00'
在开始编写 shell 脚本之前,我想听听您对如何解决问题有什么更好的想法?
使用这样的命令