![qual é o máximo de dispositivos de loop para o kernel Linux?](https://rvso.com/image/164715/qual%20%C3%A9%20o%20m%C3%A1ximo%20de%20dispositivos%20de%20loop%20para%20o%20kernel%20Linux%3F.png)
posso incluir módulo de loop para suportar arquivos de loop. módulo de loop suporta a opção max_loop. Encontrei exemplos com opções loop max_loop 256 . Minha pergunta: quais são os dispositivos de loop máximos suportados? Não acredito, 256 é o limite máximo e é impossível criar mais de 256 dispositivos de loop.
Atualizar:
Não encontrei nada de interessante no arquivohttps://elixir.bootlin.com/linux/v4.0/source/drivers/block/loop.c
Mas eu fiz alguns experimentos e executei modprobe max_loops=512 então vejo exatamente os mesmos arquivos de bloco de loop de contagem no diretório /dev/ montado como udev, numerados de loop0 a loop511
Eu fiz isso com o kernel Linux 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (11/11/2019) x86_64
Responder1
Antes do kernel 3.1, você tinha que definir um número fixo de dispositivos de loop. Desde a versão 3.1 existe o /dev/loop-control
, e os dispositivos de loop são alocados dinamicamente conforme necessário, em vez de um número fixo. Portanto, em vez de ter cem dispositivos de loop que você nunca precisou (por precaução), ele começa com 0 dispositivos (ou uma contagem mínima opcional) e só os cria quando realmente necessário.
Deman 4 loop
:
/dev/loop-control
Since Linux 3.1, the kernel provides the /dev/loop-control device,
which permits an application to dynamically find a free device, and to
add and remove loop devices from the system.
O excelente código-fonte (drivers/block/loop.c
) descreve:
/*
* If max_loop is specified, create that many devices upfront.
* This also becomes a hard limit. If max_loop is not specified,
* create CONFIG_BLK_DEV_LOOP_MIN_COUNT loop devices at module
* init time. Loop devices can be requested on-demand with the
* /dev/loop-control interface, or be instantiated by accessing
* a 'dead' device node.
*/
Isso tambémrecomenda não configurá-lo:
* Note: Global-for-all-devices, set-only-at-init, read-only module
* parameteters like 'max_loop' and 'max_part' make things needlessly
* complicated, are too static, inflexible and may surprise
* userspace tools. Parameters like this in general should be avoided.
Quantos dispositivos de loop podem ser usados realisticamente? O limite é o número máximo de dispositivos secundários para um único dispositivo principal (desde que loop
tenha um único dispositivo principal, bloco 7), que é limitado porMINORBITS
(então 2 20 , pouco mais de um milhão).
Tentei forçar alguns números grandes como este:
truncate -s 1M foobar
i=1
while losetup --show /dev/loop$(($i-1)) foobar
do
i=$(($i*2))
done
...mas desencadeou um pânico no kernel no final. ;-)
sysfs: cannot create duplicate filename '/devices/virtual/bdi/7:1048575'
kobject_add_internal failed for 7:1048575 with -EEXIST, don't try to register things with the same name in the same directory.
Isso corresponde ao limite de 2 20 .