树莓派4B开箱、启动、配置DDNS与备份

主要性能参数:

CPU:博通BCM2711四核A72(64位)@1.5GHz(可超频至2.0GHz,下文详细介绍)

GPU:VideoCore VI @ 500MHz(可超频至600MHz),支持OpenGL ES 3.x,H.265 (4kp60 decode), H264 (1080p60 decode, 1080p30 encode)

RAM:1/2/4 GB可选,我的是4GB版本

USB3.0×2,USB2.0×2

Gigabit Ethernet,2.4Ghz/5.0GHz Wireless,Bluetooth 5.0(BLE)

2 × micro-HDMI ports @4kp60

另外有非常遗憾的两点,一是在4B上见不到TF读卡器的任何性能提升,二是树莓派官方仍然没有编译64bit的Raspbian。对于第一点,4b不像3B+一行配置就能开启USB启动。4B暂时还需要在/boot/cmdline.txt中使用修改PARTUUID的方式实现USB启动。

……

开箱

平平无奇,两图带过。电路图官网有,比我拍得好。


安装

进入正题,和其它任意型号的树莓派一样,4B可以通过预烧录固件来启动。

预先准备SD Card Formatter(SD卡协会官方下载)Win32DiskImager以及Raspbian镜像

准备一张兼容的TF卡(实测三星EVO Plus 128G正常)插到电脑上,使用SD Card Formatter格式化此卡。

接着使用Win32DiskImager烧录到TF卡,建议烧录前先校验镜像。

烧录完成后有可能会弹出格式化提示,绝对不要点格式化!!

如果是无显示器无网线的完全无头安装,那么打开我的电脑,进入TF卡的boot分区,新建一个ssh文件,以及wpa_supplicant.conf

wpa_supplicant.conf中写入[1]

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN

network={
ssid="你的WIFI名称"
psk="你的WIFI密码"
}

安全移除TF卡,把TF卡插入树莓派,通电等待开机。

如果你是windows10,可以在设置->应用->应用和功能->可选功能中添加OpenSSH客户端

然后可以使用IP连接:ssh pi@树莓派的IP

懒得找IP的可以在同一局域网下用主机名连接:ssh pi@raspberrypi

接着参考树莓派官方文档在SSH中使用raspi-config命令进行配置。

安装GPIO库之类的东西这里就不多说了,不是这篇博文的重点。接下来讲的是超频、DDNS和备份。


超频

vim /boot/config.txt

在文件末尾加入:

force_turbo=0
arm_freq=1800
gpu_freq=600
over_voltage=5

其中,force_turbo为强制超频,参数为布尔值,设为1将失去保修,不建议设为1!arm_freq为cpu核心频率,单位MHz,最高2000,但需要超电压等级(over_votage)至少为6,设置超频到1.8GHz只需要5以下的超电压等级。gpu_freq为gpu频率(MHz),最高设置为600。

超频后CPU很容易升到70摄氏度以上,注意降温。我这里采取的是超级炸裂酷炫之冰镇树莓派法,接近零摄氏度的冷却介质流过去,核心温度仍然有23摄氏度……


DDNS

我这里使用的是Cloudflare的API以动态解析IPv6以及不开启CDN为例(动态解析IPv4和开启CDN在下面也有说明),首先将NS转移到Cloudflare,然后获取API Token,将以下shell脚本保存到/home/pi/ddns.sh,根据你的实际情况修改并保存。

#!/bin/bash
auth_email="改成你的邮箱"
auth_key="改成你的API Token"ip=$(curl -s http://ipv6.icanhazip.com)
ip_file="ip.txt"
id_file="cloudflare.ids"

zone_name="改成你的根域名"
record_name="改成你的二级域名"

if [ -f $ip_file ]; then
old_ip=$(cat $ip_file)
if [ $ip == $old_ip ]; then
echo "IP未改变"
exit 0
fi
fi

if [ -f $id_file ] && [ $(wc -l $id_file | cut -d " " -f 1) == 2 ]; then
zone_identifier=$(head -1 $id_file)
record_identifier=$(tail -1 $id_file)
else
zone_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*' | head -1 )
record_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json"  | grep -Po '(?<="id":")[^"]*')
echo "$zone_identifier" > $id_file
echo "$record_identifier" >> $id_file
fi

update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" --data "{\"id\":\"$zone_identifier\",\"type\":\"AAAA\",\"name\":\"$record_name\",\"content\":\"$ip\",\"proxied\":false}")

if [[ $update == *"\"success\":false"* ]]; then
message="API UPDATE FAILED. DUMPING RESULTS:\n$update"
log "$message"
echo -e "$message"
exit 1
else
message="IP changed to: $ip"
echo "$ip" > $ip_file
log "$message"
echo "$message"
fi

配置开机启动:在/etc/rc.localexit 0的上一行写入sh /home/pi/ddns.sh
配置定期检查:sudo crontab -e 写入*/30 * * * * sh /home/pi/ddns.sh

如果要使用Cloudflare的CDN服务,将update这一行

update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" --data "{\"id\":\"$zone_identifier\",\"type\":\"AAAA\",\"name\":\"$record_name\",\"content\":\"$ip\",\"proxied\":false}")

改成

update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" --data "{\"id\":\"$zone_identifier\",\"type\":\"AAAA\",\"name\":\"$record_name\",\"content\":\"$ip\",\"proxied\":true}")

如果是动态IPv4,将上面update这一行的AAAA改成A,以及将

ip=$(curl -s http://ipv6.icanhazip.com)

改成

ip=$(curl -s http://ipv5.icanhazip.com)

备份

频繁读写会降低TF卡性能和寿命,这样我们可能不单止需要定期备份树莓派镜像,有时还可能需要一张插上就能用的TF卡。

首先将新的TF卡使用傲梅分区助手、minitool partition wizard、diskgenius之类的软件格式化成FAT32或者EXT4文件系统。

↑如果安装的是带桌面的固件,可以直接使用SD Card Copier进行复制。

↓如果是无桌面版本的Raspbian,则可以使用dd命令。

首先使用fdisk -l命令来列出存储设备,为后续使用dd命令对拷做准备。我们需要找到正在运行的tf卡(/dev/mmcblk0),以及用于拷盘的tf卡(/dev/sda)。这两个磁盘位置中,前者一般固定不变,后者根据插入的设备次序和数量变化。

有一点要特别注意,在fdisk列出的磁盘中,要找的是Disk下面的位置,而不是Device下面的。千万不要拷错了,树莓派TF卡读卡器非常慢,RW只有30/20MBps。如果你的tf卡像我的一样大(128GB),拷一次大概需要一个半小时。确认无误后,使用命令进行对拷:

sudo screen dd bs=4M if=源磁盘 of=目标磁盘
例:sudo dd bs=4M if=/dev/mmcblk0 of=/dev/sda

其中,screen防止操作意外中断,bs用于指定块大小(大多数TF卡的默认值是4M),if是input file,of是output file。

dd命令默认不显示进度,可以打开一个新的终端,使用以下命令查看进度,每3秒输出一次:

sudo watch -n 3 pkill -USR1 ^dd$ &

洗手吃饭该干嘛干嘛,等着就行。
[1]树莓派官方无头无线网络设置指南

2 条评论

发表评论

*

3 × = 18