tips
- How to send your file?
リモートホストへのファイルの転送にはscp(1)を使うことが多いのではないかと思います。ssh(1)でログインできるなら転送できるわけですし、
サーバ管理としては日常的な方法です。しかし、 scp(1)はファイルの転送コマンドとしては、 転送速度があまり期待できないという側面があります。LANの内部でデータをやりとりする場合などには、 転送量が多くなれば、 scp(1)による転送処理はボトルネックになります。 たとえば1GBのデモデータを次のように作ったとします。転送時間だけを知りたいので、
tmpfsでメモリファイルシステムの領域も用して転送速度を測ってみます。 次のようにscp(1)を実行するとファイルがリモートホストへコピーされます。コマンドの出力に転送速度が表示されますので、
これをメモしておきます。 同様の処理はnc(1)コマンドでも実施できます。LAN内部だけの転送であるなど、
データの秘匿を特に気にする必要がない場合にはこのコマンドは便利です。nc(1)を使う場合、 データを受け取る側でまずポート番号を指定してコマンドを実行します。 データを送信する側では、
次のようにホストとポート番号を指定してデータを流し込みます。nc(1)は転送速度が高速であることが多く、 柔軟で、 扱いやすいコマンドです。 FTPサーバを立ちあげて転送する方法もあります。運用があまりとやかく言われないのであれば
(FTPサーバを起動してはならない、 といった規定がないなど)、 次のようにサーバ側でFTPサーバを起動して、 クライアントからputするだけでもいけます。 サーバを起動してもよいならNFSサーバをたちあげてもよいでしょう。手順は複雑になりますが、
基本的に次のようにサーバ側を準備して、 クライアントからマウントして利用するだけです。 /etc/
exportsには次のように公開したいポイントを1行追加しておきます。 クライアント側でも次のように関連するデーモンを起動してマウントすればNFSでデータをコピーできるようになります。
1000baseTのネットワークで通信速度を測定した結果、
次のような結果が得られました。 表 計測結果 転送方法 転送速度[MiB/ s] nc 111. 4 ftp put 109. 6 scp 25 NFS 110 ファイルの送信にはscp(1)、
巨大なファイルを送信するならnc(1)、 というのが手軽で効率の期待できる作業方法と言えます。 1000baseTのネットワークだとnc(1)、
ftp(1)、 NFSのどれも似たような転送速度で、 速度も使い切っていますが、 これが10GbEのネットワークやInfiniBandのネットワークだと、 コマンドごとに転送速度の違いが現れます。新しいネットワークを構築して使用する場合、 最初にベンチマークを実施し、 そのネットワークとコマンドがどういった関係にあるのか調査してから使ったほうが効率の良い利用が期待できます。