バックアップ目的でSSHリンクを介して(複数の)ディスクパーティション全体を転送したいと思います。ソースはブロック特殊デバイスで、ターゲットは通常のファイルでなければなりません。しかし、一般的なツールはそれに適していないようです。
scp
文句を言うnot a regular file
tar
ターゲット側でデバイスinodeを再生成しようとします。rsync
説明するskipping non-regular file
現在の最良のオプションは、nc
ポート転送を介して、またはcat
リモート側でパーティションごとに1回呼び出すことです。これは、公開鍵が設定されていない限り、パーティションごとに1つのパスワード入力を意味します。よりエレガントなソリューションはありますか?
環境は合理的なLinuxライブシステムです。現在、私は Debian でうんざりしていますが、そうする必要はありません。またこれについて具体的に説明してください。
答え1
SSH経由でパイプできます。使用例dd
:
dd bs=1M if=/dev/disk | ssh -C target dd bs=1M of=disk.img
転送中にネットワーク接続が中断された場合は、コピーされたコンテンツの量を知ることで転送を再開できます。たとえば、1つ以上のファイルが転送1000MiB
されたと確信している場合(ファイルサイズの確認disk.img
):
dd bs=1M skip=1000 if=/dev/disk | ssh -C target dd bs=1M seek=1000 of=disk.img
dd
これは単なる例であり、パイプで使用される限り、他のコマンドのように動作します。
答え2
イーサネットリンクを介して転送する場合は、ディストリビューションにバッファがまだない場合は、バッファをインストールします。 ddに似ていますが、より良くて高速です。デフォルトでは、同時読み書きに共有メモリバッファを使用するようにプログラムされています。テープダンプに使用しましたが、転送時間が約10%節約されました。コマンドラインは次のとおりです。
buffer -i /dev/disk -m 100m | ssh -C target buffer -o disk.image -m 100m
より多くのオプションが利用可能で、デフォルトのブロックサイズは10Kです。上記は100MBytesの共有メモリを割り当てるため、これを許可するにはこのパラメータまたは設定を調整する必要があります。
警告:この方法でアクティブパーティションを転送できません。そのため、転送するパーティションがマウントされていないことを確認してください。