使用中の領域のみをハードディスクから複製する


10

dd、rsync、clonezillaなどのツールを使用して、Linuxのハードディスクで使用中の領域のみをクローンできますか?1 TB HD(使用中の2 GBのスペースのみ)から500 GB HDにバックアップする必要があります。


2
いいえ、ブロックコピーまたはクローン作成ツールではなく、ファイルコピーを使用する必要があります。
おがくず

1
よくわかりませんが、partcloneでこれができるかもしれません。
ダレン

回答:


22

可能ですが、最初にディスクを準備する必要があります。秘trickは、スパースファイルまたは圧縮を使用することです。この方法は時間がかかり、高いI / Oを生成します。あなたの場合(1 TB HDDで2GBを使用)、ファイルのコピー(おがくずのコメントで示唆されているように)はおそらくより良い解決策でしょう。一方、たとえば1 TBから使用中の850 GB、多くの小さなファイルがあり、MBR、パーティションテーブル、メタデータなどを一度にバックアップしたい場合、私の方法は合理的な保存方法です。画像ファイルに少なくとも150 GB(データが十分に圧縮されていない限り、500 GBのHDDに収まらない)。

これは、ディスク使用量の多いユーザー向けに書いています。また、ソースドライブが正常であり、空のスペースを上書きできるようにする必要があることに注意してください。私は主にバックアップ用のソリューションを提供していますが、リカバリやフォレンジック用ではありません。時間とI / Oコストは、イメージの作成中だけでなく、イメージがディスクに書き戻される場合(場合)にも支払われます。方法が適切な場合は、よく考えてください。

クローンを作成する必要/dev/sdbがあり、いくつかのパーティションがあるとしましょう:/dev/sdb1/dev/sdb2

準備

スパースファイルまたは圧縮を最大限に活用するには、空のスペースをゼロで上書きする必要があります。

## Most commands need sudo.
mount -o rw /dev/sdb1 /mnt
dd if=/dev/zero of=/mnt/zero_file bs=32M
## Long wait here. Expect "no space left on device".
sync
rm /mnt/zero_file
umount /dev/sdb1
## Repeat this with /dev/sdb2, /dev/sdb3 etc.

Windowsパーティションの場合、Windowsの休止状態に起因する問題が発生する場合があります。これを読んでください。

パーティションレイアウトに大きなギャップがある場合は、ゼロで埋める必要もあります。スワップパーティション(ある場合)は、結果のイメージをできるだけ小さくするために特別な処理が必要です。およびなどのWindowsファイルはhiberfil.sys、作成前に削除される場合があります。ここではこれらのケースについて詳しく説明しません。pagefile.sysswapfile.syszero_file

スパースファイル方式

この方法は、ターゲットファイルシステム(イメージファイルが保存される場所)がスパースファイルをサポートしている場合に使用できます。スパースイメージファイルを生成するには、次を呼び出します。

## dd probably needs sudo here.
dd if=/dev/sdb of=/foo/bar/my_image.dd bs=512 conv=sparse

(編集:元々ありましたがbs=32M、これは良い選択ではありませんconv=sparseこの質問を比較してください。)

画像を書き戻すには:

## dd probably needs sudo here.
dd if=/foo/bar/my_image.dd of=/dev/sdb bs=32M

利点:

  • イメージをマウント(mount -o offset=…または使用kpartx)して、内部のファイルにアクセスできます。

短所:

  • ターゲットファイルシステムはスパースファイルをサポートする必要があります。
  • コピー中はスパースに保つことを忘れないでください(cp --sparse=always)。

圧縮ファイル方式

画像を生成するには:

## dd probably needs sudo here.
dd if=/dev/sdb bs=32M | gzip -c > /foo/bar/my_image.dd.gz

画像を書き戻すには:

## dd probably needs sudo here.
gzip -cd < /foo/bar/my_image.dd.gz | dd of=/dev/sdb bs=32M

これらのコマンドはddgzipのみを使用して構築できます。dd32 MiBバッファーを確保するために使用しました。

利点:

  • 結果のファイルはスパースではなく、特別な処理は必要ありません。
  • ソースディスク上のファイルが圧縮されやすい場合、イメージサイズはさらに小さくなります。

短所:

  • 完全に解凍せずに圧縮イメージ内のファイルにアクセスすることは困難です(一部のFUSEは役立つかもしれませんが、確かではありませんが、試したことはありません。squashfsアプローチを検討してください)。

ヒント

  • この回答の最初のバージョンを書いたずっと後に、virt-sparsifyツールがあることを知りました。便利そうです。

  • 進行状況を監視するにはddstatus=progressオペランドで呼び出します。dd既にそれなしで実行されている場合(たとえば、ddサポートしていないstatus=progressか、使用するのを忘れた場合)、USR1ツールに信号を送信します。

    kill -s USR1 $(pidof dd)
    

    必要に応じて繰り返します。

    別の方法として、あなたはpv読むために使うことができます。例:

    pv -B 32m /dev/sdb | dd of=/foo/bar/my_image.dd bs=512 conv=sparse
    pv -B 32m /dev/sdb | gzip -c > /foo/bar/my_image.dd.gz
    
  • gzip --fast最高の使用を圧縮するために、高速使用を圧縮しますgzip --bestman gzipその他のオプションを参照してください。

  • 可能であればpigz代わりに使用してくださいgzippigz複数のプロセッサコアを利用できるため、これにより速度が向上します。必要に応じて別のコンプレッサーを使用できます。


このような素晴らしい答えを共有してくれてありがとうThank。あなたが言及したいと思うかもしれないことに気づいたのは、lsduがまばらな画像を構築するときに異なるファイルサイズを報告するということです。私の知る限りddはないとして、2つのサイズの大きい方を報告しますlsとただしデュが、それはファイルシステム上に存在するファイルのより正確なサイズを出力します。
ipatch

0

ターゲットディスクが既にフォーマットされている場合、2番目のディスクは1番目と同じマシンに接続され、マウントされます。LinuxまたはMacを実行している場合:

rsync -avP --ignore=/media/disk2 / /media/disk2

ターゲットディスクが既にフォーマットされている場合、2番目のディスクはフォーマットされて別のPCにマウントされ、LinuxまたはMacを実行している場合:

rsync -avP / user@ip_of_disk2_host:/media/disk2

これは、基礎となるドライブに関係なく、ファイルのバックアップだけが必要であることを前提としています。これにより、ファイルごとのバックアップが行われ、わずか2 GBのデータでかなり高速に実行されます。


-1
  1. gpartedライブUSBを作成する
  2. gpartedを起動し、元のドライブのパーティションのサイズを2 GB以上に変更します
  3. コピーオーバードライブ
  4. 新しくコピーしたパーティションのサイズをフルサイズに変更します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.