自动回滚到使用备份参数复制的文件

自动回滚到使用备份参数复制的文件

我正在为嵌入式 Linux 系统制定一个更新协议,但我想为用户提供回滚更新的选项,如果它扰乱了他们的系统,特别是对于 alpha/beta 版本。所以我发现了 cp 命令选项来自动备份被覆盖的文件。

这太棒了!但必须有一种简单的方法来使用自动备份文件回滚这些更改,对吗?我不想强迫用户自己去查找所有已更改文件的备份。

先谢谢您的帮助!

答案1

如果您有空间拥有两个并行的文件系统树,您可能会有类似/bin和 的东西/bin.old。对所有顶级目录重复此操作。

安装将是创建/bin.new、从实时系统复制、覆盖新文件,然后切换/bin/bin.old/ /bin.new tobin` 等的情况。回滚将是切换回来。

# Prepare a new filesystem tree
#
rm -rf /*.new /*.old
for item in /*
do
    cp -al "$item" "$item.new"     # Links avoid using too much disk space
done

# Overlay. Because we linked in the previous step, we must remove
# (or rename) each file that we're going to change. Do not change
# or replace any file in situ
#
# If you have space for two full filesystem trees you could just copy
# instead of linking, which could simplify this update code section.
#
echo installation code goes here

# Switch over
#
OPATH="$PATH" PATH="/bin.old:/bin:/bin.new:$PATH"

for item in /*.new
do
    live="${item%.new}"

    mv -f "$live" "$live.old"
    mv -f "$item" "$live"
done

# Post-installation steps (rebuild kernel links, etc.)
#
echo post-installation code goes here

您可能希望将重要的系统二进制文件放在无法更新的位置,以便回滚不会被糟糕的 shell 烧毁。然而,这有点像先有鸡还是先有蛋的情况,根据定义,您无法更新此代码。棘手。

相关内容