web-dev-qa-db-ja.com

ブロックデバイスのコンテンツの転送

バックアップの目的で、sshリンクを介して(いくつかの)ディスクパーティション全体を転送したいと思います。ソースはブロック特殊デバイスであり、ターゲットは通常のファイルである必要があります。ただし、一般的なツールはこれには適していないようです。

  • scpは文句を言うでしょうnot a regular file
  • tarは、ターゲット側でデバイスiノードを再作成しようとします
  • rsyncskipping non-regular file

現在の私の最善の策は、ポート転送を介したnc、またはパーティションごとにリモート側で1つのcat呼び出しです。つまり、公開鍵を設定しない限り、パーティションごとに1つのパスワードエントリを意味します。よりエレガントな解決策はありますか?

環境は、合理的なLinuxライブシステムです。現在、私はたまたまDebian wheezyをうそをついていますが、それはtooに固有であってはなりません。

7
MvG

SSHを介してパイプすることができます。 ddの使用例:

dd bs=1M if=/dev/disk | ssh -C target dd bs=1M of=disk.img

転送中にネットワーク接続が切断された場合、コピーされた量がわかっていれば再開できます。たとえば、少なくとも1000MiBがすでに転送されていることが確実な場合(disk.imgのファイルサイズを確認してください):

dd bs=1M skip=1000 if=/dev/disk | ssh -C target dd bs=1M seek=1000 of=disk.img

ddは単なる例であり、パイプで機能する限り、他のコマンドでも同様に機能します。

10
frostschutz

イーサネットリンクを介して転送しようとしている場合は、バッファプログラムをインストールします(ディストリビューションにまだ存在しない場合)。 ddに似ていますが、はるかに高速です。基本的には、共有メモリバッファを使用して読み取りと書き込みを同時に実行するようにプログラムされています。以前はこれをテープダンプに使用していましたが、転送時間を約10%節約できました。コマンドラインは次のようになります。

  buffer -i /dev/disk -m 100m | ssh -C target buffer -o disk.image -m 100m

利用可能なオプションは他にもあります。デフォルトのブロックサイズは10Kです。上記では100Mバイトの共有メモリが割り当てられています。これを可能にするには、このパラメータまたは構成のいずれかを調整する必要がある場合があります。

警告:この方法でのACTIVEパーティションの送信には問題があります。したがって、送信するパーティションがマウントされていないことを確認してください。

3
mdpc