我有一个 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 联机帮助页。