« ハマリ役 Main WordPressの一覧件数 »

Apacheの2GB転送制限

ApacheでWikiのファイルをtar.gzで固めたファイルを転送しようとしたら、アクセス権限は正しいのに「Forbidden You don’t have permission to access XXX on this server.」が出てしまう。何やらよくわからんので、冒頭をいくらかコピーしてみたら、これは問題ないようだ。ごにょごにょやっているうちに、どうやらファイルサイズの問題らしいことが判明。

なんだが、「Apache ファイル サイズ 制限」とかで検索してもアップロードでのサイズ制限のことしか出てこない。

とりあえず、目的のファイルは2.9GBあるのだが、限界のファイルサイズを特定しようと、空データで指定サイズのファイルを作成してみることに。touch コマンドで空ファイルを作成できるので、サイズ指定オプションもあるかもと思ったが、Vineのtouchコマンドにはなかった。

そこで、別の方法を探すことに。

Solaris や Windows なら mkfile や fsutil コマンドがあるようなのだが、こちらもなかったので、次の dd コマンドを使う方法を試した。

「bs=1M count=2048」として2GBバイトのファイルを作成した時点で転送拒否となった(count=2047まではOK)。

ということで、「apache 制限 2GB」とすると、いくつか見つかった。

2.2以前ではでかいファイルは扱えないらしい。

確かに、見直すとエラーログにもそのような記述で残ってましたわ…。

[error] [client XXX.XXX.XXX.XX] (75)Value too large for defined data type: access to XXX failed

Apacheにコンパイルオプションを指定して構築し直したり、上位バージョンをインストールすれば対応できそうだけど、ひとまずデータを分割してサイズを縮小してみることにした。

ところで、上のリンクのvdrさんのところで、perlのtruncate関数を使って指定サイズのファイルを作成する方法が紹介されていた。こちらのほうがddを使うより早い(指定値はコマンドラインでなく -e 内部に記述した)。

touch foo.txt
perl -e 'truncate "foo.txt", 2*1024**3'

truncateの第1引数はファイルハンドルのみでなく、上の例のようにファイル名でもいいようだ。

Leave a comment

Your comment