これは理論的な質問です。
スワップファイル/パーティションを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章には、私が知りたかったよりもはるかに多くの情報があります。