linux – ハードディスクから使用中のスペースだけをクローンする

clone clonezilla dd hard-drive linux

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が既に実行されている場合(例えば、ddstatus=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


  1. gpartedのライブUSBを作ります
  2. gpartedを起動して、元のドライブのパーティションを2GB以上にリサイズします
  3. ドライブのコピーオーバー
  4. 新しくコピーしたパーティションをフルサイズにリサイズします

-2  Daniel Charles Van Donsel  2018-10-09


タイトルとURLをコピーしました