树莓派安装Ubuntu Server全攻略:从镜像选择到安全优化
1. 为什么选择Ubuntu树莓派系统选型的底层逻辑如果你手头有一块树莓派想把它变成一个正经的微型服务器、开发机或者一个能稳定跑点后台服务的“小电脑”那么给树莓派装一个Ubuntu系统大概率是你绕不开的一个选择。很多人拿到树莓派第一反应是去官网下载那个绿色的、默认的Raspberry Pi OS以前叫Raspbian。这当然没错它针对树莓派的硬件做了大量优化开箱即用。但当你需要更标准化的Linux环境、更丰富的软件仓库、或者想无缝衔接你在x86服务器上的开发运维经验时Raspberry Pi OS的“特供”属性有时反而会成为掣肘。这就是Ubuntu的价值所在。Ubuntu Server for Raspberry Pi是Canonical官方为树莓派ARM架构适配的服务器版本。它带来的核心优势我总结为三个词标准化、生态、长期支持。标准化意味着它的文件结构、服务管理systemd、软件包管理apt和你熟悉的任何一台Ubuntu服务器几乎一模一样你从网上搜到的绝大多数Ubuntu教程、脚本和解决方案都可以几乎无修改地跑在树莓派上。生态则是指Ubuntu背后庞大的软件仓库和社区支持无论是Docker、Kubernetes、数据库还是各种开发框架在Ubuntu上的安装和配置文档都是最全的。至于长期支持LTS官方提供长达5年的安全更新这对于一个需要7x24小时运行的服务来说是至关重要的稳定保障。所以给树莓派装Ubuntu本质上是在“硬件兼容性”和“软件生态/运维便利性”之间选择了后者作为优先项。你牺牲了一点点为树莓派特定硬件如某些GPIO库、摄像头驱动的“开箱即用”优化换来的是一个更通用、更强大、也更“省心”的Linux环境。对于我这样的运维和开发者来说这个交换非常划算。2. 镜像选择与写入避开新手第一个大坑决定安装Ubuntu后第一件事不是急着下载而是搞清楚你需要哪个版本。这里面的门道直接决定了你后续使用的体验。2.1 官方镜像版本详解访问Ubuntu官网的下载页面找到Raspberry Pi版本你会看到几个选项主要区别在于桌面环境Ubuntu Server这是我最推荐也是绝大多数应用场景下的首选。它是一个纯命令行界面没有图形桌面。这意味着它极其轻量启动后几乎所有资源CPU、内存都可以用于你跑的服务。对于做服务器、跑Docker、做智能家居中枢、搭建NAS备份Server版是性能最优解。系统开销极小稳定性极高。Ubuntu Desktop带有GNOME桌面环境的完整版本。除非你明确需要给树莓派接上显示器、键盘鼠标把它当一台迷你台式机来用比如给孩子做编程学习机、做轻量办公否则强烈不推荐。图形界面会吃掉大量宝贵的内存和CPU资源让树莓派本就有限的性能捉襟见肘而且很多服务器软件在桌面环境下反而会有不必要的依赖冲突。注意对于树莓派4B 2GB内存及以下的型号安装Desktop版可能会非常卡顿体验很差。即使是4GB内存运行Desktop也远不如Server版来得流畅和高效。除了桌面环境另一个关键是选择LTS版本。LTS代表长期支持目前最新的LTS是Ubuntu 22.04 Jammy Jellyfish。非LTS版本如22.10, 23.04生命周期短通常只有9个月的支持不适合用于需要稳定运行的环境。请务必下载Ubuntu 22.04 LTS for Raspberry Pi的镜像。2.2. 烧录工具实战BalenaEtcher 与 Raspberry Pi Imager 对比下载好.img.xz压缩镜像文件后你需要一个工具把它“烧录”到SD卡上。主流工具有两个Raspberry Pi Imager树莓派官方出品极其简单易用。它的优点是内置了多种系统镜像的下载选项你甚至可以不提前下载镜像在软件内直接选择“Ubuntu”然后下载并烧录。但对于已经下载好镜像文件的情况它的自定义烧录功能有时不够直观。BalenaEtcher这是我个人更偏爱的工具跨平台Windows/macOS/Linux界面极其清爽三步走“选择镜像”、“选择SD卡驱动器”、“烧录”。它会对烧录结果进行自动校验确保数据完整无误这一步对于系统稳定性至关重要。实操步骤以BalenaEtcher为例准备一张至少16GB的Micro SD卡建议Class 10或UHS-I以上速度影响系统响应和读写。使用读卡器插入电脑。打开BalenaEtcher点击“Flash from file”选择你下载的.img.xz文件。软件通常会自动识别插入的SD卡。如果电脑连接了多个USB存储设备请务必仔细核对盘符和容量选错盘会抹掉其他磁盘的数据。点击“Flash”开始烧录。这个过程会先解压镜像然后写入最后校验。耗时约5-15分钟取决于SD卡速度和电脑性能。烧录完成并验证通过后不要急着弹出SD卡。关键的一步来了对于大多数Linux系统烧录后你需要手动修改SD卡boot分区里的一个配置文件才能让树莓派正确启动。但Ubuntu for Raspberry Pi镜像在这方面做了优化。2.3. 首次启动前的关键配置网络与用户烧录完成后在电脑上重新打开SD卡会被识别为两个分区system-boot和writable。我们需要配置system-boot分区里的文件。配置Wi-Fi可选但强烈建议如果你希望树莓派第一次启动就能通过Wi-Fi联网而不是必须接网线需要编辑system-boot分区根目录下的network-config文件。# 用文本编辑器打开找到wifi部分取消注释并修改 wifis: wlan0: dhcp4: true optional: true access-points: 你的Wi-Fi名称: password: 你的Wi-Fi密码注意YAML格式的缩进password前面有两个空格。保存文件。配置SSH和用户默认情况下Ubuntu Server镜像使用“云初始化”机制它依赖于在第一次启动时从user-data文件读取配置。但在烧录后的SD卡上我们可以直接提供一个user-data文件来预设用户和开启SSH。在system-boot分区根目录下创建一个名为user-data的文件如果不存在。写入以下内容#cloud-config users: - name: ubuntu # 默认用户名 passwd: $6$rounds4096$你的密码密文$ # 这里需要替换见下方说明 groups: [adm, sudo] shell: /bin/bash lock_passwd: false sudo: [ALL(ALL) NOPASSWD:ALL] # 为方便设置sudo无需密码生产环境建议去掉 ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2E...你的公钥内容 # 推荐使用SSH密钥登录更安全 ssh_pwauth: false # 禁用密码登录SSH如果用了密钥登录就设为false chpasswd: expire: false生成密码密文在Linux或macOS终端执行openssl passwd -6输入你的密码会得到一串以$6$开头的哈希值用它替换上面的你的密码密文。在Windows上可以通过WSL或在线工具注意安全生成。SSH公钥将你本地电脑的SSH公钥通常是~/.ssh/id_rsa.pub文件内容填入ssh_authorized_keys。这是最佳实践免密码且更安全。完成以上配置后安全弹出SD卡插入树莓派的卡槽连接电源和网线如果配置了Wi-Fi可不接即可上电启动。3. 首次启动、登录与基础安全加固上电后树莓派的绿色指示灯会闪烁。第一次启动会进行系统初始化包括扩展文件系统、应用user-data配置等时间可能稍长2-5分钟。3.1. 获取IP地址与SSH连接树莓派启动后你需要知道它的IP地址才能连接。有显示器接上HDMI显示器和键盘启动后命令行登录输入ip a命令查看eth0有线或wlan0无线的IP地址。无显示器盲操作这是更常见的场景。方法一路由器后台查看登录你家路由器的管理界面如192.168.1.1在“已连接设备”或“DHCP客户端列表”里查找主机名类似ubuntu的设备记下其IP地址。方法二使用arp扫描在同一局域网下的另一台电脑上打开终端。Linux/macOS:arp -a | grep -i dc:a6:32树莓派4B网卡MAC地址前几位通常是dc:a6:32或者用nmap扫描nmap -sn 192.168.1.0/24替换成你的网段方法三推荐一劳永逸在路由器里为树莓派的MAC地址设置静态IP绑定。这样它每次获取到的IP都是固定的。获得IP地址假设为192.168.1.100后打开终端使用SSH连接ssh ubuntu192.168.1.100如果配置了SSH密钥会直接登录。如果配置了密码会提示输入密码即user-data里设置的。3.2. 首次登录后的必须操作登录成功后你以ubuntu用户身份进入了系统。这个用户默认拥有sudo权限。接下来有几件必须马上做的事更新系统这是安全性和稳定性的基础。sudo apt update sudo apt upgrade -y这个过程会更新软件包列表并升级所有可升级的软件耗时取决于网络速度。修改主机名可选但建议方便在网络中识别。sudo hostnamectl set-hostname raspberry-ubuntu # 改成你喜欢的名字 # 编辑hosts文件将127.0.1.1对应的旧主机名也改掉 sudo nano /etc/hosts # 找到类似 127.0.1.1 ubuntu 的行将 ubuntu 改为 raspberry-ubuntu退出重新SSH登录命令提示符前的名字就会改变。安全加固修改SSH端口和禁用root登录这是将树莓派暴露在公网或局域网内时的基本安全措施。sudo nano /etc/ssh/sshd_config找到#Port 22去掉注释#并将22改为一个大于1024的端口例如2222。找到#PermitRootLogin prohibit-password确保它是PermitRootLogin no以完全禁止root通过SSH登录。找到PasswordAuthentication yes如果你使用了SSH密钥登录可以将其改为no来禁用密码认证进一步提升安全。# 修改保存后重启SSH服务 sudo systemctl restart ssh # **重要**在重启服务前务必在本地打开一个新的终端窗口用新端口测试连接是否成功防止配置错误导致自己锁在外面。 # 测试命令ssh -p 2222 ubuntu192.168.1.100测试新端口连接成功后再关闭旧的22端口连接。4. 存储、性能优化与长期维护要点系统跑起来了但要让树莓派上的Ubuntu稳定高效地长期工作还需要一些优化。4.1. 存储扩展与交换空间管理烧录的镜像大小是固定的但你的SD卡可能更大。系统第一次启动时cloud-init通常会自动将根分区扩展到整个SD卡。你可以用df -h命令确认。如果没有可以手动扩展sudo apt install cloud-guest-utils -y # 如果未安装 sudo growpart /dev/mmcblk0 2 # 扩展第二个分区主分区注意设备名可能不同用lsblk确认 sudo resize2fs /dev/mmcblk0p2关于交换空间swapUbuntu默认会创建一个交换文件如/swapfile。对于内存较小的树莓派如1GB或2GB适当的swap可以防止内存耗尽导致进程被杀。但SD卡的读写速度远慢于内存频繁使用swap会导致系统卡顿。我的建议是对于内存 2GB且运行服务内存压力不大的情况可以考虑减少或关闭swap。# 查看当前swap sudo swapon --show # 临时关闭swap sudo swapoff -a # 永久关闭注释掉 /etc/fstab 中swap文件的行然后删除swap文件 sudo nano /etc/fstab # 找到类似 /swapfile none swap sw 0 0 的行在行首加 # 注释掉 sudo rm /swapfile对于内存 1GB建议保留swap但可以考虑将swappiness参数调低减少系统主动使用swap的倾向默认值60。# 查看当前值 cat /proc/sys/vm/swappiness # 临时设置为10 sudo sysctl vm.swappiness10 # 永久设置 echo vm.swappiness10 | sudo tee -a /etc/sysctl.conf4.2. 性能与稳定性调优禁用不必要的服务Ubuntu Server默认会运行一些你可能用不到的服务如snapdSnap包管理器有时资源占用高、cloud-init仅在首次初始化有用、motd-news动态消息等。禁用它们可以释放资源。sudo systemctl disable snapd.service snapd.socket sudo systemctl disable cloud-init cloud-final cloud-config cloud-init-local sudo systemctl disable motd-news.timer # 禁用后可以重启或直接停止 sudo systemctl stop snapd.service snapd.socket使用Zram内存压缩交换替代传统Swap这是一个非常适用于树莓派等小内存设备的技巧。Zram在内存中创建一个压缩块设备作为交换空间速度比SD卡上的swap文件快得多。安装和配置sudo apt install zram-config -y安装后重启即可。它会自动根据内存大小创建zram设备。你可以用swapon --show查看类型会显示为zram。监控与日志树莓派资源有限需要关注系统状态。htop比top更直观的进程监控器sudo apt install htop。vnstat轻量级网络流量监控sudo apt install vnstat。日志查看使用journalctl -u 服务名查看特定服务日志journalctl -f实时跟踪系统日志。4.3. 备份与恢复策略SD卡有写入寿命且物理损坏风险高于硬盘。定期备份是必须的。系统级全卡备份在电脑上使用dd命令或 BalenaEtcher 的“从驱动器克隆”功能将整张SD卡备份为一个.img文件。恢复时直接烧录该文件即可。这是最彻底的备份但文件体积大。# 在Linux/macOS上找到SD卡设备如/dev/rdisk2务必小心 sudo dd if/dev/rdisk2 of~/backup/raspberry_ubuntu_backup.img bs4m statusprogress关键数据备份将重要的应用数据如数据库文件、网站代码、配置文件通过rsync或scp定期同步到网络存储或另一台电脑。可以将备份命令写入cron定时任务。# 示例每天凌晨3点同步指定目录到NAS crontab -e # 添加一行 0 3 * * * rsync -avz --delete /home/ubuntu/important_data/ usernas_ip:/backup/pi_data/使用高耐久度SD卡为树莓派选择工业级或高耐久度High Endurance的Micro SD卡它们为频繁读写做了优化寿命更长。经过以上步骤你的树莓派就已经运行在一个稳定、安全且经过初步优化的Ubuntu Server环境上了。它不再是一个玩具而是一台可以托付各种网络服务、自动化任务或开发环境的可靠微型服务器。接下来无论是部署一个WordPress博客、搭建一个家庭媒体服务器如Jellyfin、还是作为智能家居平台如Home Assistant的后端你都有了一个坚实且熟悉的基础。