2つのパーティションを持つ4GB SDカードからのDDイメージがあります。これらの2つのパーティションは約800 MBしか使用していないため、imgファイルのサイズを小さくしたいと考えています。
Imgファイルから「空き領域」を削除する方法を知っている人はいますか?
まず、空き領域が実際に空であり、削除されたファイルの残りが含まれていないことを確認します。これを達成する最も簡単な方法は、ディスク上にnullバイトのみを含む巨大なファイルを作成し、それを削除することです。
# losetup --find --partscan foo.img
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 4096M 0 loop
├─loop0p1 259:0 0 2048M 0 loop
└─loop0p2 259:1 0 2048M 0 loop
# for part in /dev/loop0p*; do
mount $part /mnt
dd if=/dev/zero of=/mnt/filler conv=fsync bs=1M
rm /mnt/filler
umount /mnt
done
dd: error writing ‘/mnt/filler’: No space left on device
dd: error writing ‘/mnt/filler’: No space left on device
# losetup --detach /dev/loop0
次に、gzip
やxz
などのツールで圧縮します。最低の圧縮レベルでも、一連の長いゼロは十分に圧縮されます。
# ls -s
4096M foo.img
# gzip foo.img
# ls -s
11M foo.img.gz
イメージをディスクに書き戻すときは、解凍する必要があることに注意してください。これにより、「ライブ」で解凍されます。
# cat foo.img.gz | gunzip | dd of=/dev/sda
出力デバイス(sda)mustはoriginalイメージに適合するのに十分なサイズであることに注意してください。そうしないと、データが失われたり破損したりします。
画像を使い続けたい場合の別の方法–例仮想マシンで–生のイメージを仮想化ソフトウェアで使用されるイメージ形式の1つに変換します。例えばQemuの場合はqcow2、VirtualBoxの場合はVDI、VMwareの場合はVMDK。
このstillでは、上記の方法を使用して空き領域をクリーンアップしてイメージを準備する必要があることに注意してください。
# qemu-img convert -f raw -O qcow2 foo.img foo.qcow
# qemu-img convert -f raw -O vmdk foo.img foo.vmdk
しかし、それが実際のディスクに再度書き込まれる場合は、生のイメージに変換し直す必要があります。
resize2fs
の使用ははるかに簡単です
resize2fs -M xxx.img
最初にe2fsckを要求されます-そのため:
e2fsck -f -y xxx.img
(画像はマウントしないでください!)
注:これは、イメージが単一のパーティションである場合にのみ機能します。複数のパーティションを持つブロック全体のデバイスである場合は、上記の回答を参照してください...
私もqemu-imgで試してみましたが、それは魅力のように機能しました:
qemu-img resize test.img 2G
test.img
のサイズを変更して2G(2GB)にします。
私にとって完璧に働いた。
私はUbuntu 16.10コンピューターでgpartedアプローチを使用しました。
1)上記の以前の投稿で説明したように、imgファイルをlosetup
を使用して次に使用可能なループパーティションにマップします。
2)lsblk
を使用して、イメージファイルがマップされているループドライブを確認します。 /dev/loop0
3)Sudo gparted /dev/loop0
4)適切と思われるループパーティションを縮小します。これらのパーティションがアンマウントされていることを確認してください。
5)fdisk /dev/loop0
、次にp
と入力すると、さまざまなパーティションのブロックサイズと終了ブロック番号が表示されます。
6)dd if=/dev/loop0 of=shrunk_image_file.img
、そのコマンドにオプションを適用bs=[BlockSize]
およびcount=[EndBlockNumberOfLastLoopPartition+1]
すると、縮小されて権限が付与された画像ファイルが作成されます。