我需要为大量 Web 服务用户提供创建/读取/写入/删除文件和设置配额的功能。这些用户不是 Linux 用户,因此我无法应用配额。创建真实用户只是为了执行配额似乎不是一个好主意。因此,我决定创建一个每个用户的文件并将其挂载为文件系统。
- 那么挂载几万个FS会有什么后果呢?
- 挂载的 FS 总数有限制吗?
答案1
首先,安装那么多文件系统似乎是一个非常糟糕的主意——对于你遇到的任何问题,一定有更好的解决方案?
无论如何,回答你的第二个问题:以前的 serverfault 问题似乎表明,对于最近的内核,每个文件系统类型的限制约为 1 百万个挂载点(2^20),并且最多可以挂载 256 种不同类型的文件系统。
对于较旧的内核(2.6 之前),每个文件系统的限制是 256 个挂载点。
编辑针对这些评论,我提出以下替代解决方案:
使用 XFS,它允许你使用项目配额,一种目录配额形式。
创建一个单独的 XFS 文件系统,用于保存所有 webservice 用户数据。将其挂载在例如/mnt/myWebService
。然后,为每个 webservice 用户创建一个项目目录(例如/mnt/myWebService/username1
etc)并相应地设置配额。
有关如何设置项目目录和配额的说明,您可以查看这篇博文或者RHEL XFS 配额管理页面
答案2
请注意,您不必创建用户(例如将他们添加到 /etc/passwd 或您想要的任何用户数据库),您可以将文件的所有权设置为任何 uid。只需确保这些 uid 与可能在该服务器上运行进程的本地(或远程)用户不重叠即可。
但是,为了能够更改文件的所有者,您需要超级用户权限,这可能会给您的 Web 应用程序带来问题。
请注意,当您使用 ZFS 时,每个快照都会获得一个挂载点,并且拥有数千个快照的情况并不罕见,这并不是什么大问题。
答案3
没有必要为此创建无数个文件系统。
最简单的方法是为每个用户创建一个目录(您已经必须这样做了),然后检查每次用户尝试上传内容时目录中的文件占用了多少空间。如果上传会导致他们超出限制,则拒绝上传。这是已知宇宙中所有其他 Web 应用程序的做法。
PS:你把你所做的事情的细节分散在几条评论中;你应该把它们添加到问题中,以便人们能够找到它们(也许还能撤销你的反对票)。