要解决的问题
一个固件包里的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