![¿Cuál es el máximo de dispositivos de bucle para el kernel de Linux?](https://rvso.com/image/164715/%C2%BFCu%C3%A1l%20es%20el%20m%C3%A1ximo%20de%20dispositivos%20de%20bucle%20para%20el%20kernel%20de%20Linux%3F.png)
Puedo incluir un módulo de bucle para admitir archivos de bucle. El módulo loop admite la opción max_loop. He encontrado ejemplos con opciones loop max_loop 256. Mi pregunta, ¿cuáles son los dispositivos de bucle máximos admitidos? No puedo creerlo, 256 es el límite estricto y crear más de 256 dispositivos de bucle es imposible.
Actualizar:
No encontré nada interesante en el archivo.https://elixir.bootlin.com/linux/v4.0/source/drivers/block/loop.c
Pero hice algunos experimentos y ejecuté modprobe max_loops=512 y luego veo exactamente los mismos archivos de bloques de bucles de conteo en el directorio /dev/ montado como udev, numerados de loop0 a loop511.
Lo hice con el kernel de Linux 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64
Respuesta1
Antes del kernel 3.1, había que configurar un número fijo de dispositivos de bucle. Desde 3.1 existe /dev/loop-control
y los dispositivos de bucle se asignan dinámicamente según sea necesario, en lugar de un número fijo. Entonces, en lugar de tener cien dispositivos de bucle que nunca necesitó (por si acaso), comienza con 0 dispositivos (o un conteo mínimo opcional) y solo los crea cuando realmente es necesario.
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.
El código fuente muy fino (drivers/block/loop.c
) lo describe:
/*
* 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.
*/
Tambiénrecomienda no configurarlo en absoluto:
* 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.
Entonces, ¿cuántos dispositivos de bucle se pueden usar de manera realista? El límite es el número máximo de dispositivos menores para un solo dispositivo mayor (ya que loop
tiene un solo mayor, bloque 7), que está limitado porMINORBITS
(entonces 2 20 , poco más de un millón).
Intenté forzar algunos números grandes como este:
truncate -s 1M foobar
i=1
while losetup --show /dev/loop$(($i-1)) foobar
do
i=$(($i*2))
done
...pero al final desencadenó un pánico en el núcleo. ;-)
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.
Esto coincide con el límite de 2 20 .