Linux · 19 9 月, 2026 0

树莓派开启 OverlayFS 后如何持久保存数据?/boot 镜像挂载方案

写在前面

为了保护孱弱的SD卡,许多人在使用树莓派时会将文件系统设置为 OverlayFS,将对磁盘的写入转移到内存中。显然,这样做会导致树莓派无法永久存储写入的信息,设备重启后写入内容将全部丢失。

那么有没有可能既要又要在开启 OverlayFS 且不额外增添外设(U盘、移动硬盘等)的前提下,单独划出一小块区域供用户写入持久数据呢?这里介绍一种相对简单的方法。

未被完全开发的 /boot

树莓派的 /boot 分区在烧录SD卡时预留了512Mb,且在开启了 OverlayFS 时依然能够被设置为可写。这给了我们很大的操作空间。

注:以下操作请在开启 OverlayFS 前完成,且需要确保 /boot 未被设置为只读模式

1. 创建磁盘镜像

  • /boot 分区中创建用于写入的磁盘镜像:
# 假设 boot 分区挂载在 /boot/firmware(新版系统)
# 这里我们创建一个256Mb的
sudo dd if=/dev/zero of=/boot/firmware/data.img bs=1M count=0 seek=256
sudo mkfs.ext4 /boot/firmware/data.img

2. 创建挂载服务

  • mkdir /data 在根目录创建挂载点

  • nano /etc/systemd/system/data.mount 创建服务文件,写入以下内容:

[Unit]
Description=Persistent data image
# 确保 /boot/firmware 已经挂载完成后再挂载本镜像
After=local-fs.target boot-firmware.mount
Before=multi-user.target

[Mount]
What=/boot/firmware/data.img
Where=/data
Type=ext4
Options=loop,noatime,nofail

[Install]
WantedBy=multi-user.target

几点说明:

  • After=local-fs.target boot-firmware.mount:保证本地文件系统以及 /boot/firmware 已经挂载完成,避免在 boot 分区尚未就绪时就去挂载镜像。
  • Before=multi-user.target:让本挂载单元在进入多用户目标之前完成,避免依赖 /data 的服务过早启动。
  • Options 中加上了 nofail当镜像损坏或挂载失败时,不会阻塞系统启动进入 emergency mode。如果你希望挂载失败时能明显感知并手动处理,可以去掉 nofail,但那样系统可能无法正常启动。
  • 注意:systemd 的 .mount 单元名必须与挂载点路径严格对应。挂载点是 /data,所以单元名是 data.mount;如果改成 /mnt/data,单元名就要写成 mnt-data.mount

  • 注册服务并使之生效:

sudo systemctl daemon-reload
sudo systemctl enable --now data.mount

3. 开启 OverlayFS 文件系统

到这里就可以开启 OverlayFS 文件系统(注意不要把 /boot 设置为只读)并重启树莓派了。重启后,/data 目录为可写状态,重启后写入数据不会丢失。

如果挂载失败,由于加了 nofail,系统仍能正常启动,你可以通过以下命令排查:

systemctl status data.mount
journalctl -u data.mount

确认镜像和文件系统没问题后,再手动 sudo systemctl start data.mount 即可。