それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ssh 経由で dd と転送を同時にやる。サーバーでddをパイプしつつ、ローカルに保存

dd / ddrescue したいけどリモートに容量がない時がある。

dd してファイルを保存したいけど、容量と時間が気になる。

dd if=/dev/sda of=/tmp/rootfs.img # 容量がありません。

また、dd 中に時間待ちをして、さらにrsync/scp で転送待ちをする。。。。時間の無駄。無駄です。無駄ですよ?

そんなときは、パイプでDDしながら転送を同時にやる

dd と転送を同時にやる。

dd if=/dev/sda | ssh server.example.com dd of=dump.img

この場合は、いまログインしてるホストから、別のホストに転送。

特徴は dd は if/of を省略可能な点だ。

ログインホストをアレコレ変えて試す。

  • 手元のホストから、リモートへssh で dd コマンドを実行する場合。
  • 手元のホストから、リモートAへdd命令をだし、リモートBへ転送する場合

プラン1:リモートAから、手元に転送する場合。

実行元は、自分のローカルホストとする。

takuya@OSXi :~ $ ssh remotehost dd if=/dev/sda |  cat -> dump.img

プラン2:リモートAからリモートBに転送する歩法

実行元は、同じく自分のローカルホストとする。

takuya@OSXi :~ $ ssh remoteA dd if=/dev/sda | ssh remoteB dd of=dump.img

転送とdd を同時にヤってしまえば時間短縮!

dd の IO 待ちと ssh の転送IO待ちを同時進行すれば楽チン。打つコマンドも減るしね。

あ、ちなみに、dd の他にも組み合わせると便利なものがあるよ。

たとえば、mysqldump も組み合わせたら便利だよ。ファイルの暗号化とか画像なども転送しながら圧縮してしまえば楽ちんね。

ssh のパイプ転送はアレコレ使えて便利。

私は、過去にこのような転送を処理とデータ処理を同時行うことをやっていた。

tar で圧縮と転送と解凍を一気にやっちゃう - それマグで!

ffmpegを応用する。ファイル転送しながら、エンコード - それマグで!

Samba/CifsやNFSマウントしたフォルダに書けばいいじゃんと言われれば、即死。

接続切れたらどうすんだよと、言われれば、爆死。

参考資料

ddの出力をssh経由で転送する方法 -- ぺけみさお