问题:无 SD 卡如何启动树莓派

环境:树莓派 4B+openwrt+ 群晖

解法:从网络启动 + tftp+nfs 挂载

背景说明:

在某个保密场景下,车间严禁使用 SD 卡和 U 盘,但树莓派需要 SD 卡才能启动,故需要一种无盘启动树莓派的解决方案

架构

步骤:

  1. 第一步还是需要一张带系统的 SD 卡,插入树莓派,正常进入系统,使用下列命令将树莓派设置为从网络启动
1
2
sudo raspi-config
Boot Options -> B4 Boot Order,选择B2 Network Boot,
  1. 拔卡重启,你可以看到屏幕上的 TFTP 字样,这样客户端网启已经设置完成了

  2. 设置 DHCP,我的路由器是 openwrt,修改 dhcp 服务配置如下:

1
2
3
vi /etc/dnsmasq.conf
#加入下列内容
pxe-service=0,"Raspberry Pi Boot"
  1. 在路由器上设置 TFTP 服务器和路径,虽然开了 TFTP 服务,但是不用他,路径指向别的服务器

这时候路由器上的配置已经做完了

  1. 设置 TFTP 服务,路由器空间有限,将 TFTP 起在群晖上,并设置目录

 6. 设置 NFS 服务,用来存放树莓派的操作系统 / 和 / BOOT 目录,这里同样使用群晖做 NFS 服务器

 7. 这个时候 NFS 服务器就做好了,插入 SD 卡到树莓派开机,在树莓派上挂载群晖的 nfs 目录到 / mnt/nfs

1
2
3
4
5
sudo rsync -xa --progress --exclude /mnt/nfs/ \
--exclude /etc/systemd/network/10-eth0.netdev \
--exclude /etc/systemd/network/11-eth0.network \
--exclude /etc/dnsmasq.conf \
/ /mnt/nfs/
  1. 将要装的软件、应用在树莓派上装好后开始上传文件到 NFS 上
1
2
3
4
5
sudo rsync -xa --progress --exclude /mnt/nfs/ \
--exclude /etc/systemd/network/10-eth0.netdev \
--exclude /etc/systemd/network/11-eth0.network \
--exclude /etc/dnsmasq.conf \
/ /mnt/nfs/
  1. 将树莓派的 / boot 目录拷贝到群晖 TFTP 的根目录,关机拔卡

  2. 设置树莓派的启动文件,直接在群晖上编辑:tftp 目录下的 cmdline.txt

1
console=serial0,115200 console=tty1 root = /dev/nfs nfsroot=192.168.31.ip:/你的nfs上的root目录,proto=tcp rw ip=dhcp rootwait elevator=deadline

  1. 修改上传到群晖上的根目录下的 /etc/fstab,挂载 / boot 为远程 NFS 目录
1
192.168.31.192:/volume1/USB/tftp /boot nfs defaults,vers=3,proto=tcp 0 0
  1. 至此全部完成,插网线重启树莓派,系统启动后 df -h 可以看到 / 和 / boot 为远程 NFS 目录