Linux 커널의 최대 루프 장치는 무엇입니까?

Linux 커널의 최대 루프 장치는 무엇입니까?

루프 파일을 지원하기 위해 루프 모듈을 포함할 수 있습니다. Loop 모듈은 max_loop 옵션을 지원합니다. 옵션 루프 max_loop 256의 예를 찾았습니다. 제 질문은 지원되는 최대 루프 장치가 무엇입니까?입니다. 256개가 하드 제한이고 256개 이상의 루프 장치를 만드는 것이 불가능하다는 것을 믿을 수 없습니다.

고쳐 쓰다:

파일에서 흥미로운 내용을 찾지 못했습니다.https://elixir.bootlin.com/linux/v4.0/source/drivers/block/loop.c

하지만 몇 가지 실험을 하고 modprobe max_loops=512를 실행한 다음 udev로 설치된 /dev/ 디렉토리에서 loop0에서 loop511까지 번호가 매겨진 정확히 동일한 개수의 루프 블록 파일을 보았습니다.

Linux 커널 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64를 사용하여 수행했습니다.

답변1

커널 3.1 이전에는 고정된 수의 루프 장치를 설정해야 했습니다. 3.1부터는 /dev/loop-control고정된 개수가 아닌 필요에 따라 동적으로 할당되는 , 루프 장치가 있습니다. 따라서 필요하지 않은 100개의 루프 장치로 시작하는 대신(만약의 경우) 0개의 장치(또는 선택적 최소 개수)로 시작하여 실제로 필요할 때만 생성합니다.

~에서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.

매우 좋은 소스 코드(drivers/block/loop.c)는 다음과 같이 설명합니다.

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

그것은 또한전혀 설정하지 않는 것이 좋습니다:

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

그렇다면 실제로 몇 개의 루프 장치를 사용할 수 있습니까? 제한은 단일 기본 장치에 대한 최대 보조 장치 수입니다( loop기본 장치가 하나이므로 블록 7).MINORBITS(그래서 2 20 , 백만이 조금 넘습니다).

나는 다음과 같은 큰 숫자를 강제하려고합니다.

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

...하지만 결국 커널 패닉이 발생했습니다. ;-)

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.

이는 2 20 제한을 준수합니다 .

관련 정보