author:Lei
参考博客:
环境需求
- ubuntu
- gparted包
- truncate命令
安装Gparted
ubuntu命令行执行
sudo apt-get install gparted
Part1: TF卡制作系统镜像
准备
- 待操作的TF卡、读卡器、Ubuntu电脑。
- 需在Ubuntu系统下操作,而且电脑磁盘空间需大于TF卡存储空间
- 如果电脑磁盘空间不够,使用移动硬盘也可以
操作
- 插入TF卡和读卡器到电脑,命令行查看TF卡磁盘号
sudo parted -l
- 进入root模式下进行镜像制作
sudo -i
sudo dd if=/dev/sdb | gzip>path/ImgName.img.gz
/dev/sdb对应查看的TF卡磁盘号
监控
- 新建终端,执行
sudo watch -n 1 pkill -USR1 -n -x dd
执行完后,按Ctrl+D退出
Part2: 裁剪镜像文件大小
问题:上述操作TF制作出的镜像文件大小与TF卡容量一致,比如一个128G卡制作出的镜像也是128G,但是尴尬的是在向一张新的128GTF卡中烧录镜像时,会失败
准备
- 安装Gparted
- Ubuntu电脑
- path/ImgName.img.gz解压出path/ImgName.img
操作
- 将镜像文件导入Ubuntu系统/将包含镜像文件的移动硬盘插入Ubuntu电脑
- 开启 loopback 并寻找可用设备
sudo modprobe loop
sudo losetup -f
终端会输出当前空闲的loop,比如/dev/loop15
- 将镜像挂载到loop设备中
sudo losetup /dev/loop15 path/ImgName.img
sudo partprobe /dev/loop15
运行第二条命令后后才会出现分区/dev/loop15p1,/dev/loop15p2
- 检查/dev/loop15p2
sudo e2fsck -f /dev/loop15p2
- 使用Gparted查看并调整镜像分区大小
sudo gparted /dev/loop15
右键选择调整大小/移动®,拖动右侧条或者输入大小
点击右下角调整大小/移动,点击右上角编辑应用全部操作
- truncate裁减镜像文件
目的:裁减掉文件中未分配的部分
查看镜像文件信息:
fdisk -lu path/ImgName.img
输出如下:
> 注意扇区大小512字节,末尾扇区114530303两个数据
执行裁减:
truncate --size=$[(114530303+1)*512] path/ImgName.img
- 查看结果:右键文件属性即可查看大小
- 解除loop设备
sudo partprobe -d /dev/loop15
sudo losetup -d /dev/loop15
Part3: 烧录后扩展系统可使用空间
准备
- Gparted
操作
- 进入烧录好的系统执行
sudo gparted
- 在Gparted中,调整分区大小适应整个TF卡大小并应用操作
尝试过其他方法,包括QEMU-IMG、PiShrink等,奈何本人能力有限,没能成功..... 在此记录尝试且成功的方法。