需求

因为项目上需要使用树莓派,开发的时候利用一块树莓派进行系统配合开发。开发完毕后,需要将这块树莓派的系统以及程序复制到其它树莓派上,这就需要将这块树莓派的系统连带程序进行镜像备份。

我使用的是64GTF卡,因为项目中会实时保存一些图片,所以需要容量大一些的TF卡,这就出现了一个问题,在项目初始化的时候,因为图片还没有写入,TF卡占用并不大,系统带程序总共也就7G左右,但是做镜像的时候是把整个卡都镜像,也就是说除了系统和程序,被分区但没有使用的空间也一起镜像了,一个镜像的大小是64G。每次将镜像烧录至新卡耗时都很长,而且64G的一个镜像移动存储都是个麻烦事,所以想将镜像瘦身。想将没有使用的空间剥离出镜像。

踩坑经过

经过连续踩坑,最后发现还是Linux下做镜像瘦身最方便。

先记录一下踩的坑。如果对踩坑没有兴趣,可以直接跳到下一节“光明大道”。

一 、Win32DiskImager

在Windows下用使Win32Diskmager进行镜像制作。 将做好系统和程序的TF卡,用读卡器连接Windows电脑,然后通过Win32DiskImager的Read,将TF卡制作成镜像,但是这样做完的镜像大小就是64G。

在网上找了很多方法再加上镜像本身较大,在移动,复制,瘦身的时候简直就是地狱般的感受,结果大多数都没有办法成功。比如:在网上找了很多脚本,这些脚本大多是linux下的进行的,将64G大小的镜像先Copy到U盘或者移动硬盘上,再找一台Linux机器复制进去,然后在Linux机器上运行网上找的各种瘦身脚本,然后漫长的待以后,结果不是在瘦身过程中报错,就是在瘦身后的img插回树莓派没有办法启动。

二、分驱精灵配合Win32DiskImager

然后又找到了一个纯Windows下的操作,将做好系统的TF卡,通过读卡器与Windows连接,此时能读出来两个分区,一个是boot(fat),一个rootfs(ext4)分区,然后通过『分区精灵』等磁盘管理工具将ext4分区进行分区大小调整,调小后再通过Win32DiskImager的Read进行镜像制作,此时需要将Win32DiskImager中的『仅读取已分配分区』勾选上,就能制作最小镜像。本来以为找到了救命稻草,结果在使用分区精灵工具的时候直接判了死刑!!!!因为超级块的数量和分区精灵读取出来的数量不一致,操作分区调整的时候直接报错了。。。。

踩过坑以后,就是光明大道,虽然还是很坎坷。

光明大道

纯Windows下实在行不通,怎么也得借助Linux,那不如纯Linux吧,制作镜像以及烧录镜像都在Linux下完成,主要使用dd命令。

注意:linux主机的磁盘空闲空间一定要 > TF卡的容量。

用读卡器将TF卡与Linux主机相连

一、制作镜像

使用fdisk -l查看分区信息

fdisk -l

这里可以看到sdb2的起点和末尾扇区,以及sdb一个扇区单元的大小, 使用dd命令进行镜像制作 (bs为一个扇区/块的大小,从fdisk -l命令中可以查看到)

sudo dd if=/dev/sdb of=./imgname.img bs=512

二、压缩镜像

方法一:

参考项目
https://github.com/Drewsif/PiShrink中的描述下载提供好的脚本

然后通过命令运行脚本

sudo pishrink.sh [-s] imgname.img imgname_small.img

一旦使用-s参数,那么脚本首先要把镜像复制一份出来,在新复制的镜像上进行压缩操作,这就需要有较大的存储空间,比如要压一个64G的镜像,那么就需要>64Gx2的存储空间,并且刚刚满足64GX2都不行,必须还要再多出来10G左右的空间。现在是64G的卡,如果将来我用128G的卡甚至于512G的卡,那么就根本没有办法先复制再压缩了。只能选择不带参数的镜像压缩。

方法二:

安装gparted,该软件类似于windows下的分区助手,分区精灵,但是要调整分区大小就必须先卸载要操作的分区。所以如果要操作带系统的分区,就必须用引导盘启动后再进行调整分区操作。好在我们现在只是用来修改TF卡的分区大小,只要卸载TF卡即可操作。

sudo apt-get install gparted

安装完成后打开软件,选择TF卡的分区

卸载分区(不卸载不能操作调整分区大小)

卸载后选择更改大小/移动

淡黄色的块为已使用的空间,白色的块为未使用的空间。不能紧贴着已使用空间缩减,多少留一点空间。这里我给到6.5G。

然后点击“调整大小/移动”按钮进行操作。这样就多出来54G多的空余空间。

再用fdisk -l查看一下分区

sudo fdisk -l

可以看到sdb2的大小、起始、末尾信息。这里的末尾就是操作完调整分区大小后的末尾扇区。那么在接下来的dd命令中,可以使用count=末尾+1(为什么+1这一块,还没有深入了解,好像是从0开始记录的,所以需要+1)来实现制作镜像的节止点,这样就能保证做好的镜像在6.4G左右,没有多余的空间。等后面有时间了,再好好研究一下dd命令,看看有没有办法不需借助分区工具调整大小,就能直接知道所用空间的末尾。直接做出来最小镜像。

sudo dd if=/dev/sdb of=./imgname.img bs=512 count=13836288

通过以上两个方法,就可以对镜像进行压缩。

三、镜像烧录

其实就是dd命令将目标和源互换一下就行:

sudo dd if=./imgname.img of=/dev/sdb bs=512

把做好镜像的TF卡插回树莓派上启动,进入系统后使用raspi-config对文件系统扩展使用全部TF卡空间。

以上就是树莓派镜像制作、压缩、烧录到新卡的全部操作记录。

注:如果使用的是第三方系统,可以参考另一篇“树莓派使用非官方系统,安装raspi-config管理工具”,安装raspi-config工具,方便进行设置。

为树莓派制作系统镜像时进行瘦身,方便后续保存与批量写入相关推荐

  1. 【Jenkins】Jenkins容器构建脚本以及容器瘦身docker-slim使用

    说明 当前为构建的脚本,部署脚本后面有时间再编写然后发出来,然后里面包含容器瘦身工具 docker-slim 的配置,具体的部署使用方式后面再单独写,话不多说,直接上代码(我的风格喜欢直接上代码) d ...

  2. win10休眠占系统内存怎么办?给win10的休眠文件做个瘦身

    在windows10操作系统中我们可以系统的休眠功能,来帮助我们在特殊情况下让电脑处于家关机状态,保持所有程序原来的样子,在休眠恢复后即可继续进行当前操作,这个功能非常的使用方便.但是休眠功能在win ...

  3. 【树莓派】制作树莓派最小镜像:img裁剪瘦身

    摘录部分要点内容如下(如果作者不允许转载,请联系即删除): 一.查看当前系统所占容量  用Win32DiskImager来制作镜像时是将sd卡正卡全部做成镜像,是因为无法读取到linux分区的原因,所 ...

  4. 如何给Docker镜像瘦身?

    在本文中,你将了解如何加快Docker构建周期并创建轻量级镜像.还是用比喻来说吧,给Docker镜像瘦身就跟我们减肥一样,减肥时期我们吃沙拉,拒绝披萨.甜甜圈和百吉饼. 这是备忘单. FROM:指定基 ...

  5. Docker系列之镜像瘦身(五)

    本节我们来讲讲在我们在构建镜像过程中不出问题,同时使得最后所构建的镜像文件大小尽可能最小. 缓存(cache) Docker的优势之一在于提供了缓存,加速镜像迭代构建,我们知道构建镜像使用docker ...

  6. Docker镜像瘦身与优化

    为什么在存储如此便宜的今天我们仍然需要对Docker镜像进行瘦身? 小镜像的优点 加速构建/部署.虽然存储资源较为廉价,但是网络IO是有限的,在带宽有限的情况下,部署一个1G的镜像和10M的镜像带来的 ...

  7. Docker镜像瘦身

    Docker 是一个用于开发,交付和运行应用程序的开发平台. 它能够将应用程序和基础架构分开,保证开发,测试, 部署的环境完全一致,从而达到快速交付的目的. 但是在实际项目中,会对项目中的模块或者服务 ...

  8. 如何优雅的将 Docker 镜像从 1.43G 瘦身到 22.4MB

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! Docker 镜像的大小对于系统的 CI/CD 等都有影响,尤其是云部署场景.我们在生产实践中都会做瘦身的操作,尽 ...

  9. 镜像瘦身:每一层都不能放过

    网上很多人都说镜像瘦身需要把所有命令放在一条来执行,这没有错,但只是问题表象,没有触及本质. 当我打了一个带源码编译的镜像,结果异常庞大,明明已经删了源码包,为什么还那么大呢?当我想尝试放在一条命令时 ...

  10. WINXP终极瘦身、优化、封装全攻略 万能WinXP Ghost镜像制作指南

    WINXP终极瘦身.优化.封装全攻略 万能WinXP Ghost镜像制作指南 重装系统可不是一件好玩的事情:首先得端坐在电脑桌前老老实实地回答windows安装程序提出的问题,安装好了呢,也不能闲着, ...

最新文章

  1. 《JavaScript面向对象精要》——1.8 原始封装类型
  2. 用P3P header解决IE下iframe跨域访问时候session丢失的问题
  3. HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))
  4. python量化交易2019_2019 量化交易策略实盘总结和一些展望
  5. PHP 获取JSON json_decode返回NULL解决办法
  6. linux进程上下文切换,Linux 性能分析总结之 CPU 上下文切换(二)
  7. 前端学习(2661):生命周期
  8. 微课|玩转Python轻松过二级:第3章课后习题解答5
  9. 进制转换 [2008年北京大学图形实验室计算机研究生机试真题]
  10. rhel5编译安装2.6.29.2内核
  11. dubbo源码解析之服务发布与注册
  12. 【机械】如何用SOLIDWORKS进行ArtCam雕刻机排版
  13. 一文读懂运放偏置电流和输入失调电流
  14. Intel早期的CPU和现在MCU相比,表现如何?
  15. Zybo构建Linux Linaro系统
  16. javascript中function前面加(/!/+/-/~的含义
  17. Vue 项目如何进行 SEO 优化
  18. 数据中台稳定性的“四高” | StartDT Tech Lab 18
  19. python调用oracle
  20. android 下拉列表动画,android下拉列表空间Spinner的三种使用方法

热门文章

  1. 中国互联网络发展状况统计报告计算机,中国互联网络发展状况统计报告-计算机网络信息中心.DOC...
  2. 论文投递,核心期刊目录(2017版)
  3. Ubuntu 软件安装方法(入门必看)
  4. 经纬度计算距离公式(测地线距离)
  5. 综合项目之闪讯破解(二)之 如何用C++建立PPPOE连接
  6. AWS携手光环云助力2019第三届“中信建投证券杯”世界智能围棋公开赛
  7. ccccccccccc
  8. 人工智能——状态空间的启发式搜索
  9. qq连连看java版_Java实战_仿QQ连连看
  10. VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表