
次のように、「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:...