Linuxのハードディスクで使用中の領域のみを複製するために、dd、rsync、clonezilla、またはその他のツールを使用できますか? 1 TB HD(使用中の2 GBスペースのみ))から500 GB HDにバックアップする必要があります。
できますが、最初にディスクを準備する必要があります。コツは、スパースファイルまたは圧縮を使用することです。 この方法は時間がかかり、高いI/Oを生成します。あなたの場合(1 TB HDDで2GBを使用))ファイルのコピー(sawdustのコメントで提案されている)は、おそらくより良い解決策です。一方、たとえば、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の休止状態により問題が発生する可能性があります。 this をお読みください。
パーティションレイアウトに大きなギャップがある場合は、ゼロで埋める必要もあります。スワップパーティション(存在する場合)は、結果のイメージをできるだけ小さくするために特別な処理が必要です。 hiberfil.sys
、pagefile.sys
、swapfile.sys
などのWindowsファイルは、zero_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
これらのコマンドは、dd
なしで、gzip
のみでビルドされる場合があります。 dd
を使用して、32 MiBのバッファーを確保しました。
利点:
短所:
この回答の最初のバージョンを書いてからずっと後に、私は virt-sparsify
ツールがあることを知りました。便利そうです。
進行状況を監視するには、status=progress
オペランドを指定してdd
を呼び出します。 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 --best
を使用します。その他のオプションについては、man gzip
を参照してください。
可能であれば、pigz
の代わりにgzip
を使用してください。 pigz
は複数のプロセッサコアを利用できるため、これにより処理速度が向上します。必要に応じて別のコンプレッサーを使用できます。
ターゲットディスクがすでにフォーマットされている場合、2番目のディスクは最初のディスクと同じマシンに接続され、マウントされます。LinuxまたはMacを実行している場合:
rsync -avP --ignore=/media/disk2 / /media/disk2
ターゲットディスクがすでにフォーマットされている場合、2番目のディスクはフォーマットされ、別のPCにマウントされます。LinuxまたはMacを実行している場合:
rsync -avP / user@ip_of_disk2_Host:/media/disk2
これは、基礎となるドライブに関係なく、ファイルのバックアップが必要なだけであると想定しています。これはPER FILEバックアップを実行し、わずか2 GBのデータでかなり高速に実行されます。