バックアップは必ず取っておくこと。
losetup --partscan $(losetup -f) /home/your/images/imagefile.org.img
losetup -l
lsblk
mount /dev/loopNNp1 /mnt
fstrim -v /mnt
umount /mnt
e2fsck -f -y -v -C 0 /dev/loopNNp1
tune2fs -l /dev/loopNNp1
# tune2fsの結果から必要なfsのサイズを計算する(但し適当に大きくしておく)
# (BlockCount - FreeBlock) * BlockSize = fsの使用済みサイズ(単位Byte)
resize2fs -p /dev/loopNNp1 2356M
バーティションを削除して、小さくしたfsのサイズに合うよう調整したサイズで再確保し直す。
fdisk /dev/loopNN
fdisk (util-linux 2.33.1) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。
コマンド (m でヘルプ): p
ディスク /dev/loopNN: 14.6 GiB, 15677259776 バイト, 30619648 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x75e88d10
デバイス 起動 開始位置 最後から セクタ サイズ Id タイプ
/dev/loopNNp1 8192 30619647 30611456 14.6G 83 Linux
コマンド (m でヘルプ): d
パーティション 1 を選択
パーティション 1 を削除しました。
コマンド (m でヘルプ): n
パーティションタイプ
p 基本パーティション (0 プライマリ, 0 拡張, 4 空き)
e 拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p
パーティション番号 (1-4, 既定値 1): 1
最初のセクタ (2048-30619647, 既定値 2048): 8192
Last sector, +/-sectors or +/-size{K,M,G,T,P} (8192-30619647, 既定値 30619647): +2560M
新しいパーティション 1 をタイプ Linux、サイズ 2.5 GiB で作成しました。
パーティション #1 には ext4 署名が書き込まれています。
署名を削除しますか? [Y]es/[N]o: n
コマンド (m でヘルプ): w
パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。
lsblk -l
e2fsck -f -y -v -C 0 /dev/loopNNp1
resize2fs -p /dev/loopNNp1
fdisk -l /dev/loopNN
ディスク /dev/loopNN: 14.6 GiB, 15677259776 バイト, 30619648 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x75e88d10
デバイス 起動 開始位置 最後から セクタ サイズ Id タイプ
/dev/loopNNp1 8192 5251071 5242880 2.5G 83 Linux
dd if=/dev/loopNN of=imagefile.shrink.img bs=512 count=5251072 status=progress
# デタッチする
losetup -d /dev/loopNN
losetup --partscan $(losetup -f) /home/your/images/imagefile.shrink.img
losetup -l
fdisk -l /dev/loopNN
mount /dev/loopNNp1 /mnt
ls -al /mnt
適宜
umount /mnt
losetup -d /dev/loopNN