[Internal testing communication] 真金不怕火炼 磐石怕是难炼
Tofloor
poster avatar
139******39
deepin
2025-12-23 14:55
Author

我经过几天的使用,v25的磐石大致弄明白了。

首先,它采用了overlayfs+ostree的方式,为了通俗点讲解,我先假设一个模型,如下:

  1. 系统层 (只读,OSTree管理) ← 基础操作系统
  2. 数据层 (只读,OSTree管理) ← ostree checkout层
  3. 持久化修改层 (可写,非版本化) ← 跨会话的持久修改
  4. 会话修改层 (可写,非版本化) ← 当前会话的临时修改
  5. workdir层 ← overlay工作目录

那么尝试使用overlay挂载的命令中,其参数就是:

-olowerdir=持久化修改层:数据层:系统层,upperdir=会话修改层,workdir=workdir目录

而实际v25上,它的opt就是这样的挂载的,其参数如下:

opt-overlay on /opt type overlay (rw,relatime,
lowerdir=/root/persistent/ostree/data/402649.../checkout/opt:/root/ostree/deploy/deepin/deploy/d1837b4.../opt,
upperdir=/root/persistent/overlay/data/402649d.../opt-upper,
workdir=/root/persistent/overlay/data/402649d.../opt-work)

可以看到lowerdir由三个层组成:

1.系统层 是最基础的系统,没有修改,没有更新 

2.数据层 是修改层,但由ostree管理,可以进行快照和回滚 

3.持久化修改层 是修改层,普通文件夹,可以通过拷贝方式(cp或者rsync)备份,数据来源自会话修改层,用于持久化会话修改层的修改数据

而upperdir只有一层:会话修改层,这是当前用户修改后数据保留的地方,重启后丢弃

workdir只有一层: workdir目录,该目录是overlay的工作目录,不参与任何备份或还原,与当前会话修改层同生共死

至于回滚、更新之类的操作都基于ostree,就不细究了,因为实现方式有很多

现在,它有个很关键的功能,就是让/usr只读,并且还能让安装deb包等修改/usr目录的行为能正常执行,原理如下:

将usr挂载为只读,但是为了让dpkg或apt-get命令能够装应用到usr目录,V25做了如下动作:

1.将 apt, apt-get, aptitude, dpkg, update-initramfs全部软链接到/usr/libexec/deepin-immutable-ctl/immutable-adapter.sh,如下:

lzh@lzh-PC:/lib/systemd/system$ ls -al /usr/sbin/update-initramfs ; ls -al /usr/bin/{apt,apt-get,dpkg}

lrwxrwxrwx 5 root root 54 7月 2日 15:05 /usr/sbin/update-initramfs -> /usr/libexec/deepin-immutable-ctl/immutable-adapter.sh lrwxrwxrwx 5 root root 54 7月 2日 15:05 /usr/bin/apt -> /usr/libexec/deepin-immutable-ctl/immutable-adapter.sh
lrwxrwxrwx 5 root root 54 7月 2日 15:05 /usr/bin/apt-get -> /usr/libexec/deepin-immutable-ctl/immutable-adapter.sh
lrwxrwxrwx 5 root root 54 7月 2日 15:05 /usr/bin/dpkg -> /usr/libexec/deepin-immutable-ctl/immutable-adapter.sh

2.immutable-adapter.sh实现如下功能:

用户执行命令 → 脚本检查条件 → 决定如何执行

apt install vim → 拦截 → 通过 deepin-immutable-ctl 执行

结果保存到会话修改层(upperdir)(因为upperdir是可读可写,只读的是/usr)

所以deepin是将所有 apt, apt-get, aptitude, dpkg, update-initramfs的命令都做了处理,他们修改的实际是会话修改层的usr,deepin咋实现的我没有看到(因为它们实现都在/usr/sbin/deepin-immutable-ctl,这个是个二进制,没有源码可以分析),我估计是有可能在实际安装的时候将会话修改层挂载为/usr,安装完就

PS:创建只读的overlay的方式如下:

lzh@lzh-PC:~/Desktop/test$ sudo mount -t overlay usr-overlay -o ro,relatime,lowerdir=./lower,upperdir=./upper,workdir=./work ./m
请输入密码:
验证成功
lzh@lzh-PC:~/Desktop/test$ mkdir -p ./m/a
mkdir: 无法创建目录 "./m/a": 只读文件系统
lzh@lzh-PC:~/Desktop/test$ mkdir -p ./upper/a
lzh@lzh-PC:~/Desktop/test$ ls ./m
ls: 无法访问 './m/a': 没有那个文件或目录
a
lzh@lzh-PC:~/Desktop/test$ 

各位,想必大家看到了,v25的磐石功能,对于一些没有接触过git版本管理工具以及不熟悉文件系统的人来说,根本无法理解其命令做了什么,如果想要查询源码来学习其逻辑,尽管其版权申明是开源:

image.png

但实际是根本无法访问http://github.com/linuxdeepin/deepin-immutable-ctl,更别说细究其功能还更改了grub,劫持了initramfs(上文 update-initramfs被链接了):

lzh@lzh-PC:~/Desktop$ dpkg -S deepin-immu
...
deepin-immutable-ctl 导致转移自:/etc/grub.d/10_linux
deepin-immutable-ctl 导致转移至:/etc/deepin-immutable-ctl/grub_d_10_linux
...

请问这样的开源系统,其他软件就不让客户用了吗,试想一下,如果用户安装overlayfs-root(一个开源软件)并且打开其功能,系统会乱成什么样?

最最关键的是这个软件它不开源,和它打配合的deepin-immutable-boot也不开源,普通用户想要参与完善提交修改也做不到

磐石不是一个保护系统的软件,它改变了底层生态环境,将桌面变成了一个系统备份空间+桌面系统的组合,并且极端的认为将/usr只读就是对系统的保护,实际上只是针对root用户主动修改/usr目录做限制,然而通过软件包安装的方式依旧可以完成对/usr目录的修改(修改在upperdir层,最后将修改提交至/usr即可),并且还可以可以通过root关闭只读保护,虽然需要重启才能生效;但是试想一下,为了达成这样的效果,牺牲了用户多少;又有多少用户能够熟练使用磐石来保护系统

虽然初心是好的,但这就好像是《苟在初圣魔门当人材》里的假持金丹一样,假持终究是假的,不是真的金丹;保护系统被做的像劫持系统一样,以后隐形的问题会逐一暴露出来。

Reply Favorite View the author
All Replies
2 / 2
To page
buyike
deepin
2025-12-24 12:22
#21
139******39

可问题是磐石不是独立的可分割的软件,这样的软件不开源,锁死了deepin的开源方向

我们可以用玲珑,因为玲珑是独立的,可以卸载的,是应用层面的,作为小白鼠的用户是有选择权的,用户是自由的,这就是开源的;而且玲珑是提供另外的安装包的选择,这是对用户友好的,用户总是希望功能越多越好的

现在磐石从busybox、grub开始劫持整个系统,劫持 apt, apt-get, aptitude, dpkg, update-initramfs等多个开源软件,是本身开源的软件受到限制,改变这些开源软件的功能(尽管磐石尽量做到表面上没有变化),但是开源性受到了挑战

UOS利用deepin测试一些新功能,用户喜欢新功能,也乐意去选择deepin来使用这些新功能,但是这些都是建立在系统开源,某些商用软件不开源的情况,现在v25受到磐石影响,系统呈现半开源,这是由于v25受磐石深度捆绑、磐石不开源导致的。

扪心自问,磐石的加入,真的是面向小白以及普通用户吗?什么样的普通用户需要锁死系统挂载来使用不可变系统,难道普通用户都是每天面对黑客恶意攻击的zf/qiye员工吗?

开源的目的是让系统使用感受变好,界面越来越流畅,吸引开发者加入,构建良性循环,不是公器私用,测试面向qiye/zf功能的实验自培地。

开源的目的是让系统使用感受变好,界面越来越流畅,吸引开发者加入,构建良性循环,不是公器私用,测试面向qiye/zf功能的实验自培地。

和你的理解恰恰相反,作为普通用户,我只看到开源这么多年这么多的系统都是小范围的自嗨,开源并没有让它们真正的走入更大的市场,为普通用户提供多好的体验。

相反,现在deepin确可以让普通小白也愉快的使用,用户多了,才能有真正的良性循环。

开源的应用是有很多,但真正能打的又有几个,不是界面不好,就是交互不好,以gimp为例,那界面,那交互,有几个人能适应,应用在精不在多。

Reply View the author
139******39
deepin
2025-12-24 12:38
#22
buyike

开源的目的是让系统使用感受变好,界面越来越流畅,吸引开发者加入,构建良性循环,不是公器私用,测试面向qiye/zf功能的实验自培地。

和你的理解恰恰相反,作为普通用户,我只看到开源这么多年这么多的系统都是小范围的自嗨,开源并没有让它们真正的走入更大的市场,为普通用户提供多好的体验。

相反,现在deepin确可以让普通小白也愉快的使用,用户多了,才能有真正的良性循环。

开源的应用是有很多,但真正能打的又有几个,不是界面不好,就是交互不好,以gimp为例,那界面,那交互,有几个人能适应,应用在精不在多。

开源不等价于走入更大的市场;

开源意味着:

1.减少研发经费,面向世界上所有人,他们会使用,会反馈问题,部分会解决问题

2.减少宣传费用,如果开源社区良好,某个功能出色且令人惊叹,不需要广告,社区会自发宣传,友商也会关注

等等

所以开源的目的会给用户带来更好的体验(因为大量的人用了,就会有大量的反馈意见),但是不会打开市场,因为开源的linux本身就缺乏市场销售这些,开源的东西,有需要就会有人用

像windows,人家不开源,也有很多人用,特别在中国,在特殊的时期使用了特殊的手段,挤占了市场后,国内操作系统就很难盈利

Reply View the author
139******39
deepin
2025-12-24 12:42
#23
139******39

开源不等价于走入更大的市场;

开源意味着:

1.减少研发经费,面向世界上所有人,他们会使用,会反馈问题,部分会解决问题

2.减少宣传费用,如果开源社区良好,某个功能出色且令人惊叹,不需要广告,社区会自发宣传,友商也会关注

等等

所以开源的目的会给用户带来更好的体验(因为大量的人用了,就会有大量的反馈意见),但是不会打开市场,因为开源的linux本身就缺乏市场销售这些,开源的东西,有需要就会有人用

像windows,人家不开源,也有很多人用,特别在中国,在特殊的时期使用了特殊的手段,挤占了市场后,国内操作系统就很难盈利

“deepin确可以让普通小白也愉快的使用”

我也是这么认为的,我一直用的v23,时间不长,但是就是喜欢嘛,界面好看,,,虽然流畅度有点差

现在v25不一样,,,,因为磐石的加入

如果一个开源的项目走向闭源,那么为啥不用windows,用户体验难道windows会差,为啥还要给uos当小白鼠呢?

Reply View the author
buyike
deepin
2025-12-24 13:35
#24

开源的目的会给用户带来更好的体验(因为大量的人用了,就会有大量的反馈意见)

大量,这个量有多大?就linux现在这市场占有,再大的量也大不到那里。

反馈,有用吗?如果真有大量反馈,相信开发者光看都忙不过来了。

为啥不用windows,用户体验难道windows会差,为啥还要给uos当小白鼠呢?

为啥不用,还用说吗?理由太多了。每个弃用的都有自己的理由,不是吗?

不喜欢UOS不用就是,这点百分百支持你,但就我来说,开源了那么多年那么多的linux一个能打的都没有,它们都是将自己圈在开发者的世界和思维上自己玩自己而已。

Reply View the author
深圳市耀影科技有限公司
deepin
2025-12-24 14:59
#25
buyike

开源的目的会给用户带来更好的体验(因为大量的人用了,就会有大量的反馈意见)

大量,这个量有多大?就linux现在这市场占有,再大的量也大不到那里。

反馈,有用吗?如果真有大量反馈,相信开发者光看都忙不过来了。

为啥不用windows,用户体验难道windows会差,为啥还要给uos当小白鼠呢?

为啥不用,还用说吗?理由太多了。每个弃用的都有自己的理由,不是吗?

不喜欢UOS不用就是,这点百分百支持你,但就我来说,开源了那么多年那么多的linux一个能打的都没有,它们都是将自己圈在开发者的世界和思维上自己玩自己而已。

我还在坚持用V23 哎,

Reply View the author
Tent
deepin
2025-12-24 15:19
#26

我之前也有类似疑问,磐石应该是为了保护系统关键文件不被破坏的,但又放通了deb包的方式。

而在普通用户的实际使用场景下,用户自行修改/usr导致的故障比例,要小于装了deb包导致的破坏或者三方软件自身问题引发的故障比例。

按目前实际情况来说,只限制用户自行修改/usr,而对deb进行放通,可能并不能很好地保护好系统,并且还会引发更大的麻烦,因为一旦安装deb导致了故障,想自己修复也很难,一个是额外关闭磐石的成本,一个是ostree挂载方式的不同导致挂载方式的学习成本。

Reply View the author
buyike
deepin
2025-12-24 16:36
#27
深圳市耀影科技有限公司

我还在坚持用V23 哎,

23是不错,没有磐石的烦恼,我是因为喜欢25的文管界面和功能才换到25的。

所以用什么自己选择就好,对于功能和BUG反馈过去就好,大的开发方向和决定还得是厂商自己。

Reply View the author
Μαησεωφ
deepin
2025-12-24 17:43
#28

现在的问题是,Deepin作为一个背靠信创的“社区发行版”,既要给UOS当试验新技术的小白鼠,所以必须得给不懂Linux的政企用户上不可变系统,这可以让Linux桌面发行版像安卓系统一样抗造,又要给极客发烧友当能用得趁手的高级工具,所以还不能铁了心搞不可变系统,得留下灵活应变的后手,于是最终造出了个四不像。——本来这应该是分出两个系统分支的事。

https://bbs.deepin.org/post/294328

Reply View the author
伴你高飞
deepin
2025-12-25 08:22
#29
Μαησεωφ

现在的问题是,Deepin作为一个背靠信创的“社区发行版”,既要给UOS当试验新技术的小白鼠,所以必须得给不懂Linux的政企用户上不可变系统,这可以让Linux桌面发行版像安卓系统一样抗造,又要给极客发烧友当能用得趁手的高级工具,所以还不能铁了心搞不可变系统,得留下灵活应变的后手,于是最终造出了个四不像。——本来这应该是分出两个系统分支的事。

https://bbs.deepin.org/post/294328

认同,应该出两个分支,但是,怕是一但出现两个分支,含有磐石分支的系统估计没几个人用了,那UOS小白鼠的目的就达不到了😂

Reply View the author
Μαησεωφ
deepin
2025-12-25 10:39
#30
伴你高飞

认同,应该出两个分支,但是,怕是一但出现两个分支,含有磐石分支的系统估计没几个人用了,那UOS小白鼠的目的就达不到了😂

Fedora有六七个分支,搭载不同的桌面环境,也没担心过没人用。

Reply View the author
mzcc
deepin
2025-12-25 10:41
#31
remyxo

不喜欢磐石。如果以后还不允许签名的deb文件安装,只能安装签名的deb或玲珑,那github上那么多好的软件怎么办?很多老外的开源软件根本不可能支持玲珑或麒麟的那个开明格式,总不能我下载下来先做个转换?如果软件升级,我又得下载新软件,再转换,再安装?所以我目前还是使用Debian 13,后续看看磐石有没有什么机制上的优化或改变。

当然,只考虑政府和企业机关使用,是可行的,很多政府机关和央企强行使用信创电脑和国产OS,只允许安装wps、微信等常用正版软件,办公足够了。

另外,我也搞不懂,麒麟和统信不能联合起来搞一个类似deb、rpm、snap的统一的安装包格式吗?非得各自搞一套标准,苦了开发者和用户。

说到心坎上了,deepin的很多软件都要下载下来转个格式或者弄个自己的签名,每次检测更新的时候,明明安装了官方的最新版本,连版本号都一模一样,命令行还是可以检测到更新还必须要更新,这不是扯淡吗?另外25版本空间占用太大了,这又是为什么一直用20.9的原因。空间占用这么大,我为什么不直接用win11/10,软件啥的都方便?

Reply View the author
安洛
deepin
2025-12-25 10:46
#32

采用了类似技术的 fedora silverblue 和 nixos 都基本上抛弃传统的包管理器了,转而拥抱 flatpak/nix。deepin最大的问题恐怕在于周边生态没能跟上。

Reply View the author
mzcc
deepin
2025-12-25 11:31
#33
buyike

开源的目的会给用户带来更好的体验(因为大量的人用了,就会有大量的反馈意见)

大量,这个量有多大?就linux现在这市场占有,再大的量也大不到那里。

反馈,有用吗?如果真有大量反馈,相信开发者光看都忙不过来了。

为啥不用windows,用户体验难道windows会差,为啥还要给uos当小白鼠呢?

为啥不用,还用说吗?理由太多了。每个弃用的都有自己的理由,不是吗?

不喜欢UOS不用就是,这点百分百支持你,但就我来说,开源了那么多年那么多的linux一个能打的都没有,它们都是将自己圈在开发者的世界和思维上自己玩自己而已。

你的意思是deepin、UOS能打似的

Reply View the author
deepin天下第一
deepin
2025-12-25 11:51
#34

楼主这样一说,更加坚定了守在v23的决心。 放弃deb是不可能的,本来deepin的生态就差了,国外那些软件我就没见过哪款提到了deepin的, 我可不想动不动就要从源码编译(一碰到编译报错解决不了就崩了)。想自己玩生态,这个难度恐怕太大了,即便是华为搞鸿蒙系统,那也是难如登天,鬼知道什么时候能把它的pc生态搞起来(想象力贫乏, 想不出来华为要怎么玩, deepin还能 ubuntu/debian 用, 鸿蒙???)

Reply View the author
153******21
deepin
2025-12-25 17:30
#35

因为这个系统是UOS的前哨站,免费用户就是来踩坑的,后面正式版的UOS才是主菜,面向的客户也是搞信创的企事业单位,目标用户99.99%不需要开源环境和多元软件,能用就行了。你开放的越多,问题越多,patch和release就越难越慢。sweat

Reply View the author
反了方向
deepin
2025-12-27 11:09
#36
deepin天下第一

楼主这样一说,更加坚定了守在v23的决心。 放弃deb是不可能的,本来deepin的生态就差了,国外那些软件我就没见过哪款提到了deepin的, 我可不想动不动就要从源码编译(一碰到编译报错解决不了就崩了)。想自己玩生态,这个难度恐怕太大了,即便是华为搞鸿蒙系统,那也是难如登天,鬼知道什么时候能把它的pc生态搞起来(想象力贫乏, 想不出来华为要怎么玩, deepin还能 ubuntu/debian 用, 鸿蒙???)

v23可以通过从终端升级到v25,这样就没有盘石。磐石有个问题就是系统空间占用大,而且你还无法确认那些是能删除的,对于开发同学非常不友好,构建一个项目它尽然能把系统空间占満,数据被它整到ostree下让人不知道怎么清理。应用商店里的应用能选deb就选deb,玲珑也是个坑。

Reply View the author
ycscg
deepin
2026-02-19 16:04
#37
神末shenmo

只是针对root用户主动修改/usr目录做限制,然而通过软件包安装的方式依旧可以完成对/usr目录的修改

后续不再支持安装 deb 软件,或安装到发行容器中即可解决,这样就完成了不可变的防护——说到底现在能安装deb只是一个过渡方案,后续更加激进一些,非签名的deb不允许安装到upper layer ,只允许安装到发行版容器或自动转换成玲珑应用是完全可行的,看看 apx 是怎么做的

而这种多层 overlay 的架构也允许对于多种硬件的适配——只要不涉及内核驱动,比如把对应的驱动打包成一个layer并挂载,即可实现驱动的安全安装

它改变了底层生态环境,将桌面变成了一个系统备份空间+桌面系统的组合

如果把 deepin 不看作 Linux 发行版,而是单纯的看作一个 OS ,一个给从没了解过 Linux ,也对 Linux 不感兴趣的人使用的操作平台,我觉得这是完全可接受的,且是提升用户体验必然的道路。用户不想也不应该了解什么是底层,他们需要的是稳定好用美观的 WPS ,剪映 ,Steam ,抖音,微信QQ 和 Chrome 启动器——而开发者用户仍然可以关闭磐石,这不是两全其美吗

对于真正的小白用户,他们只需要桌面环境,所以系统备份空间+桌面系统的组合——一个省心,支持广泛硬件且允许解锁的 安卓 ,这没什么不好的

懂linux的人都不想用的系统还指望小白用?别做梦了,所有流行的操作系统都是在大学计算机相关专业群体里有人用,然后才有大量其他人群用这个系统工作、娱乐、交流。

Reply View the author
2 / 2
To page