Linuxでハードディスクの使用中のスペースだけをクローンするためにdd、rsync、clonezilla、または任意のツールを使用することはできますか?1TBのHD(使用中のスペースが2GBしかない)から500GBのHDにバックアップする必要があります
16 kroka 2016-07-05
できますが、まずはディスクを用意しましょう。コツは、スパースファイルや圧縮を使うことです。この方法は時間がかかります、それは高いI/Oを生成します。あなたの場合(1TBのHDDに2GBを使用しています)、ファイルコピー(おがくずさんのコメントで提案されているように)がおそらくより良い解決策になるでしょう。一方で、例えば、1TBのうち850GBを使用していて、その中にたくさんの小さなファイルがあり、MBR、パーティションテーブル、メタデータなどを一度にバックアップしたいとしたら、私の方法は、少なくとも150GBのイメージファイルを保存するための合理的な方法になります
ディスク使用量が多いユーザーのために書いています。また、ソースドライブが健全で、空の領域を上書きできるようにする必要があることにも注意してください。私はこのソリューションを主にバックアップ用に提供していますが、リカバリやフォレンジックではありません。時間とI/Oコストは、イメージ作成時だけでなく、イメージがディスクに書き戻された時にも発生します。この方法が自分に合っているかどうか、よく考えてみてください
/dev/sdb
をクローンする必要があり、いくつかのパーティションがあるとします。/dev/sdb1
, /dev/sdb2
…
Preparation
疎なファイルや圧縮を最大限に活用するためには、空のスペースをゼロで上書きする必要があります
## 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
(EDIT: 元々はbs=32M
がありましたが、conv=sparse
との相性は良くありません。この質問を比較してみてください)。)
画像を書き戻すこと
## dd probably needs sudo here.
dd if=/foo/bar/my_image.dd of=/dev/sdb bs=32M
Advantages:
- イメージはマウントされることがあります (
mount -o offset=…
またはkpartx
を使用します)
Disadvantages:
- 対象となるファイルシステムは、スパースファイルをサポートしている必要があります
- コピー中は疎にしておくことを忘れないようにしましょう(
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
のみでビルドすることもできます。私は32MBのバッファを確保するためにdd
を使用しました
Advantages:
- 結果として得られるファイルは非透明であり、特別な処理は必要ありません
- ソースディスク上のファイルが圧縮されやすい場合、画像サイズはさらに小さくなります
Disadvantages:
- 完全に解凍しないと圧縮された画像内のファイルにアクセスするのは難しいです(確信はありませんが、試したことはありません; squashfsアプローチを検討してみてください)
Hints
この回答の最初のバージョンを書いてからだいぶ経ってから、
virt-sparsify
のツールがあることを知りました。便利そうですね進行状況を監視するためには、
status=progress
オペランドを持つdd
を呼び出してください。dd
が既に実行されている場合(例えば、dd
がstatus=progress
をサポートしていない場合や、status=progress
を使うのを忘れた場合など)、USR1
シグナルをツールに送ってくださいkill -s USR1 $(pidof dd)
と必要に応じて繰り返します
別の方法として、
pv
を使って読むこともできます。例としては、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
を参照してくださいできれば
gzip
の代わりにpigz
を使ってください。これにより、pigz
は複数のプロセッサコアを利用できるので、高速化されるはずです。必要であれば、別の圧縮機を使っても構いません
24 Kamil Maciorowski 2016-07-06
ターゲットディスクがすでにフォーマットされている場合、2番目のディスクは、最初のものと同じマシンに接続され、マウントされ、あなたがLinuxやMacを実行している場合
rsync -avP --ignore=/media/disk2 / /media/disk2
対象のディスクが既にフォーマットされている場合は、2枚目のディスクをフォーマットして別のPCにマウントし、LinuxやMacを実行している場合は、2枚目のディスクをフォーマットしてマウントします
rsync -avP / user@ip_of_disk2_host:/media/disk2
これは、基盤となるドライブに関係なくファイルをバックアップしたい場合を想定しています。これは、ファイル単位のバックアップを行い、わずか2GBのデータであれば、かなり高速に実行されます
1 UtahJarhead 2018-10-09
- gpartedのライブUSBを作ります
- gpartedを起動して、元のドライブのパーティションを2GB以上にリサイズします
- ドライブのコピーオーバー
- 新しくコピーしたパーティションをフルサイズにリサイズします
-2 Daniel Charles Van Donsel 2018-10-09