[Internal testing communication] 关于磐石系统空间占用的那些事
Tofloor
poster avatar
zhaohui
deepin
Community Developer
16 hours ago
Author

磐石系统结构

整体

一台电脑上磐石系统可以有多个系统部署,可以分别从GRUB菜单启动。

第一项规定为主线部署,第二项以及后面的项目都规定为备份部署。主线部署是给用户平时用的;备份部署是在主线部署功能出问题,像系统升级失败这种情况时,用来恢复到之前状态的。

使用如下命令查看部署情况:

deepin-immutable-ctl admin status

输出内容类似:

图片.png

这就表示当前有2个部署可以被启动,第一个部署(index: 0)有 * 标记,表示正在使用中。BaseCommitIdIdx对应系统部署ID,ExtCommitIdIdx对应数据部署ID。

想要了解更详细的信息,可以通过如下命令查看:

deepin-immutable-ctl admin status -d all

每个部署都共用 /var ,/var 实际位置在 /persistent/ostree/deploy/deepin/var 目录。

系统部署

每个系统部署是由 overlay FS 将系统层,数据层,修改层叠加而成。

部署的各层存储位置:

  • 修改层:/persistent/overlay/data/$数据部署ID/ 和或 /persistent/overlay/data/layer-$修改层ID/
  • 数据层:/persistent/ostree/data/$数据部署ID/
  • 系统层(最下):/ostree/deploy/deepin/deploy/$系统部署ID/

现在来简单介绍一下磐石系统用的 OSTree 技术。这个技术主要是用来管理操作系统文件还有它们的版本的,靠内容寻址存储和硬链接技术,能有效避免文件重复占存储空间。

  1. 内容寻址存储

传统的文件存储方式是依据路径和名称进行的,这种方式极易导致相同内容的文件被多次存储。与之不同的是,OSTree 采用哈希算法(例如 SHA256)为文件生成唯一的摘要(hash),相同内容属性的文件其哈希值是相同的。文件以哈希值作为标识,存储于共享对象存储区(通常为 /ostree/repo/objects/),从而避免了重复存储的问题。

  1. 硬链接去重

当多个系统部署包含相同内容的文件时,OSTree 不会对文件进行复制操作,而是在部署目录(如 /ostree/deploy/...)为文件创建指向对象存储中对应哈希文件的硬链接。由于硬链接共享文件索引节点,多个部署的相同文件可以共用同一份物理数据,不会额外占用存储空间。

数据层与系统层文件从对应 ostree 仓库硬链接获取,仅目录占少量空间,文件与仓库共享。系统层和数据层有提交(commit),可消除重复文件。

  • 数据层仓库对象目录:/persistent/ostree/repo/objects
  • 系统层仓库对象目录:/ostree/repo/objects

磐石系统的快照大部分存在系统层和数据层 ostree 仓库中,其中快照分支名称以“snapshot/”为前缀,小部分文件(/var 部分)存储在 /persistent/ostree/snapshot/$快照ID/ 中,这部分占用一般比较小。

因此,若需粗略地计算磐石系统(不含家目录)全部部署所占用的空间,需将如下:

  • /ostree/repo/objects
  • /persistent/ostree/repo/objects
  • /persistent/overlay/data/
  • /persistent/ostree/snapshot/
  • /var

这几个路径下的所有占用空间进行相加。

修改层

磐石系统采用双修改层机制,通过硬链接下修改层文件实现零冗余存储,提升快照与备份性能。

详细查看修改层占用可以使用如下命令:

sudo deepin-immutable-ctl admin status -d modified

输出类似:

图片.png

修改层文件移动机制

自从 deepin-immutable-ctl 1.0.13.1 版本发布后,每次系统启动时,可能会出现将上层修改文件移动至下层修改层的情况。例如,上一次系统启动期间,系统监测到执行了软件包管理命令,该命令对 dpkg 状态数据库文件进行了改动。解决了单个部署中,同一路径的文件因多层存储导致多份存在、或者上层文件已删除但下层文件仍保留的情况所造成的空间浪费问题。后续会改成不依赖监控命令执行,也可自动触发。

欢迎大家在留言区分享自己的使用情况或想法 📣

Reply Favorite View the author
All Replies
叶落无语
deepin
15 hours ago
#1

学习了,但还没有完全搞懂。

Reply View the author
iceyer
deepin
15 hours ago
#2

学习了

agree

Reply View the author