Ubuntu命令行下缩小磁盘镜像img文件尺寸

Ubuntu命令行下缩小磁盘镜像img文件尺寸

要解决的问题

一个固件包里的system.img, 尺寸是1GB, 里面的内容只有470MB, 在设备上写入的时候报超出大小了, 所以想把这个img调整为512MB

网上查了很多, 没有一个好用的, 最后还是通过gparted在图形界面下完成的. 记录一下过程

步骤

1. 调节分区大小

将img挂载到loop设备

# 找到第一个未使用的loop设备, 可以直接用这个loop设备, 也可以新建一个, 不要和其它应用重复就行
sudo losetup -f
# 将img挂载到 loop18 设备
sudo losetup /dev/loop18 system.img.old

用gparted对此loop设备进行修改, 注意一定要在命令行用/dev/loop18 作为参数, 否则直接启动gparted是不显示这个loop设备的. 如果是在 VNC Viewer里面, 用 sudo 可能会有问题, 可以不带sudo, 运行时会自动弹出授权输入密码的对话框

sudo gparted /dev/loop18

通过gparted打开之后, 可以在界面上调节分区的大小, 例如缩小分区, 保存

处理完成后, 取消loop设备挂载

sudo losetup -d /dev/loop18

2. 裁剪img大小

此时就可以根据分区的大小, 对img进行裁剪. 使用 fdisk 查看img里的分区情况.

fdisk -lu system.img.old

裁剪img, 原来的sector范围是 0 ~ 2097151 共 2097152, 保留一半为 2097152 / 2 = 1048576 sector大小 512 byte, 所以需要保留的size按 byte 就是 1048576 * 512 = 536870912

truncate --size=536870912 system.img.old

再挂载检查是否正确

# 挂载到loop设备
sudo losetup /dev/loop18 system.img.old
# 查看大小
sudo fdisk -lu /dev/loop18
# 挂载到文件系统, 检查文件是否挣钱
mount /dev/loop18 /mnt/mnt1/
# 取消文件系统挂载
sudo umount /mnt/mnt1
# 取消loop设备挂载
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

posted on 2019-12-20 20:15  Milton  阅读(4824)  评论(2编辑  收藏  举报

导航