按用户列出文件空间所有权

按用户列出文件空间所有权

我有一个 4TB NFS 文件系统,由 NetApp 文件管理器提供服务。 NetApp 的配额工具告诉我,某个用户正在该 qtree 中使用 X 数量的磁盘空间,但它不在“他们的”目录中,它可能位于文件系统中的任何位置。所以我必须找到它,这样它要么是合理的,要么是清理的。

我正在运行一个find -user命令,到目前为止它已经运行了三天,这只是文件列表——我打算回去对每个文件执行一个 du 来获取文件大小。

有没有某种工具可以更好地为我完成这一切?或者有一种方法可以让我以更简单的方式获得我想要的信息?我希望 Windows 上有类似 SequoiaView 的功能,除了能够只显示单个用户拥有的文件。

更新:这是我正在运行的命令:

find * -name .snapshot -prune -o -type f -user $USER -exec ls -l {} \; > /tmp/output.txt

目的是编写一个 awk 或 perl 单行代码来遍历这些原始数据并找出事物的实际位置。

答案1

除非有某种特定于 NetApp 的方法,否则配额通常只是几个数字:已使用的数量、允许的数量。它以一种简单的方式进行跟踪:如果用户删除了 1MB 的文件,则从使用的量中减去 1MB。如果用户向文件添加 1MB,则在使用量中添加 1MB。配额本身不知道(或关心)哪些文件正在使用该空间。

不过,您使用的 find 命令并不是最优的。首先,要找到所有者,find必须stat对文件运行。所以find已经有了尺寸。接下来,exec ls {} \;效率相当低。你至少应该使用-exec ls {} +来减少调用的次数ls。更好的是(如果你发现有它,不确定它的标准)是-printf。这完全避免了 ls,并让您可以利用stat已经完成的查找:

find … -printf '%s %p\0' # that gives null-delimited, you can use \n instead
                         # for newline-delimited

还有许多其他标志-printf,请查看 find 联机帮助页。

相关内容