FreeBSD Daily Topics

2012年10月2日ファイルを転送する方法:scp、nc、ftp、NFS

tips

How to send your file?

リモートホストへのファイルの転送にはscp(1)を使うことが多いのではないかと思います。ssh(1)でログインできるなら転送できるわけですし、サーバ管理としては日常的な方法です。しかし、scp(1)はファイルの転送コマンドとしては、転送速度があまり期待できないという側面があります。LANの内部でデータをやりとりする場合などには、転送量が多くなれば、scp(1)による転送処理はボトルネックになります。

たとえば1GBのデモデータを次のように作ったとします。転送時間だけを知りたいので、tmpfsでメモリファイルシステムの領域も用して転送速度を測ってみます。

mkdir ~/tmpfs
sudo mount -t tmpfs tmpfs ~/tmpfs
sudo chmod 777 tmpfs

dd if=/dev/random of=DATA bs=1024x1024 count=1024

次のようにscp(1)を実行するとファイルがリモートホストへコピーされます。コマンドの出力に転送速度が表示されますので、これをメモしておきます。

scp DATA host:~/tmpfs/

同様の処理はnc(1)コマンドでも実施できます。LAN内部だけの転送であるなど、データの秘匿を特に気にする必要がない場合にはこのコマンドは便利です。nc(1)を使う場合、データを受け取る側でまずポート番号を指定してコマンドを実行します。

nc -l 10000 > /dev/null

データを送信する側では、次のようにホストとポート番号を指定してデータを流し込みます。nc(1)は転送速度が高速であることが多く、柔軟で、扱いやすいコマンドです。

/usr/bin/time nc host 10000 < DATA

FTPサーバを立ちあげて転送する方法もあります。運用があまりとやかく言われないのであれば(FTPサーバを起動してはならない、といった規定がないなど⁠⁠、次のようにサーバ側でFTPサーバを起動して、クライアントからputするだけでもいけます。

service ftpd onestart

ftp host
…
> cd tmpfs
> put DATA

サーバを起動してもよいならNFSサーバをたちあげてもよいでしょう。手順は複雑になりますが、基本的に次のようにサーバ側を準備して、クライアントからマウントして利用するだけです。

mdir ~/nfs
chmod 777 nfs
sudo vim /etc/exports
sudo service rpcbind onestart
sudo service statd onestart
sudo service lockd onestart
sudo service mountd onestart
sudo service nfsd onestart
cp DATA ~/nfs/

/etc/exportsには次のように公開したいポイントを1行追加しておきます。

/home/daichi/nfs

クライアント側でも次のように関連するデーモンを起動してマウントすればNFSでデータをコピーできるようになります。

service rpcbind onestart
service statd onestart
service lockd onestart
service nfsclient onestart
mkdir ~/nfs
sudo mount_nfs host:/home/daichi/nfs /home/daichi/nfs
/usr/bin/time cat ~/nfs/DATA > /dev/null

1000baseTのネットワークで通信速度を測定した結果、次のような結果が得られました。

 計測結果
図 計測結果
 計測結果
転送方法転送速度[MiB/s]
nc111.4
ftp put109.6
scp25
NFS110

ファイルの送信にはscp(1)、巨大なファイルを送信するならnc(1)、というのが手軽で効率の期待できる作業方法と言えます。

1000baseTのネットワークだとnc(1)、ftp(1)、NFSのどれも似たような転送速度で、速度も使い切っていますが、これが10GbEのネットワークやInfiniBandのネットワークだと、コマンドごとに転送速度の違いが現れます。新しいネットワークを構築して使用する場合、最初にベンチマークを実施し、そのネットワークとコマンドがどういった関係にあるのか調査してから使ったほうが効率の良い利用が期待できます。

おすすめ記事

記事・ニュース一覧