이것은 이론적인 질문입니다.
스왑 파일/파티션을 29개만 가질 수 있는 이유는 무엇입니까?
10,000개의 1MB 스왑 파일을 생성하고 스왑하려는 경우 swapon: /tmp/swap29: swapon failed: Operation not allowed를 사용하여 30개의 스왑 파일에서 실패합니다.
이를 달성하기 위한 스크립트
#!/bin/bash
i=0
SWAP=/tmp/swap
while [ "$i" -lt 10000 ];do
dd if=/dev/urandom of=$SWAP$i bs=1M count=1
mkswap "${SWAP}${i}"
swapon "${SWAP}${i}"
i=$((i+1))
done
누군가 이것을 설명할 수 있나요?
답변1
일반 영어로:
커널은 스왑 파일/파티션을 추적해야 하며 이를 테이블에서 수행합니다. 각 항목은 미리 할당된 소량의 메모리를 차지합니다. 따라서 합리적인 한도를 초과하는 기본 한도(최대 스왑 테이블 크기)가 선택됩니다.
정말로 더 많은 기능이 필요한 사람은 누구나 커널을 수정하고 다시 컴파일할 수 있습니다.
답변2
대답은 여기에서 찾을 수 있습니다:https://www.kernel.org/doc/gorman/html/understand/understand014.html
"...MAX_SWAPFILES를 포함하는 swap_info라는 선언된 배열은 32개의 항목을 갖도록 정적으로 정의됩니다. 이는 실행 중인 시스템에 최대 32개의 스왑 영역이 존재할 수 있음을 의미합니다."
이 링크의 11.2장에는 제가 알고 싶었던 것보다 훨씬 더 많은 정보가 있습니다.