web-dev-qa-db-ja.com

パーティション全体またはハードドライブをスパースファイルに複製

パーティション全体またはハードドライブ全体をより大きな外付けディスクに複製するのが好きですが、スパースファイルを作成するのが好きです。クローンにはddをよく使用しますが、スパースファイルはサポートしていません。回避策として、私は次のようなものを使用しました:

cp --sparse=always <(dd if=/dev/sda1 bs=8M) /mount/external/backup/sda1.raw

しかし、これは私の好みには少しトリッキーであり、中止された場合にプロセスを再開することはできません。これ(ntfsclone)用のNTFSツールがあるのはおかしいですが、Linux(EXT2-4)のネイティブファイルシステムにはそのようなツールはありません。

これのためのより良いツールがありますか?スパースサポートのあるddバリアント?ディスクバックアップ用の独自のソフトウェアを探していませんが、必要に応じてループデバイスとしてマウントできるスパースクローンコピーを作成したいだけです。

36
Martin Scharrer

あなたが欲しい dd_rescue

dd_rescue -a -b 8M /dev/sda1 /mount/external/backup/sda1.raw
21

完全を期すために ddrescue を呼び出します。 --sparseまたは-Sフラグを使用すると、宛先をまばらに書き込むことができます。

$ ddrescue -S -b8M /dev/sda1 /mount/external/backup/sda1.raw

または長いオプション:

$ ddrescue --sparse --block-size 8M /dev/sda1 /mount/external/backup/sda1.raw

または、必要に応じて MiBs

$ ddrescue -S -b8Mi /dev/sda1 /mount/external/backup/sda1.raw

レスキューを中断して再開できるようにするには、ログファイルを使用することもできます。

$ ddrescue -S -b8Mi /dev/sda1 /mount/external/backup/sda1.raw ~/sda1.rescue.log

GNU ddrescueおよびdd_rescueは異なるプログラムです。しかし、GNU ddrescueはより広く普及しているようです。たとえば、すでに [〜#〜] grml [〜#〜])でパッケージ化されています

20
maxschlepzig

GNU ddでスパースファイルのサポートを提供するために、2007年に パッチ提供 がありましたが、coreutilsに組み込まれていません(少なくとも8.4以降)) 。それ以来、ddの変更が多すぎるのではないかと思います。このパッチは、多くの作業をせずに現在のバージョンに対して適用される可能性があります。

また、あなたの質問でのcpの独創的な使用法にも感銘を受けており、再開を達成するためにそれを使用するようになりました(ここでは約80Mからソースに再開しています)。

cp --sparse=always \
  <(dd if=/dev/sda1 bs=8M skip=10) /dev/stdout \
  | dd bs=8M seek=10 of=/mount/external/backup/sda1.raw

編集:それをスクラッチ。もちろん、2番目のddは、入力と同じ長さではないため、出力ファイル内の間違った位置にシークしています。

3
Eli Heady

ちょうど私の2セントを追加します。 rawディスクからスパースファイルを作成する別の方法は、 qemu-img を使用することです。

qemu-img convert -f raw /dev/sda /tmp/sda.raw

これは単一のパーティションでも使用できます。また、生のディスク/パーティションをqemu-imgがサポートする他の形式(QCOW2、VHD [x]、vmdkなど)に変換するオプションもあります。

1
Gabriel Samfira

別のオプションは rsync です。例えば:

rsync -SP --copy-devices /dev/sda1 /mount/external/backup/sda1.raw

説明:

  • -S/--sparse書き込み時にスパースブロックをスキップする
  • -P/--partial --progress進行状況を表示し、部分的に転送されたファイルを保持します
  • --copy-devicesデバイスのコンテンツをコピーする

あなたは付け加えられます --append中断されたコピーを再開するには(または--append-verifyを使用して、新しいデータと古いデータの両方に対するチェックサムを確認します)。

Edit:私は気づきました copy-devices.diff は検討中であり、多くのシステムには存在しない可能性があります(ただし、 FedorabuntDebian などに含まれています)

1
Kevinoid

注:これはコメントに記載されている理由で機能しません。参照用にここに残します。

Kill -USR1を使用してddの統計を監視します。

$ cp --sparse=always <(dd if=/dev/urandom bs=8M) \
    /mount/external/backup/sda1.raw&
$ watch kill -USR1 `pidof -s /bin/dd`

スキップ/シークを使用して再開:

$ i_bytes= # get from the last dd statistic
$ o_bytes=`du -b /mount/external/backup/sda1.raw | cut -f 1`   
$ cp --sparse=always <(dd if=/dev/urandom bs=8M skip=$i_bytes \
    seek=$o_bytes) /mount/external/backup/sda1.raw&
$ watch kill -USR1 `pidof -s /bin/dd`

$ i_bytesがないと、再開するのが難しくなります。マシンがクラッシュした場合などに備えて、dd統計をファイルに記録するのがおそらく最も簡単です。

0
bhinesley

xfsdumpxfsrestore かなり長い間ネイティブLinuxファイルシステムであったXFSの場合。

0

なぜ単純ではないのですか?

cp --sparse=always /dev/sda1 /mount/external/backup/sda1.raw
0
Zaz