31786浏览
查看: 31786|回复: 7

[教程] 【树莓派真好玩】3条命令制作并压缩树莓派镜像

[复制链接]
本帖最后由 极凹甫 于 2022-4-29 10:36 编辑

树莓派真好玩

本篇文章解决2个问题:
1、如何制作定制的树莓派镜像?
2、如何压缩树莓派镜像到合适的大小?
需要准备的内容:
1、一台linux主机
2、一张你定制好的树莓派tf卡,也就是说在树莓派tf卡上已经安装好你所需的定制内容。


最近玩基于树莓派的Donkeycar,需要分享安装好的树莓派镜像,有车友问如何制作的?
这样既方便自己备份镜像,也给刚刚入门的朋友更快的安装Donkeycar在树莓派上。
如果你也有自己特色的镜像,不妨使用下面的3条命令制作树莓派镜像。

# 查看tf卡的挂载情况
sudo fdisk -l
# 制作树莓派的原始镜像文件
sudo dd if=/dev/sdb of=./rasp1.img bs=512 count=31116288 status=progress
# 压缩输出最终的树莓派定制镜像
sudo ./pishrink.sh -Za rasp1.img

将你的树莓派tf卡,插入到电脑上(电脑是linux系统)


1、 使用fdisk 查看tf卡的挂载情况
fdisk -l 命令会列出你电脑上硬盘的情况, 注意查找你的tf卡挂载的路径。
  1. wanwu@Wanwu-HP:~$ sudo fdisk -l
  2. Disk /dev/sda: 232.91 GiB, 250059350016 bytes, 488397168 sectors
  3. Disk model: Hitachi HTS72502
  4. Units: sectors of 1 * 512 = 512 bytes
  5. Sector size (logical/physical): 512 bytes / 512 bytes
  6. I/O size (minimum/optimal): 512 bytes / 512 bytes
  7. Disklabel type: dos
  8. Disk identifier: 0xfaa1a705
  9. Device     Boot   Start       End   Sectors   Size Id Type
  10. /dev/sda1  *       2048   1050623   1048576   512M  b W95 FAT32
  11. /dev/sda2       1052670 488396799 487344130 232.4G  5 Extended
  12. /dev/sda5       1052672 488396799 487344128 232.4G 83 Linux
  13. Disk /dev/sdb: 14.86 GiB, 15931539456 bytes, 31116288 sectors
  14. Disk model: Storage Device  
  15. Units: sectors of 1 * 512 = 512 bytes
  16. Sector size (logical/physical): 512 bytes / 512 bytes
  17. I/O size (minimum/optimal): 512 bytes / 512 bytes
  18. Disklabel type: dos
  19. Disk identifier: 0x43f8c1cd
  20. Device     Boot  Start      End  Sectors  Size Id Type
  21. /dev/sdb1         8192   532479   524288  256M  c W95 FAT32 (LBA)
  22. /dev/sdb2       532480 31116287 30583808 14.6G 83 Linux
复制代码
上面命令执行后,会看到如上记录, Disk  /dev/sdb   是一个14.86Gb的一个挂载点, 这个就是树莓派的tf卡。
如果你的电脑硬盘分区比较多,请认真找到 tf挂载路径。
然后找到下面这一段, 其中红色的字31116287   记下来, 后面的命令会用到。   
Device Boot Start End Sectors Size Id Type
/dev/sdb1 8192 532479 524288 256M c W95 FAT32 (LBA)
/dev/sdb2 532480 31116287 30583808 14.6G 83 Linux

2、使用dd制作一个镜像

dd命令用于读取、转换并输出数据;  if 是数据源,树莓派tf卡的挂载目录/dev/sdb, of是输出数据,树莓派镜像文件rasp1.img
count的值是上面记录的31116287+1,  这个+1 一定要有;
status=progress 是显示数据输出的进度;如果你没有安装progress是看不到进度的。
这个过程时间很长,如果一个16G的盘,大约时间是15~20分钟。

  1. wanwu@Wanwu-HP:~$ sudo dd if=/dev/sdb of=./rasp1.img bs=512 count=31116288 status=progress
  2. 15919596032 bytes (16 GB, 15 GiB) copied, 899 s, 17.7 MB/s
  3. 31116288+0 records in
  4. 31116288+0 records out
  5. 15931539456 bytes (16 GB, 15 GiB) copied, 899.672 s, 17.7 MB/s
复制代码

命令制作完成,img文件就是一个树莓派镜像, 这个镜像是完全可以使用的。
但是这个镜像文件中有很多数据是空白的,无效的,而且这个镜像文件会很大。 就用下面的命令进行压缩输出。

3、使用pishrink来压缩你的镜像

pishrink 是一个自动化脚本可以压缩树莓派镜像。 下载路径https://github.com/Drewsif/PiShrink
执行下面的命令, 预计时间半个小时。
  1. wanwu@Wanwu-HP:~$ sudo ./pishrink.sh -Za rasp1.img
复制代码


这个命令执行完成, 会有一个 rasp1.img.xz文件形成, 这个文件是最终需要分享的镜像文件。






pATAq  版主

发表于 2022-4-28 23:27:01

这个做出来的镜像会自动清除ssh公钥,并在首次启动时创建公钥吗
回复

使用道具 举报

极凹甫  初级技师
 楼主|

发表于 2022-4-29 10:05:52

pATAq 发表于 2022-4-28 23:27
这个做出来的镜像会自动清除ssh公钥,并在首次启动时创建公钥吗
  1. pishurink.sh  Usage: $0 [-adhrspvzZ] imagefile.img [newimagefile.img]
  2.   -s         Don't expand filesystem when image is booted the first time
  3.   -v         Be verbose
  4.   -r         Use advanced filesystem repair option if the normal one fails
  5.   -z         Compress image after shrinking with gzip
  6.   -Z         Compress image after shrinking with xz
  7.   -a         Compress image in parallel using multiple cores
  8.   -p         Remove logs, apt archives, dhcp leases and ssh hostkeys
  9.   -d         Write debug messages in a debug log file
复制代码
版主一看就是老炮儿,  使用pishrink压缩镜像,是有机会出现ssh的问题。 其中有个参数 -p , 可以remove ssh hostkeys。
但是如果使用-p参数,会造成一个情况ssh是Enable的,同一个网络中无法连接的问题。  需要接上显示器,启动raspi-config,重新设置一下ssh enable。
如果不使用-p参数,ssh是可以连接。


这个也仅仅是我的经验, 但是详细具体的情况,可能还需要测试。
回复

使用道具 举报

yoyojacky  初级技匠

发表于 2022-4-29 17:12:20

对, 就是这个步骤. 我之前这么做的,但是在备份的时不小心删掉了. 我最小的一个镜像精简到了 2.4GB
阿钟,我们如果不用图形界面的话,可以更精简一些的.
回复

使用道具 举报

yoyojacky  初级技匠

发表于 2022-4-29 17:21:25

还有一种方法,不用全部系统打包出来.【树莓派真好玩】3条命令制作并压缩树莓派镜像图1
实际上用 df -Th 看到的磁盘空间使用率只有 4.8G
如果将系统以 5G 的大小打包, 可以使得原始镜像就小于 磁盘原始大小的 16GB 或者我这里看到的64GB, 我们可以尝试用 gparted 重新构建分区表.
缩减分区大小,不过你的方法已经是最简单了.哈哈
回复

使用道具 举报

pATAq  版主

发表于 2022-4-30 11:15:56

试试把这里面的改动合并进最新的脚本,应该可以解决 ssh 的问题,并删除 bash 历史
Source:https://github.com/bg-master/PiShrink
Target :https://github.com/Drewsif/PiShrink
diff:With option -p delete also users bash history,Generate host keys on first boot with option -p
回复

使用道具 举报

极凹甫  初级技师
 楼主|

发表于 2022-5-26 09:36:21

pATAq 发表于 2022-4-30 11:15
试试把这里面的改动合并进最新的脚本,应该可以解决 ssh 的问题,并删除 bash 历史
Source:https://github ...

赞赞赞!!!!
回复

使用道具 举报

yoyojacky  初级技匠

发表于 2022-6-29 16:25:25

history -c 删除bash历史记录
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail