0%

【Linux技术分享】原子更新调研分析(一)Fedora-Silverblue初窥

原子更新调研分析(一)Fedora-Silverblue初窥

最近很大一部分时间都在开发deepin的原子更新,在闲暇时关注下其他的os原子更新的实现,从而查漏补缺完善自身的不足,本文为Fedora-Silverblue OS自身的原子更新一个大致框架介绍。

本文适读人群

  1. 对linux系统启动流程有基本认知
  2. 有过linux系统开发基本常识,了解sh脚本

本文能够知道什么

  1. Fedora-Silverblue OS原子更新应用安装到启动基本流程介绍

本文不知道什么

  1. rpm-ostree原理及其在os使用
  2. Fedora-Silverblue OS版本清除

前提概要

  1. Fedora-Silverblue OS原子更新优势是什么?
    详细的可以看下这篇文章,里面有详细介绍其原子更新的优势以及其特点,Never Worry about Updates Again with OSTree and Zincati。这里我大致讲一下,系统在更新时若由于应用不稳定或系统基础组件不稳定导致无法启动,可以还原至更新前的节点,原子意思为本次操作为完整并不可切分,通过原子化更新可以随时切回更新前节点。

  2. rpm-ostree是什么
    ostree为本地部署仓库,类似与git,但ostree针对的是本地的文件,用户可以在本地初始化仓库并将系统文件提交至此仓库中,提交过程中ostree会对提交文件进行分析,进行增量备份从而节省空间。rpm为linux系统下软件包管理工具。rpm与ostree进行结合则可以做到对每一次应用的修改都可以将其备份。详细内容见rpm-ostree

框架介绍

  1. 系统的/boot目录下存有多个initrd,若两者为相同md5值则为硬链接,系统的/boot/var目录为单独挂载
    图1

    • /boot为启动分区,在系统备份时,会将备份的initrd存放至/boot分区中,并且备份的initrd无任何改变时为了节省空间会将其硬链接。
  2. Fedora-Silverblue利用rpm-ostree命令将其安装至系统中,但此次安装时安装时并不会立即生效,Fedora-Silverblue将系统的根分区挂载为只读,本次安装无法将应用释放至系统根目录中。
    图2

  3. 本次系统应用安装时,会将对本次安装的所有应用进行提交,包括其依赖的文件。
    图3

  4. linux系统通过指定目标目录组成,系统在应用安装时,会对本地系统进行硬链接组成sysroot文件夹,此文件夹内容为当前系统以及本次安装的应用。
    图4

  5. 通过设置/boot/grub2/grubenv的环境变量来修改本机grub等待时间,在下次系统启动时,不等待grub界面直接启动系统,从而保护系统启动的安全性。
    图5

  6. 目前我们拥有了一个新的系统目录sysroot,os通过Dracut工具,可以指定sysroot启动本机系统详细见官方文档https://man7.org/linux/man-pages/man8/dracut.8.html,在启动后/sysroot进入系统后中其中文件会被清空。

os原子更新优劣分析

  • 优点:

    • os的根只读可以保护根系统不被破坏
  • 缺点

    • 用户无法对本次安装的应用直接使用,必须重启才能生效。
    • 分区的固定性,对多种分区格式支持不太友好。