使用tar备份和恢复树莓派系统
在 树莓派5使用nvme存储启动 设置使用之后,系统的存储性能有了很大提高。但是,我在 树莓派Raspberry Pi 5 上使用 Intel Optane(傲腾) M10 遇到一个棘手的问题: 启动时不能稳定识别Optane(傲腾) M10。参考树莓派论坛的帖子,提到了需要回退到使用SD卡启动,仅将Optane作为数据存储。 我推测原因是:
Optane初始化需要在内核就绪之前进行,当使用 NVMe存储 存储启动时,启动速度极快,此时Optane初始化尚未完成,就导致内核没有扫描到设备。
当使用SD卡启动时,由于内核加载启动较慢,此时Optane设备已经完成初始化,就能够被内核识别和使用
之所以 树莓派5使用nvme存储启动 有时候能够识别和使用Optane存储是因为这个初始化时间临界点就在NVMe启动内核左右,当有启动时间波动时,有可能成功识别也可能识别失败
备注
经过验证对比,上述推测并不正确,即使改换为使用SD启动,依然不能解决 Intel Optane(傲腾) M10 识别。我最终解决的方法是采用 树莓派5超频
不过,通过tar备份和恢复树莓派依然是有效的方案,不仅克服了 使用 dd clone树莓派 效率较低的问题( dd
会复制整个磁盘每一bit),而且适合不同存储容量之间复制树莓派系统。
tar
备份树莓派
树莓派操作系统 Raspbery Pi OS(Raspbian) 默认安装使用了2个分区,磁盘分区依然参照之前 Raspbery Pi OS(Raspbian) 安装时分区(但是我会调整整个分区大小限制到
32GB
以空出更多容量用于 ZFS 卷的数据存储),即:
Disk /dev/nvme0n1: 1.82 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: KIOXIA-EXCERIA G2 SSD
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x57a11afa
Device Boot Start End Sectors Size Id Type
/dev/nvme0n1p1 8192 1056767 1048576 512M c W95 FAT32 (LBA)
/dev/nvme0n1p2 1056768 124735487 123678720 59G 83 Linux
/dev/nvme0n1p3 124735488 2272219135 2147483648 1T 83 Linux
/dev/nvme0n1p4 2272219136 3907029167 1634810032 779.5G 83 Linux
注意当前 Raspbery Pi OS(Raspbian) 磁盘分区的挂载如下:
Filesystem Size Used Avail Use% Mounted on
udev 3.8G 0 3.8G 0% /dev
tmpfs 806M 5.4M 800M 1% /run
/dev/nvme0n1p2 59G 24G 32G 43% /
tmpfs 4.0G 0 4.0G 0% /dev/shm
tmpfs 5.0M 48K 5.0M 1% /run/lock
/dev/nvme0n1p1 510M 65M 446M 13% /boot/firmware
zpool-data 751G 7.5M 751G 1% /var/lib/docker
tmpfs 806M 0 806M 0% /run/user/1000
需要备份的是 /
和 /boot/firmware
; /var/lib/docker
是一个 ZFS 挂载卷,不需要备份(当 Docker 再次启动时会自动初始化,所以只需要确保目标主机上在启动docker之前先构建好 zpool-data
卷)
将TF卡插入USB读卡器然后插入到需要复制的树莓派运行系统中,使用以下命令构建
/dev/sdb
分区(即TF卡)
Disk /dev/sdb: 119.08 GiB, 127865454592 bytes, 249737216 sectors
Disk model: MassStorageClass
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x57a11afa
Device Boot Start End Sectors Size Id Type
/dev/sdb1 8192 1056767 1048576 512M c W95 FAT32 (LBA)
/dev/sdb2 1056768 68165631 67108864 32G 83 Linux
/dev/sdb3 68165632 249737215 181571584 86.6G 83 Linux
对分区进行格式化,注意第一个分区必须是
FAT32
mkfs.vfat -F 32 -n EFI /dev/sdb1
mkfs.ext4 /dev/sdb2
# 分区3将使用zfs工具处理
参考 通过tar备份和恢复Linux系统 执行以下命令备份(在运行主机上先归档整个操作系统):
tar
命令备份系统cd /
tar -cpzf firmware.tar.gz /boot/firmware
tar -cpzf backup.tar.gz --exclude=/backup.tar.gz \
--exclude=/var/lib/docker \
--exclude=/var/cache --exclude=/home/admin/.cache \
--one-file-system /
挂载TF卡分区:
mount /dev/sdb2 /mnt
mkdir -p /mnt/boot/firmware
mount /dev/sdb1 /mnt/boot/firmware
将归档的操作系统tar文件复制到TF卡挂载分区中,并解压缩
cp /backup.tar.gz /mnt/
cp /firmware.tar.gz /mnt/
cd /mnt/
tar xfz backup.tar.gz
tar xfz firmware.tar.gz
修订一些配置( 边缘云计算架构(2024) ):
/mnt/boot/firmware/cmdline.txt
该文件参数root=PARTUUID=
决定了启动时挂载的root分区/mnt/etc/hosts
/mnt/etc/hostname
/mnt/etc/fstab
根据blkid
输出的磁盘分区PARTUUID
修订/mnt/etc/NetworkManager/system-connections/eth0.nmconnection
/mnt/NetworkManager/system-connections/<wifi_ssid>.nmconnection
现在将恢复好的系统TF卡拿到目标树莓派上,启动新的树莓派,然后验证是否一切正常
构建 树莓派5 NVMe存储ZFS (用于恢复 Docker ZFS 存储驱动 ) - 这个步骤是我的特定运行环境需要,如果你没有使用 ZFS 可以忽略
# 清理docker目录
rm -rf /var/lib/docker
mkdir /var/lib/docker
# 创建docker的zfs存储目录卷
zpool create -f zpool-data -m /var/lib/docker /dev/mmcblk0p3
zfs set compression=lz4 zpool-data