6

i can include loop module for supporting loop files. loop module supports max_loop option. I've found examples with options loop max_loop 256 . My question, what is maximal supported loop devices? I can't belive, 256 is the hard limit, and creating more than 256 loop devices is impossible.

Update:

I didn't found nothing interesting in file https://elixir.bootlin.com/linux/v4.0/source/drivers/block/loop.c

But I made some experiment, and run modprobe max_loops=512 then I see exactly the same count loop block files in /dev/ directory mounted as udev, numbered from loop0 to loop511

I did it with linux kernel 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64

1 Answer 1

13

Before kernel 3.1, you had to set a fixed number of loop devices. Since 3.1 there is /dev/loop-control, and loop devices are allocated dynamically as needed, rather than a fixed number. So rather than having a hundred loop devices you never needed (just in case), it starts out with 0 devices (or an optional min count) and only creates them when actually required.

From man 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.

The very fine source code (drivers/block/loop.c) describes it:

    /*
     * 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.
     */

It also recommends not setting it at all:

     * 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.

How many loop devices can realistically be used then? The limit is the maximum number of minor devices for a single major device (since loop has a single major, block 7), which is limited by MINORBITS (so 220, just over a million).

I tried to force some large numbers like this:

truncate -s 1M foobar
i=1
while losetup --show /dev/loop$(($i-1)) foobar
do
    i=$(($i*2))
done

...but it triggered a kernel panic in the end. ;-)

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.

This matches the 220 limit.

1
  • 2
    Thank You, it's the best answer whenever I've seen :) I look into minor/major numbers. far far before, both were single bytes, then major and minor were limited from 0 to 255. Actually there assigned probably 4 bytes (C dword under C x86 compiler), then limitations are increased. But question is, this value is used with or without sign :) But it is very goot news, next limitation has been broken. ps: for /etc/loop511 I have major=7, minor=511 as a special block file :)
    – Znik
    Commented Nov 28, 2019 at 11:26

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .