树莓派是一个微型计算机硬件平台,为使其正常工作还需要安装操作系统。通常将树莓派操作系统烧录到SD卡上,再将SD卡插到树莓派上。加电启动后,树莓派就会从SD卡引导启动操作系统,开始工作。这里SD卡就相当于普通计算机的硬盘。下面记录在Debian Linux下烧录树莓派操作系统到SD卡的方法。
镜像烧录工具
Etcher
Etcher是树莓派官方推荐的镜像烧录工具。它采用图形界面,支持Windows、Linux、Mac,使用简单方便,推荐普通用户使用。
dd
Linux的dd命令用于复制文件并对原文件的内容进行转换和格式化处理。dd命令功能很强大的,对于一些比较底层的问题,使用dd命令往往可以得到出人意料的效果。用的比较多的还是用dd来备份裸设备。同样也可用dd命令烧录系统镜像。
使用dd命令必须非常小心,如果输出指定了错误分区,将摧毁该分区的所有数据。
Linux下镜像烧录过程
使用Etcher烧录镜像比较简单,重点介绍使用dd命令烧录镜像的方法。
查找sd卡设备
可使用lsblk或者fdisk命令查找sd卡存储设备。需要注意的是:
块设备以/dev/sdX命名,其中X是小写字母,例如/dev/sda。
测试时发现当计算机只有usb3.0接口时,将不识别usb2.0的sd读卡器。
烧录镜像到sd卡
将镜像烧录到sd卡
使用如下dd命令将树莓派镜像少量到sd卡:
1dd bs=4M if=-10-09-raspbian-stretch.img of=/dev/sdX conv=fsync
其中:
if=文件名:输入文件名,缺省为标准输入。即指定源文件。
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
conv=conversion:用指定的参数转换文件。
将压缩镜像烧录到sd卡
当文件系统不支持大于4GB的文件时,可使用利用管道技术烧录镜像,命令如下:
1unzip -p -10-09-raspbian-stretch.zip | sudo dd of=/dev/sdX bs=4M conv=fsync
检查烧录进度
默认情况下dd命令不给出烧录进度信息,最新的dd提供status=progress选项给出进度信息,命令如下:
1dd bs=4M if=-10-09-raspbian-stretch.img of=/dev/sdX status=progress conv=fsync
或者可使用dcfldd命令替换dd进行烧录操作。
检查镜像是否正确的烧录到sd卡
先使用dd命令将sd卡中内容复制到硬盘,在使用diff或者md5sum检查镜像文件与sd卡内容镜像之间的一致性。
之前dd命令烧录镜像到sd卡完成后会在shell中输出如下结果:
1
2
3xxx+0 records in
yyy+0 records out
yyyyyyyyyy bytes (yyy kB, yyy KiB) copied, 0.00144744 s, 283 MB/s
xxx是我们需要的,表示读取xxx块记录烧录到sd卡,xxx乘以bs=4M应该等于原始镜像的大小。
使用如下命令复制sd卡内容到硬盘上:
1
2# 经测试count命令没有其作用,该命令将整个sd内容复制到了硬盘,但我们期望只复制之前烧录到sd卡内容
dd bs=4M if=/dev/sdX of=from-sd-card.img count=xxx
如果from-sd-card.img文件大于原始镜像文件,那么先使用truncate命令将from-sd-card.img缩小到原始镜像文件的大小,命令如下:
1truncate --reference -10-09-raspbian-stretch.img from-sd-card.img
使用diff命令比较两者直接的一致性,如果不一致,可能烧录过程中有错误。
1diff -s from-sd-card.img -10-09-raspbian-stretch.img
使用sync命令强制将缓存写入硬盘,然后umount sd卡文件系统,最后移除sd卡。
参考文献