scp のファイルサイズの制限とかのメモ

ちょっと前に、scpで扱えるファイルサイズが4GBまでなんだよね〜とかなんとかいうことをいろいろ(http://www.atmarkit.co.jp/fnetwork/rensai/tcp28/02.htmlとかhttp://winscp.net/eng/docs/protocolsとか、後者はwinscpに限った話だと思うけど、、。)書かれていることを見かけたので調べてみた。ちょっと長くなりそうなのでここにまとめる。

結論からいうと、たぶんファイルサイズの制限は、大きいファイルをおけないファイルシステムを使っている場合か、特定のクライアントの問題だった、ということで、scpの問題ではない、という話。4GB超のデータを送るときにはscpよりsftpつかってね、とか、ちょっと冗談きついっす。いちいちputとかgetとかたたけというのか。

scpやrcpの通信プロトコルはhttp://blogs.oracle.com/janp/entry/how_the_scp_protocol_worksを見つけることができた。この記事には、”There is no RFC, no draft, not even README file describing it” と書いてあり、rcpのプロトコルはドキュメントがあまりない模様。(opensshのサイトでも、scpは標準化されていない(Wayback Machine経由)、と書いてある)で、まぁ細かいことはおいておいて、rcp/scpで扱えるファイルサイズは、実装依存・環境依存だよとのこと。opensshのscpは、long long int のサイズまで行けるようだ。longlongが64bitだとすると、ファイルサイズで10EiBくらい?普通はファイルシステムの制限の方がきつそう。

32bitなLinuxのlibsshでもLFS(large file support)で2GBの壁は越えられているようだ。これはあまり使わないかな(http://www.libssh.org/archive/libssh/2011-04/0000020.html)(LFSについて参考

scpが標準化されていないとか、4GBの問題がある場合があったとか、わりと気にしていなかったので、勉強になった。

ついでに、scpについて思っているところをいくつか。

linuxな環境でscpすると、たまにSTALLEDになるけど、あれはなんなんだろう。原因が気になる。
とりあえず、全体で大量にファイルを送るときは、 -l オプションで転送速度を制限するのがベター。

暗号化のオーバーヘッドがきつい。最近のCPUには、AES暗号化のための命令セットがついているらしい(AES-NI
scpとかが速くなるのかが気になるところ。

つうか、たくさんファイルがあるときはrsyncが楽。

コメントを残す