Answers:
Linux没有对硬盘数量施加任意限制。
另外,来自 这篇文章在Debian邮件列表中 :
这很简单。 / dev / sdz之后是/ dev / sdaa。而且,我刚刚在/ dev / sdzz来/ dev / sdaaa之后,通过在我的笔记本电脑上制作和登录800个ISCSI目标来测试它。 :)
和 这篇博文 :
对于现代Linux内核下的SATA和SCSI驱动器,除了导出名称的代码在sdzzz之外正常工作,直到(理论上)sd后跟29 z时,才能应用上述相同的代码。
因此,理论上存在限制,但在实践中它们是无法到达的。
事实上,Linux的抽象SCSI子系统(包括SATA和USB驱动器)所暴露的驱动器数量有限制。这是因为设备文件由主要/次要设备编号对标记,并且为SCSI子系统分配的方案具有此隐式限制。
https://www.kernel.org/doc/Documentation/devices.txt
分配了以下主要操作码:8,65到71和128到135,总共分配了16个块。次要操作码限制为256个可能的值(范围0..255)。每个磁盘获得16个连续的小操作码,其中第一个代表整个磁盘,接下来的15个代表分区。
let major = number of major allocated opcodes = 16
let minor = number of minor opcodes per major opcode = 256
let parts = number of minor opcodes per disk = 16
major * (minor / parts) = 16 * (256 / 16) = 256 possible drives
我以前见过人们写128作为限制。我相信Linux最近有128..135,这可以解释这种差异。
命名方案( /dev/sdbz7
)由userland选择,而不是由Linux内核选择。在大多数情况下,这些都是由udev,eudev或mdev管理的(尽管过去它们是手动创建的)。我不知道他们的命名方案。不一定依赖所有基于Linux的系统命名设备,因为系统管理员可以修改设备命名策略。
该 RHEL技术的能力和限制 页面建议至少10000与最近足够的内核(请参阅'设备路径的最大数量(“sd”设备)'行)。这个金额大于@ luiji-maryo提到的金额,因为:
向自己展示这一点的一种方法是使用 scsi_debug
模块:
modprobe scsi_debug max_luns=10 num_tgts=128
在主流Linux发行版上等待一段时间之后,你现在应该有1280多个SCSI磁盘。您可以使用
ls -l <pathtodisk>
查看他们的主要/次要数字。
NB(1):虚拟化软件通常具有低得多(例如,数百或更低)。 vSphere 6.0限制 )限制可以连接到VM的最大控制器数量以及可以挂起这些控制器的最大磁盘数量,这样您就不可能以这种方式达到Linux的限制。
NB(2):两者 BSG 和 SG 限制自己(通过 BSG_MAX_DEVS
和 SG_MAX_DEVS
分别)最多32768个设备。即使你以某种方式不需要磁盘本身的/ dev / entries,你也很难在没有这些额外设备的情况下发送更专业的SCSI命令。