インストールオプションの長さ制限をバイパスする方法はありますか?

インストールオプションの長さ制限をバイパスする方法はありますか?

次のように、「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文字、2番目の試行では長さは4103です。また、エラー判断で文字列を4095文字に切りました。

確かに、

$ getconf PAGE_SIZE
4096

したがって、オプション文字列は明らかにメモリページサイズから1を引いた値に制限されます。 Linuxカーネルによって課される制限ですか、それともmountプログラム自体の制限ですか?この問題を解決する方法はありますか?

ベストアンサー1

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

おすすめ記事