我们重新创建了一个文件服务器,它有一个使用 SAN 上的项目配额的 XFS 文件系统。不幸的是,我们忘记在重新安装之前在服务器上备份 /etc/projects 和 /etc/projid。XFS 文件系统本身,以及存储在其中的配额信息,都是好的 AFAICS。有没有办法找出磁盘上目录的项目 ID,以便我们可以重新创建 /etc/{projects,projid}?
澄清一下,假设 XFS 文件系统安装在 /export/xfs 上并包含目录 /export/xfs/foo 和 /export/xfs/bar。所以我们需要在 /etc/projects 中有以下条目
NN:/export/xfs/foo
MM:/export/xfs/bar
以及 /etc/projid 中的以下条目
foo:NN
bar:MM
那么我们如何检索存储在磁盘上的 NN 和 MM 的值呢?
好吧,既然没人知道答案,我必须自己想办法。以下似乎有效:
对其中一个项目目录的项目 ID 进行猜测 (NN)。然后运行
如果您的猜测是正确的,您应该会看到如下输出
如果您的猜测不正确,您应该会看到如下输出
其中 NN 是您的猜测,正确的项目 ID 是 MM。因此基于此,您可以为该项目目录填写 /etc/projects 和 /etc/projid。然后,对文件系统中的所有项目目录重复此操作(用于自动化此操作的脚本留给读者作为练习)。
使用现代 e2fsprogs(1.43 及更高版本,2016)该
lsattr -p <file|dir>
命令将直接打印项目 ID。它在ioctl(FS_IOC_FSGETXATTR)
内部使用与 XFS 相同的方法来向内核查询项目 ID,而不是猜测。然后,只需
lsattr -p
为每个顶级目录运行以查找 ID,以及(希望在组织良好的系统中)匹配的名称。也可能有一个 XFS 命令来获取 projid,但我不知道 XFS。