我们重新创建了一个文件服务器,它有一个使用 SAN 上的项目配额的 XFS 文件系统。不幸的是,我们在重新安装之前忘记在服务器上备份 /etc/projects 和 /etc/projid。就我所知,XFS 文件系统本身以及存储在其中的配额信息都没有问题。有没有办法找出磁盘上目录的项目 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 的值?
答案1
好吧,既然没人知道答案,我就得自己想办法了。下面的方法似乎有效:
猜测(NN)某个项目目录的项目 ID。然后运行
xfs_quota -x -c "project -c -p /export/xfs/projdir -d 0 NN"
如果你的猜测是正确的,你应该看到如下输出
Checking project NN (path /export/xfs/projdir)...
如果你猜测不正确,你应该看到类似以下的输出
/export/xfs/projdir - project identifier is not set (inode=MM, tree=NN)
其中 NN 是您的猜测,正确的项目 ID 是 MM。因此,基于此,您可以为该项目目录填写 /etc/projects 和 /etc/projid。然后,对文件系统中的所有项目目录重复此操作(自动执行此操作的脚本留给读者作为练习)。
答案2
使用现代 e2fsprogs(1.43 及更高版本,2016),该lsattr -p <file|dir>
命令将直接打印项目 ID。它在内部使用ioctl(FS_IOC_FSGETXATTR)
与 XFS 相同的方法来查询内核以获取项目 ID,而不是猜测。
然后,只需运行lsattr -p
每个顶级目录来查找 ID 以及(希望在一个组织良好的系统中)匹配的名称。
可能还有一个 XFS 命令可以获取 projid,但我不知道 XFS。