家里的Dell服务器遭遇突然断电,硬盘坏了一块,加之服务器的噪音还是太大,而且上面也就跑了些简单的网络服务,实在太浪费。于是乘淘宝618买了一套Raspberry pi 4B准备替代Dell服务器做简单网络服务。据说树莓派最容易坏的就是那块sd卡,就想干脆配成无盘启动,都用家里的nas服务器做存储,一劳永逸!
升级Bootloader
树莓派缺省是没有network boot的,需要把network boot写到eeprom的option里面。当前的eeprom stable(2020年4月份以后的stable版本)已经支持,可以确认一下
1 | root@raspberrypi:/home/kcn# vcgencmd bootloader_version |
更新boot loader的配置需要eeprom的image,随便选了个最新的(2020-06-15)
1
2
3
4
5
6wget 'https://github.com/raspberrypi/rpi-eeprom/raw/master/firmware/stable/pieeprom-2020-06-15.bin'
sudo rpi-eeprom-config pieeprom-2020-06-15.bin > bootconf.txt #读缺省的配置
sudo vi bootconf.txt #把BOOT_ORDER增加2 原来是BOOT_ORDER=0xf41 现在 BOOT_ORDER=0xf241
sudo rpi-eeprom-config --out pieeprom-2020-06-15-netboot.bin --config bootconf.txt pieeprom-2020-06-15.bin
sudo rpi-eeprom-update -d -f ./pieeprom-2020-06-15-netboot.bin
sudo reboot当前boot loader的配置和版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15root@raspberrypi:~# vcgencmd bootloader_config
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
DHCP_TIMEOUT=45000
DHCP_REQ_TIMEOUT=4000
TFTP_FILE_TIMEOUT=30000
ENABLE_SELF_UPDATE=1
DISABLE_HDMI=0
BOOT_ORDER=0xf241
root@raspberrypi:~# vcgencmd bootloader_version
Jun 15 2020 14:36:19
version c302dea096cc79f102cec12aeeb51abf392bd781 (release)
timestamp 1592228179boot order的定义可以看:bootloader config
- 0x0 - NONE (stop with error pattern)
- 0x1 - SD CARD
- 0x2 - NETWORK
- 0x3 - USB device boot usbboot - Compute Module only.
- 0x4 - USB mass storage boot
- 0xf - RESTART (loop) - start again with the first boot order field.
记录一下本机的序列号
1
2
3
4
5
6
7
8
9root@raspberrypi:/# vcgencmd otp_dump | grep 28: | sed s/.*://g
57360526
或者用cpuinfo
root@raspberrypi:/# cat /proc/cpuinfo
....
Hardware : BCM2835
Revision : d03114
Serial : 1000000057360526 #最后8位
Model : Raspberry Pi 4 Model B Rev 1.4记下57360526这个序列号,在tftp下的目录要用。
设置fstab
- 设置/boot是远程的nfs
- 设置log和临时放到tmpfs,可以减少系统io。当然重启就会丢..
1
2
3
4
5
6
7
8root@raspberrypi:~# cat /etc/fstab
proc /proc proc defaults 0 0
192.168.2.45:/volume1/nfs/tftproot/57360526 /boot nfs defaults,vers=3,proto=tcp 0 0
tmpfs /tmp tmpfs defaults,noatime,nosuid,size=100m 0 0
tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=30m 0 0
tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=100m 0 0
tmpfs /var/run tmpfs defaults,noatime,nosuid,mode=0755,size=2m 0 0
tmpfs /var/spool/mqueue tmpfs defaults,noatime,nosuid,mode=0700,gid=12,size=30m 0 0
配置群晖
家里的群晖是兼任dhcp的,所以所有的配置都在群晖上完成。
配置dhcp,给它分配固定ip
nfs配置
增加一个共享文件夹nfs,并设置nfs权限。把当前系统拷贝到nfs里面
在nfs下面建了两个目录,tftproot和rpi4b-8g,分别放boot分区和根分区。
1 | mount 192.168.2.45:/volume1/nfs /mnt |
修改kernel启动参数
1
2cat /mnt/tftproot/57360526/cmdline.txt
console=serial0,115200 console=tty1 rw root=/dev/nfs nfsroot=192.168.2.45:/volume1/nfs/rpi4b-8g,v3,tcp ip=dhcp elevator=deadline rootwait配置tftp
启用tftp服务,把tftp的根文件夹设成nfs/tftproot配置pxe
群晖的pxe图形配置界面没法和树莓派配合,把群晖的pxe选项关闭。ssh登群晖服务器手动改配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14cd /etc/dhcpd/
ls
dhcpd-bond0.info dhcpd-bond0-subnet1.conf dhcpd-bond0-subnet3.conf dhcpd-dns-dns.conf dhcpd-pxe.conf wpad-bond0.conf
dhcpd-bond0-static.conf dhcpd-bond0-subnet1.info dhcpd-bond0-subnet3.info dhcpd-dns-dns.info dhcpd-pxe.info wpad-bond0.info
dhcpd-bond0-subnet0.conf dhcpd-bond0-subnet2.conf dhcpd.conf dhcpd.info dhcpd-pxe-setting
dhcpd-bond0-subnet0.info dhcpd-bond0-subnet2.info dhcpd.conf.leases dhcpd-leases.log tmp-dhcpd-leases.log
cat dhcpd-bond0-subnet3.conf
interface=bond0
pxe-service=0,"Raspberry Pi Boot"
dhcp-range=set:bond03,192.168.2.11,192.168.2.11,255.255.255.0,600
dhcp-option=tag:bond03,option:router,192.168.2.254
dhcp-option=tag:bond03,option:domain-search,home.kcn.cn
dhcp-option=tag:bond03,option:domain-name,home.kcn.cn
dhcp-option=tag:bond03,option:dns-server,192.168.2.45,192.168.2.42找到树莓派固定ip的配置文件,加上 pxe-service=0,”Raspberry Pi Boot” 这一行
大功告成
重启树莓派,拔掉sd卡,可以看到开始从网络启动。
1 | root@raspberrypi:/boot# df -h |
TroubleShooting
net: down on startup screen
check cableloop on startup screen
1
2YI: 192.168.2.11
SI: 192.168.2.45Dhcp with pxe option failed.Check dnsmasq config file.
block after “crng init done”
rootfs can’t mount, check cmdline.txt on tftproot.
- 本文作者: KCN
- 本文链接: https://www.kcn.me/2020/06/21/Raspberry-pi-4b-pxe-network-boot/
- 版权声明: 未经允许,请勿转载