我在这里抓得很厉害。我们在距离数百公里的地方有多个Raspberry Pis。我们需要能够安全地(远程)升级它们,因为本地访问的价格可能高达几百欧元。
raspis运行rasbian,/在SD卡上安装在RO中,以防止断电时的损坏(通常每天一次)。 SD卡是从相同的基本映像克隆的,但包含手动安装的软件包和可能因设备而异的修改文件。 raspis都有一个USB闪存作为一个更耐腐败的RW驱动器和一个脚本,以便在驱动器损坏的情况下在启动时格式化它。他们通过GPRS连接呼叫家庭,具有不同的可靠性。
系统要求如下:
简单方法可能是在远程git存储库中保留文件系统的完整副本,在提交之间生成diff文件,将补丁上载到字段并应用它。但是,目前不同raspis上的文件不相同。这意味着,至少在安装系统时,文件必须通过类似于rsync -a的东西进行同步。
程序应该是“将/和ssh文件夹之间的差异保存到USB记忆棒上的文件,mount / RW,从文件应用diff,mount / RO”。 Rsync同时进行差异化并应用,因此我的第一个问题变为:
1是否存在类似rsync的东西,可以从本地和远程保存文件增量并在以后应用它们?
另外,我从来没有制作过类似这样的系统,而且画面“最接近合法,我可以提出”。这里有很多活动部件,我害怕事先没有想到的事情会导致事情发生可怕的错误。我的其余问题是:
答案 0 :(得分:1)
是的,这是一个非常广泛的问题。这不是您问题的直接答案,而是为您的研究提供指导。
防止文件系统损坏的一种方法是使用覆盖文件系统(例如,AUFS,UnionFS),其中根文件系统以只读方式挂载,并且基于tmpfs(基于RAM)或基于闪存的读写装载“ “只读根。这需要您自己的init脚本,包括使用 pivot_root 命令。由于没有任何关键的安装RW,该系统可以稳健地处理停电。要点在pivot_root之前,FS看起来像
/ read-only root (typically flash)
/rw tmpfs overlay
/aufs AUFS union overlay of /rw over /
在pivot_root之后
/ Union overlay (was /aufs
/flash read only root (was /)
/ flash文件系统的更新是通过重新安装读写,执行更新和重新安装只读来完成的。例如,
mount -oremount,rw <flash-device> /flash
cp -p new-some-script /flash/etc/some-script
mount -oremount,ro <flash-device> /flash
您可能会也可能不会立即看到/ etc中反映的更改,具体取决于tmpfs overlay中的内容。
您可能会发现自己大量使用 chroot 命令,尤其是在您决定使用包管理器时。快速样本
mount -t proc none /flash/proc
mount -t sysfs none /flash/sys
mount -o bind /dev /flash/dev
mount -o bind /dev/pts /flash/dev/pts
mount -o bind /rw /flash/rw #
mount -oremount,rw <flash-device> /flash
chroot /flash
# do commands here to install packages, etc
exit # chroot environment
mount -oremount,ro <flash-device> /flash
学习使用修补程序命令。有二进制补丁命令How do I create binary patches?。
对于出现问题时的超级恢复,您需要具有监视程序计时器的硬件支持以及从备用(辅助)根文件系统进行故障安全启动的能力。
如果你想要防弹产品,预计会花费大量的时间和金钱。没有捷径。