🤏
Raspberry Pi のディスクイメージを小さくする
はじめに
Raspberry Pi に限らず、SBC などのストレージをクローンするときに、ディスクイメージのサイズを小さくしたい場面があります。
- バックアップの容量を節約したい
- より小容量のストレージに移植したい
そんなときに使えるディスクイメージの作成手順をまとめておきます。
パーティションサイズの変更
以降、空き容量が大きいパーティションを /dev/mmcblk0p2
として例示します。
ファイルシステムのサイズを一旦最小にする
まず、ファイルシステムをチェックします。
$ sudo e2fsck -f /dev/mmcblk0p2
ファイルシステムをシュリンクするために、最小サイズを確認します。
$ sudo resize2fs /dev/mmcblk0p2 1
結果例
resize2fs 1.46.5 (30-Dec-2021)
resize2fs: New size smaller than minimum (300279)
minimum ()
の数値でファイルシステムをシュリンクします。
$ sudo resize2fs /dev/mmcblk0p2 300279
結果例
resize2fs 1.46.5 (30-Dec-2021)
Resizing the filesystem on /dev/mmcblk0p2 to 300279 (4k) blocks.
The filesystem on /dev/mmcblk0p2 is now 300279 (4k) blocks long.
パーティションのサイズを決める
パーティションのサイズをシュリンクします。
fdisk でストレージを指定します(mmcblk0p2
ではなく mmcblk0
)。
$ sudo fdisk /dev/mmcblk0
p
コマンドで対象パーティションの Start
位置を確認しておきます。
結果例
Command (m for help): p
Disk /dev/mmcblk0: 3.8 GiB, 4008706048 bytes, 7829504 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: 0xb4ad033e
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 137215 129024 63M c W95 FAT32 (LBA)
/dev/mmcblk0p2 137216 7829503 7692288 3.7G 83 Linux
d
コマンドで、対象パーティションを一旦削除します。
結果例
Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 has been deleted.
n
コマンドでパーティションを作り直します。
このとき、First sector
は上記で確認した Start
位置にします。
また、Last sector
は +
で目的のサイズを指定します。下の例では、全パーティションの合計が 2GB に収まるように、+1.8
を指定しています。
結果例
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (137216-7829503, default 137216): 137216
Last sector, +sectors or +size{K,M,G,T,P} (137216-7829503, default 7829503): +1.8G
Created a new partition 2 of type 'Linux' and of size 1.8 GiB.
w
コマンドでパーティション変更を実行します。
結果
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
ファイルシステムのサイズを最大化する
ファイルシステムをパーティションのサイズの限界までエクスパンドして、ファイルシステムをチェックします。
$ sudo resize2fs /dev/mmcblk0p2
$ sudo e2fsck -f /dev/mmcblk0p2
ディスクイメージの作成
パーティション構成を確認します。
$ sudo fdisk -l /dev/mmcblk0
結果例
Disk /dev/mmcblk0: 3.8 GiB, 4008706048 bytes, 7829504 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: 0xb4ad033e
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 137215 129024 63M c W95 FAT32 (LBA)
/dev/mmcblk0p2 137216 3872767 3735552 1.8G 83 Linux
確認したブロックサイズと End
の値を指定してディスクイメージを作成します。
$ dd if=/dev/mmcblk0 bs=512 count=3872767 status=progress | gzip -c > /path/backup.img.gz
Discussion