linux-kernel - 在现代 Linux(2.6.30+ 内核)系统上可以创建(和安装)多少个循环设备?

标签 linux-kernel virtual limit mount loopback

我想为我们正在开发的多用户 Web 应用程序实现每个目录配额。问题是...我们已经为任何客户实现了一个文档管理器来存储他们自己的私有(private)文档,但我们不希望由于此功能而耗尽空间,因此我们希望为它们分配给定的限制。

由于在 Linux 中似乎不存在实现每个目录配额的标准方法(我知道配额主要针对用户或组,但我们需要类似于 Windows Server 2008 R2 处理配额的方式)每个目录的基础)我选择使用“技巧”。我基本上是这样做的:

touch client1.ext3
dd if=/dev/zero of=./client1.ext3 bs=1024 count=16384
mkfs.ext3 ./client1.ext3
mount -o loop,rw ./client1.ext3 ./mountpoint

这只是一个代码示例,但这就是想法...我创建虚拟“卷”并将其分配给我的客户,以便他们可以存储他们的私有(private)数据,如果他们需要更多数据,他们可以按次付费存储量基础。

我看到的“问题”是我在/dev 层次结构中只看到 8 个循环设备,而我们的应用程序目前有 17 个测试客户端,因此当前存在的循环设备的数量不能满足我的需求。我知道您最多可以分配 256 个循环设备,直到内核版本 2.6.23,并且该限制(从版本 2.6.24 开始)理论上不再存在,尽管我仍然有一些担忧。

老实说,我觉得用 1000 多个循环设备填充/dev 层次结构(这些设备在整个系统生命周期内根本不会被卸载)是非常错误的,不是应该这样做的方式,但也许它是可行的,因为中期解决方案,所以我的问题是:

  • 单个循环设备分配时需要多少内存?
  • 分配超过 256 个时系统是否会崩溃或性能受到影响 循环设备?
  • 我可以动态增加循环设备的数量吗?或者...
  • 如何在启动时预定义可用循环设备的数量 时间?

最佳答案

您所描述的想法实际上是手动完成的“逻辑卷管理”(LVM)。如果您为此使用 LVM,您将获得双重好处:“这是一个众所周知的标准”和“有很好的工具支持,包括在线调整大小等”。

关于linux-kernel - 在现代 Linux(2.6.30+ 内核)系统上可以创建(和安装)多少个循环设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9548423/

相关文章:

linux - 为什么我们需要内核空间?

linux-kernel - 为什么 fsync() 在 Linux 内核 3.1.* 上花费的时间比内核 3.0 多得多

c++ - 使用带有 QObject 的类的编译器错误 "collect2: Id returned 1 exit status"(带有 Qt Creator 的 QT 4.7)

.net - 如何获取属性覆盖属性?

mysql - 无法更改 mysql 连接限制

c - Linux 内核中的计时/时钟

linux-kernel - 我如何判断虚拟内核地址是否有效?

database - 只获取 mongoose virtual populate 的长度

linux - 使用模块设置 coredumpsize 的限制

limit - 有什么方法可以限制逻辑应用程序中的执行运行?