svg

Shrink Disk Image

linux

Raspberry Pi milikku mengalami I/O yang terasa lambat, yang menjadi indikasi bahwa aku perlu mengganti microSD. Maka, aku membuat image dari microSD 16GB bawaan Raspberry Pi. Proses pembuatan image berjalan lancar tanpa kendala dengan bantuan gnome-disk-utility.

Namun, saat aku mencoba me-restore image tersebut ke microSD SanDisk 16GB, terjadi galat. Disk image ternyata lebih besar beberapa megabyte dibandingkan dengan kapasitas target. Ini bukan hal yang mengejutkan karena biasanya ukuran kapasitas microSD 16GB tidak sepenuhnya 16GB, dan setiap merek memiliki ukuran aktual yang berbeda.

Agar disk image tersebut dapat di-restore ke microSD baru, aku perlu melakukan proses shrink. Dengan modal googling, aku menemukan artikel yang sangat bermanfaat di softwarebakery.com. Berikut adalah langkah-langkahnya:

  1. Persiapkan Loopback Device

Pertama, aktifkan modul loop dan hubungkan disk image ke loopback device:

sudo modprobe loop
export myloopbackdevice=$(sudo losetup -f)
sudo losetup $myloopbackdevice myimage.img
sudo partprobe $myloopbackdevice
sudo gparted $myloopbackdevice

Saat GParted terbuka, lakukan resize pada partisi root Raspberry Pi. Dalam kasusku, aku mengecilkan partisi menjadi 12GB sehingga menyisakan ruang kosong yang tidak teralokasi. Setelah selesai resize, klik “Apply” untuk menerapkan perubahan.

  1. Lepaskan Loopback Device

Setelah resize berhasil, lepaskan loopback device:

sudo losetup -d $myloopbackdevice
  1. Tentukan Ukuran Baru Disk Image

Periksa informasi partisi pada disk image untuk mencatat ukuran blok dan posisi akhir partisi:

fdisk -l myimage.img

Dari output, catat Block-size unit (dalam kasusku 512) dan End partisi terakhir (dalam kasusku 12884901888).

  1. Shrink Disk Image

Gunakan perintah berikut untuk memangkas ukuran disk image:

truncate --size=$[(12884901888+1)*512] myimage.img

Perintah ini akan memotong ukuran file disk image sesuai dengan posisi akhir partisi terakhir, ditambah satu unit blok.

Setelah proses shrink selesai, disk image siap untuk di-restore ke microSD baru. Dengan cara ini, aku berhasil mengatasi kendala perbedaan ukuran microSD antar merek dan memastikan Raspberry Pi kembali berfungsi dengan normal. Setelah boot ke Raspberry Pi, jangan lupa untuk expand filesystem dan reboot.

sudo raspi-config --expand-rootfs
sudo systemctl reboot