설치 옵션 길이 제한을 우회할 수 있는 방법이 있습니까?

설치 옵션 길이 제한을 우회할 수 있는 방법이 있습니까?

다음과 같이 "elem_###" 형식으로 일련의 디렉터리를 생성한다고 가정합니다. 여기서 ###은 001부터 454까지의 정수입니다.

$ dirs=$(seq -felem_%03.0f 454 | tr '\n' ' ')
$ mkdir ${dirs}

그런 다음 다음 디렉토리를 사용하여 lowerdir설치합니다 overlayfs.

$ dirs=${dirs::-1}
$ mkdir mountpoint
# mount overlay -t overlay mountpoint -o lowerdir=${dirs// /:}
# umount mountpoint

좋은 결과. 그러나 이렇게 하면:

$ mkdir elem_455
# mount overlay -t overlay mountpoint -o lowerdir=${dirs// /:}:elem_455
mount: /home/username/dir/mountpoint: wrong fs type, bad option, bad superblock on overlay, missing codepage or helper program, or other error.
$ dmesg | tail
(...)
[ 1541.668221] overlayfs: empty lowerdir
(...)

실패합니다.

따라서 첫 번째 시도에서 옵션 문자열의 길이는 4094자이고 두 번째 시도에서는 길이가 4103입니다. 또한 오류 판단에 따라 문자열을 4095자로 잘랐습니다.

틀림없이,

$ getconf PAGE_SIZE
4096

따라서 옵션 문자열은 분명히 메모리 페이지 크기에서 1을 뺀 값으로 제한됩니다. Linux 커널에 의해 부과된 제한입니까, 아니면 mount프로그램 자체의 제한입니까? 이 문제를 해결할 방법이 있나요?

답변1

한 가지 아이디어는 디렉토리의 일부를 중간 오버레이 레이어로 집계하는 것입니다. 그런 다음 이를 최종 마운트 지점으로 집계할 수 있습니다.

# mount overlay -t overlay dummy1 -o lowerdir=${dirs// /:}
# mount overlay -t overlay dummy2 -o lowerdir=${dirs// /:}
# ...
# mount overlay -t overlay mountpoint -o lowerdir=dummy1:dummy2:...

관련 정보