42

Linuxでは、次のことができます

dd if=/dev/sdb of=bckup.img

しかし、ディスクが 32GB で 4GB しか使用されていない場合、32GB のイメージ ファイルは空間時間の無駄になります。有効なデータのみで画像を作成する方法やツールはありますか?

4

7 に答える 7

46

これに対処するための非常に優れた簡単な方法は、次のように gzip を介して単純にパイプすることです。

# dd if=/dev/sdb | gzip > backup.img.gz

このようにして、画像が圧縮され、ほとんどの場合、未使用のスペースがほとんどなくなります。

これを使用して、そのようなイメージを復元します。

# cat backup.img.gz | gunzip | dd of=/dev/sdb

1 つの注意: 最近削除されたファイルが多数ある場合、イメージ サイズがまだ大きい可能性があります (ファイルを削除しても、基になるセクターがゼロになるとは限りません)。ゼロを含む大きなファイルを作成してすぐに削除することで、空き領域を消去できます。

# cd /media/flashdrive
# dd if=/dev/zero of=bigfile bs=1M     # let it run and quit by disk full error
# rm bigfile
于 2013-10-14T07:22:03.893 に答える
15

最善の方法は

  1. メタデータを保持したまま、すべてのパーティションからすべてのファイルをコピーします

    mkdir -p myimage/partition1

    mkdir myimage/partition2

    sudo cp -rf --preserve=all /media/mount_point_partition1/* myimage/partition1/

    sudo cp -rf --preserve=all /media/mount_point_partition2/* myimage/partition2/

  2. MBRを抽出する

    sudo dd if=/dev/sdX of=myimage/mbr.img bs=446 count=1

    /dev/sdX対応するデバイスに交換してください。

  3. 宛先ディスクを、コピーされたデータよりも大きなサイズのパーティションに分割し、gparted. ディスクを分割する方法をGoogleで検索してください。

  4. 新しくフォーマットされ、パーティション化されたディスクをマウントします。ほとんどのコンピューターでは、ディスクを接続するだけで、マウントされたパーティションを/mediaフォルダーに見つけることができます。

  5. 次のコマンドを使用して、以前にコピーしたデータを宛先パーティションにコピーします。

    sudo cp -rf --preserve=all myimage/partition1/* /media/mount_point_partition1/

    sudo cp -rf --preserve=all myimage/partition2/* /media/mount_point_partition2/

  6. MBRをコピーバック

    sudo dd if=myimage/mbr.img of=/dev/sdX bs=446 count=1

さあ、新しいディスクをお楽しみください!

于 2014-04-29T16:12:34.447 に答える
5

回答 1665017のステップ 2 に示すように、 のbsおよびcountパラメータを使用してdd、画像のサイズを制限できます。

作成したい画像のサイズがすでにわかっている場合があります。そうでない場合は、次から良いアイデアを得ることができますdf

df -H --total /

/ディスク パーティションに関連するすべてのマウント ポイントをスペースで区切ったリストに置き換えます。

より正確な方法は、fdiskまたはお好みのパーティション エディターを使用して、電卓で忙しくすることです。

$ fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 7.4 GiB, 7948206080 bytes, 15523840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00057540

Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        2048  186367  184320   90M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      186368 3667967 3481600  1.7G  5 Extended
/dev/mmcblk0p5      188416 3667967 3479552  1.7G 83 Linux

合計使用容量 (バイト単位) = 最後のパーティションの最終セクター X セクター サイズ (ここでは 3667967 x 512)。

GB での合計使用スペース = バイトでの合計使用スペース / 1024 3 (ここでは 1.749023 GB)。

たとえば、イメージを正確に 2 GB にする必要があると判断した場合、次のコマンドでそれが行われます。

dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048

結果のイメージには、最後のパーティションの最大範囲を超えるランダム ノイズも含まれます。

sudoアカウントがまだ十分な権限を持っていない場合は、上記のコマンドを忘れないでください。

私の目的では、データの最後のビットまで完全にトリミングされた画像は必要ないので、実際のサイズが 1.75 GB の場合、2 GB の画像で十分です。これにより、イメージ内にある残りの 6 GB (または 30 GB またはデバイスに余裕のあるもの) の未使用スペースが切り取られます。

ddマウントされたパーティションで実行してはならないアドバイスを多くの場所で見てきましたが、直感的に正しいと思われるため、それに従いました。それは自分自身をスケッチしようとしているように見えます.鏡の中でスケッチを作り、あなたが作っているスケッチもスケッチに見えるようにします. 少し大ざっぱです。

于 2014-11-13T13:25:51.177 に答える