要解決的問題
一個固件包里的system.img, 尺寸是1GB, 里面的內容只有470MB, 在設備上寫入的時候報超出大小了, 所以想把這個img調整為512MB
網上查了很多, 沒有一個好用的, 最后還是通過gparted在圖形界面下完成的. 記錄一下過程
步驟
將img掛載到loop設備
sudo losetup -f sudo losetup /dev/loop18 system.img.old
用gparted對此loop設備進行修改, 注意一定要在命令行用/dev/loop18 作為參數, 否則直接啟動gparted是不顯示這個loop設備的
sudo gparted /dev/loop18
處理完成后, 取消loop設備掛載
sudo losetup -d /dev/loop18
.查看img里的分區情況, 進行裁剪, 這個536871424是根據這個算出來的: 原來的塊數是2097152, 需要保留的塊數是 2097152 / 2 + 1 = 1048577, 每塊大小512, 所以 1048577 * 512 = 536871424
fdisk -lu system.img.old truncate --size=536871424 system.img.old
再掛載檢查是否正確
sudo losetup /dev/loop18 system.img.old sudo fdisk -lu /dev/loop18 mount /dev/loop18 /mnt/mnt1/ sudo umount /mnt/mnt1 sudo losetup -d /dev/loop18
.
Gparted中操作涉及的命令行
從截圖可以看到, 這些是可以通過命令行實現的,
涉及的命令有:
# check file system e2fsck -f -y -v -C 0 '/dev/loop18' # shrink file system resize2fs -p '/dev/loop18' 524288K