ありがちな方法(一時ファイル作成)
リモートマシンのファイル群をtarアーカイブとして取得する場合、以下のようのリモートマシンで一度tarアーカイブを作成することは、よく見る状況である。
- リモートマシンにSSHでログイン
- リモートマシンで、tarコマンドを実行してtarアーカイブを作成する
- ローカルマシンからscpで、リモートマシンのtarアーカイブをコピー
- リモートマシンで、tarアーカイブを削除
この方法の欠点は、リモートマシンに一時的にtarアーカイブを保存する空き容量が必要なことである。
大量のファイルをローカルにコピーするときは、これがネックになる。
一時ファイルを作らない方法
リモートマシンremoteの/home/foo以下をすべてtarアーカイブ
foo.tar.gzとしてバックアップする場合、
ローカルマシンで以下のように入力する。
ssh remote tar czf - /home/foo > foo.tar.gz
上記の青字の部分は、リモートマシンで実行されるコマンドである。リモートで実行したコマンドの標準出力は、ローカルのsshコマンドそのものの標準出力に出力される。上記でtarの出力ファイルとして
-(標準出力)を指定しているので、結果としてローカルのsshの標準出力にtarアーカイブの内容が出力される。そこで
> foo.tar.gzでローカルのファイルにリダイレクトすれば、そのままtarアーカイブとなる。これを図にすると次のイメージである。
なお、標準入出力については下記を参照。
また、tarをカレントディレクトリが/home/fooで実行させるには以下のようにする。
ssh remote "(cd /home/foo; tar czf - .)" > foo.tar.gz
多段SSHごしでのtarアーカイブ取得
local -> remote -> remote2のようにremoteを介してremote2へ多段SSHして、remote2のファイル群のtarアーカイブを直接取得することもできる。
ssh -J remote remote2 tar czf - /home/goo > goo.tar.gz
0 件のコメント:
コメントを投稿