55GBの画像を新しいサーバーに転送する最も簡単な方法


64

現在、2つのCentOSサーバーがあります。イメージディレクトリを "tar"し、それをSCPする最も簡単な方法と方法を知る必要がありますか?

tarringが永遠にかかっているので、それが私がちょうど提案した最も速い方法です...私はコマンドを実行しました:

tar cvf imagesbackup.tar images

そして、私はちょうどそれを上に行くつもりだった。

もっと速い方法があれば教えてください。両方のマシンにリモート/ SSHアクセスできます。


12
スニーカー?
ニック・T

回答:


98

tarを使用してローカルディスクに書き込む代わりに、sshを使用してネットワーク経由でリモートサーバーに直接書き込むことができます。

server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"

「ssh」コマンドに続く文字列は、対話型ログオンの代わりにリモートサーバーで実行されます。それらがローカルであるかのように、SSHを介してこれらのリモートコマンドとの間で入出力をパイプすることができます。コマンドを引用符で囲むと、特にリダイレクトを使用する場合の混乱を避けることができます。

または、他のサーバーでtarファイルを直接抽出できます。

server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"

めったに使用されない-Cオプションに注意してください。これは、「何かを行う前にまずこのディレクトリに変更する」ことを意味します。

または、宛先サーバーから「プル」したい場合があります。

server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path")

この 構成はbashにとって新しいものであり、古いシステムでは機能しないことに注意してください<(cmd) 。プログラムを実行し、出力をパイプに送信し、そのパイプをファイルであるかのようにコマンドに置き換えます。

上記の内容を次のように簡単に記述できたはずです。

server2$ tar -zx -C /destination -f <(ssh server2 "tar -zc -C /srcdir ./path")

または次のように:

server2$ ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination

または、いくつかの悲しみを省いて、rsyncを使用することもできます。

server1$ rsync -az ./path server2:/destination/

最後に、転送前にデータを圧縮すると帯域幅が削減されることを忘れないでください。ただし、非常に高速な接続では、実際に操作に時間がかかる場合があります。これは、お使いのコンピューターが十分に高速に圧縮できないためです。100MBを圧縮するのに100MB を送信するよりも時間がかかる場合、非圧縮で送信する方が高速です。

あるいは、圧縮レベルを指定できるように、(-zオプションを使用するのではなく)自分でgzipするパイピングを検討することもできます。私の経験では、圧縮可能なデータを使用した高速ネットワーク接続では、レベル2または3(デフォルトは6)でgzipを使用すると、ほとんどの場合で全体的なスループットが最高になります。そのようです:

server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"

Rsyncは見事に機能しました-その場で圧縮し、フォルダ全体をコピーし、壊れたリンクで再開します。すべて1つの簡単なコマンドで。大好きです。これらは私が便利だと思ったオプションです:z:圧縮r:再帰=サブフォルダーのコピーv:詳細。私のRsyncコマンドの例:rsync -azvr / src-path / username @ dest_server:/ dest / path /
Bastion

68

私は自分自身でそれを再同期したいと思うでしょう-それは圧縮を行い、リンク損失をうまく処理します。


14
rsyncはまさに正しいツールです。
リッチ

4
+1-イェイrsync!
エヴァンアンダーソン

1
+1、ただ積み上げます。さらに、私はrsyncが本当に好きです。
スティーブン

1
rsyncのを使用している場合しかし、あなたは(あなたが圧縮されたデータを保存する場合は)とにかく、手動でデータを圧縮する必要があります
WLK

圧縮ファイルをrsyncで保存するにはどうすればよいですか?
ドーランアンテヌッチ

12

あなたがそれらをただtarしただけで、これが最小限の速度向上で多くの時間を無駄にします。

したがって、cvfスイッチを使用してファイルを単純に風袋引きすると、55GBのすべてのイメージを読み取ってディスクに書き戻すのにかかる時間が実質的にかかります。(実質的には、かなりのオーバーヘッドがあるため、さらに時間が無駄になります)。

ここで得られる利点は1つだけです。多くのファイルをアップロードするためのオーバーヘッドが削減されています。画像を圧縮すると、転送時間が短縮される場合があります(ただし、すでに圧縮形式になっていると思われるため、これはあまり役に立ちません)。計算時間の無駄。

巨大なtarアーカイブを有線で転送することの最大の欠点は、何か問題が発生した場合、最初からやり直す必要があることを意味します。

私はその方法を使用します:

md5sum /images/* > md5sum.txt
scp -r images/* user@host:/images/

新しいサーバー上

md5sum /images/* > md5sum_new.txt

それからちょうどdiff。また、scpはオンザフライで圧縮をサポートしているため、個別のアーカイブを作成する必要はありません。

編集

OP5が有用だったため、MD5情報を保持します。しかし、1つのコメントが私に新しい洞察を与えました。そのため、少しの検索でこの便利な情報が提供されました。 ここでの主題は直接SCPではなくSFTPであることに注意してください

FTPとは対照的に、SFTPはファイルの転送にオーバーヘッドを追加します。ファイルがクライアントとサーバー間で転送されると、「パケット」と呼ばれる小さなチャンクに分割されます。たとえば、各パケットが32KBであるとします。SFTPプロトコルは、送信時に各32KBファイルに対してチェックサムを実行し、そのチェックサムとそのパケットを含めます。受信者はそのパケットを取得してデータを復号化し、チェックサムを検証します。チェックサム自体は、CRC32チェックサムよりも「強力」です。(SFTPはMD5やSHAなどの128ビット以上のチェックサムを使用するため、これはすべてのパケットで実行されるため、転送の一部として実行される非常に詳細な整合性チェックがあります。)それ自体は(追加のオーバーヘッドのため)遅くなりますが、転送が正常に完了すると、事実上、


md5sumは何をしていますか?diffとは何ですか?ありがとうございます!
アンドリューファッション

2
md5sum(またはmd5)は、ファイルのチェックサムを取ります。Diffはファイルの違いを探します(man diff)。チェックサムは文字列、ハッシュを作成します。ファイルが転送中に変更された場合、ビットが反転し、エラーが発生します...反対側で再度取得すると一致しません。大きなファイルの場合、エラーの可能性が高くなります。そのため、.isoファイルをダウンロードできるサイトを見ると、ダウンロードしたファイルを比較して破損していないことを確認するために、MD5チェックサムがよく使用されます。
バートシルバース

3
scpは暗号化され、回線上の整合性を保証します。もちろん、データがメモリまたはディスク上で破損している可能性はわずかですが、それは非常にまれです。
ライアンベア

1
SFTPチェックサムのオーバーヘッドは実際にはどのような意味でも重要ですか?想像できません。32768ごとに4バイトは重要ではありません。GBあたり128 kBです。それを「遅い」と呼ぶことは、退屈な理論的な意味を除けば何でも誇張のように思えます。
underscore_d

8

Paceyのmd5sum提案に加えて、次のものを使用します。

宛先で: nc -w5 -l -p 4567 | tar -xvf -

次に、ソースで: tar -cvf - /path/to/source/ | nc -w5 destinationserver 4567

まだtar / untarであり、暗号化はありませんが、他のサーバーに直接送信されます。両方をタンデムで起動し(-w55秒の猶予が与えられます)、動作を確認します。帯域幅が狭い場合は、両端のtarに-zを追加します。


1
私はそれは、彼が(ソケットを開く)と、ソース上の(派遣)が先に実行しなければならないの周りの最初の他の方法だと思う
ディミトリオスMistriotis

宛先サーバーの代わりに、root @ 1.1.1.1を置くだけですか?
アンドリューファッション

いいえ、IPのみです。netcatはTCP以外のプロトコルを使用していません:)このコマンドは、上記のすべてのコマンドの中で最速です。ソース上のファイルごとに正確に1つの読み取り、ファイルを転送するための正確な最小ネットワークトラフィック、および宛先上のファイルごとに正確に1つの書き込みがあります。予備のCPUサイクルがある場合、-zフラグ(圧縮用)を追加すると、転送するネットワークデータが少なくなるため、さらに高速化されます。
ジェフマクジャンキン

@ user36845-はい。私は上記の順序で年表を意味していませんでしたが、あなたは正しいです、最初にソケットを開く必要があります。明確にするために編集します。:)
SmallClanger

ssh / scpが125MB / sから133MB / sに上限を設定した理由はわかりませんが、netcatはそのデータを380MB / sで簡単にパイプできます(同じリンク)
ThorSummoner

1

ワンポイント-すべてのホストがrsyncを持っているわけではなく、ホストが異なるバージョンのtarを持っているかもしれません。このため、しばしば無視されるcpioを使用した最初の呼び出しポートとして推奨できます。

sshを介してcpioを実行すると、ホスト間でファイル/ディレクトリ構造のアドホックレプリケーションを実行できます。このようにして、cpioを「フィード」する必要があるときに、見送りで送信されるものをより細かく制御できます。また、引数の移植性が高く、cpioはあまり変化しません。これは、異機種環境で複数のホストを管理する場合に重要なポイントです。

/ export / homeとsubdirsをリモートホストにコピーする例:

cd /export/ find . home -print | cpio -oaV | ssh 10.10.10.10 'cd /export/home; cpio -imVd'

上記は、/ export / homeおよびすべてのサブディレクトリの内容をリモートホストの/ export / homeにコピーします。

お役に立てれば。


彼はそれが2つのCentOSボックスだと言及したので、rsyncとファイル互換バージョンのtarを持っているでしょう。rsyncなどのツールは、cpioなどのツールを置き換えるために作成されました:)。cpioを使用して「再開」することはできません。少なくともどこから開始するのかを正確に知り、必要に応じて検索をフィルタリングすることはできません。これは不必要な時間のオーバーヘッドです。そうは言っても、「古い」UNIXボックスに関する有用な情報:)
Rafiq Maniar

はい、あのcmmandは私を失いました笑
Andrew Fashion

1

あなたはsshアクセスがあり、rsyncアクセスがあります。

rsync -av -e ssh /storage/images/ user@[ip or domain name]:/storage/images/

または

rsync -av -e "ssh -l user" /storage/images/ [ip or domain name]:/storage/images/

「rsyncエラー:main.c(977)[sender = 2.6.9]で一部のファイルを転送できませんでした(コード23)」などのエラーを受け取った場合は、サーバー間のユーザーとグループを確認してください。不一致がある可能性があります。

rsyncで転送を圧縮する場合は、rsync "-z"オプションを使用します。このオプションはより多くのCPUを使用しますが、帯域幅は少なくなりますので、注意してください。

「--progress」オプションがあり、これにより転送された割合が表示されます。これは、そのようなことが好きな場合に便利です。


0

ファイルを転送するためにインターネットを必要とするのではなく、共有ネットワーク上にありますか?NFSまたはFTPはSCPのオーバーヘッドよりもはるかに高速かもしれませんが、転送中に暗号化を失います。


遠隔地にあるさまざまなサーバー
アンドリューファッション

0

または、常にtarパイプを使用できます。

(cd /path && tar -cjf - * ) | ssh user@host 'tar -xjf - -C /path'

'j' = bzip2、gzipに 'z'を使用するか、tarでサポートされている場合は--lzmaを使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.