バックアップの目的で、sshリンクを介して(いくつかの)ディスクパーティション全体を転送したいと思います。ソースはブロック特殊デバイスであり、ターゲットは通常のファイルである必要があります。ただし、一般的なツールはこれには適していないようです。
scp
は文句を言うでしょうnot a regular file
tar
は、ターゲット側でデバイスiノードを再作成しようとしますrsync
はskipping non-regular file
現在の私の最善の策は、ポート転送を介したnc
、またはパーティションごとにリモート側で1つのcat
呼び出しです。つまり、公開鍵を設定しない限り、パーティションごとに1つのパスワードエントリを意味します。よりエレガントな解決策はありますか?
環境は、合理的なLinuxライブシステムです。現在、私はたまたまDebian wheezyをうそをついていますが、それはtooに固有であってはなりません。
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
は単なる例であり、パイプで機能する限り、他のコマンドでも同様に機能します。
イーサネットリンクを介して転送しようとしている場合は、バッファプログラムをインストールします(ディストリビューションにまだ存在しない場合)。 ddに似ていますが、はるかに高速です。基本的には、共有メモリバッファを使用して読み取りと書き込みを同時に実行するようにプログラムされています。以前はこれをテープダンプに使用していましたが、転送時間を約10%節約できました。コマンドラインは次のようになります。
buffer -i /dev/disk -m 100m | ssh -C target buffer -o disk.image -m 100m
利用可能なオプションは他にもあります。デフォルトのブロックサイズは10Kです。上記では100Mバイトの共有メモリが割り当てられています。これを可能にするには、このパラメータまたは構成のいずれかを調整する必要がある場合があります。
警告:この方法でのACTIVEパーティションの送信には問題があります。したがって、送信するパーティションがマウントされていないことを確認してください。