MicroOS如何实现Immutable特性?—四川 成都 IT解决方案商

张智博,SUSE大中华区容器解决方案总监。9年的云计算领域经验,一直活跃在研发一线,经历了OpenStack到Kubernetes的技术变革,无论底层操作系统Linux,还是虚拟化KVM或是Docker容器技术都有丰富的研发和实践经验。

背景

openSUSE作为一个发展历史悠久的Linux家族,有很多分支版本。其中,MicroOS是源于Immutable OS理念提出的较新的分支。Immutable即为不可变,在云原生领域中,Immutable是非常重要的发展方向,以这种理念构建整个业务体系,可以极大简化运维复杂度。在上篇文章《入门实战|不可变操作系统MicroOS安装指南》的结尾处我们了解了Immutable特性的基本原理,本文我们将对其进行深入探索。

时效性提示:本文使用openSUSE MicroOS版本为20210306。

Btrfs的特性

Btrfs是Linux下非常有机会替代ext4的下一代文件系统,功能非常强大。MicroOS中运用了Btrfs两个关键特性subvolume和snapshot。

对于subvolume,可以理解为一个虚拟的设备,由Btrfs管理,创建好了之后就自动挂载到了Btrfs文件系统的一个目录上,所以我们在文件系统里面看到的subvolume就是一个目录,但它是一个特殊的目录,具有挂载点的一些属性。

对于snapshot,可以在subvolume的基础上制作,几点需要注意:

默认情况下subvolume的快照是可写的
快照是特殊的subvolume,具有subvolume的属性。
所以快照也可以通过mount挂载,也可以通过Btrfs property命令设置只读属性
由于快照的本质就是一个subvolume,所以可以在快照上面再做快照

在subvolume上做了快照后,subvolume和快照就会共享所有的文件,只有当文件更新的时候,才会触发COW(copy on write),所以创建快照很快,基本不花时间,并且Btrfs的COW机制很高效,就算多个快照共享一个文件,更新这个文件也和更新一个普通文件差不多的速度。

MicroOS使用Btrfs作为RootFS的文件系统,核心依托snapshot机制实现了Immutable特性。

深入分析

MicroOS的Initrd是基于dracut(https://linux.die.net/man/8/dracut)构建的,并使用systemd作为Initrd的init程序,我们可以通过大GRUB中添加一个kernel cmdline(rdinit=/bin/sh)进入Initrd,分析MicroOS的根磁盘挂载和启动过程。Dracut配合systemd在Initrd中的执行过程,可参考dracut-bootup。Dracut支持在kernel cmdline中设置根磁盘的挂载点,在MicroOS中,可以查看下面文件探知一二:

我们可以大概知道,MicroOS使用对应的根磁盘设备(root=UUID=xxx),以及使用Btrfs的一个subvolume作为根目录(rootflags subvol)。这个subvolume其实是基于Btrfs的snapshot生成的,这样每次启动时在GRUB中注入kernel cmdline可以控制启动时根目录使用哪个snapshot,这样就实现了Immutable特性。比如,之前使用transactional-update命令安装了Docker软件包,它会基于调整后的RootFS生成一个新的snapshot(snapshot也是一种特殊的subvolume),也会更新GRUB的cmdline参数指向新的snapshot。当我们再次启动系统时,就会挂载新的snapshot作为根目录,用户的一切操作会在新的根目录进行。

从Initrd到完整进入OS,需要把systemd的若干units都执行完毕。这个过程中,除了会把当前snapshot挂载到Initrd的sysroot目录外,还会把sysroot的fstab中包含xinitrd-mount option的卷挂载。最终通过switch rootfs,将根目录从Initrd的根切换到sysroot,而sysroot则是挂载的Btrfs的snapshot。

完整进入OS后,通过btrfs的相关命令,可以展示系统中的snapshot。可以看到snapshot3,而它就是前面展示的Initrd在启动时挂载的RootFS:

几乎所有的Immutable OS有一个特色就是根目录默认是只读的,只允许在一些特定的数据目录中可写。这里我们可以查看根目录的Btrfs属性得知,通过以下命令得其属性为readonly。当然,一旦使用transactional-update更新RootFS,新的snapshots会首先是可写的,一切就就绪后会设置为只读,以便系统重启后可以使用它:

默认安装时,MicroOS的自动分区模式会把磁盘分割成三部分:

sda1作为EFI的boot分区,挂载到/boot/efi,这也是大部分发行版的标准做法
sda2是Btrfs类型文件系统,挂载到根目录,是整个MicroOS的Immutable特性的关键,可以看到大量使用了Btrfs的subvol
sda3就是普通的数据分区,挂载的/var。不过,默认分区模式下还是使用Btrfs,对于Docker容器常用的 /var/lib/docker 目录而言,Btrfs可能是个性能瓶颈(我们在后续文章中探讨如何解决)

我们这里主要看sda1,它相当于系统的根分区。在这个设备上建立的Btrfs包含很多subvol(下图可以看到):

除了snapshot之外(前面讲过),其他的subvolume都是可写的,并挂载到系统的特定目录中。尽管Immutable特性让根目录几乎是只读的,但是我们依然需要在个别目录保存一些数据,这些目录被排除在Immutable特性之外。因为通常都是非核心系统相关,大都和用户个人的操作行为有关,这也是Immutable OS通用的做法。

 

这里可以看到大量的subvolume使用“@”这个特殊字符,这是Btrfs的一个技巧。因为在系统中,根目录“/”挂载的是snapshot3,而要在这个snapshot3的RootFS中挂载其他的subvolume,需要一种表达方式确认subvolume的Path。由于MicroOS在Initrd时就挂载snapshot3,此时系统中已经无法使用明确的路径描述subvolume的Path,“@”恰好可以代表某个subvolume所在的Btrfs本身,通过它来引用其他的subvolume。

系统中/etc目录是一个特殊的存在,更改系统配置是一个偶尔发生的操作,需要让/etc目录是可写的。这里使用了一个overlayfs,在较旧的快照中的更改也将对较新的快照可见,所以该目录不必位于单独的分区上.

由于其具备x-initrd.mount option,所以它是在Initrd过程中被挂载的,我们可以看到lowerdir和updir等还具备sysroot前缀。但是,Initrd最终会执行switch rootfs,所以我们在进入完整系统中可以在/var/lib/overlay目录中查看对应信息。

回滚RootFS

每次snapshot都可以作为系统的回滚点,最简洁的方式就是在GRUB中选择希望回滚的快照,进入GRUB后选择“start bootloader from a read-only snapshot”:

当然,我们还可以使用transactional-update rollback命令来实现回滚,执行它之前,需要使用snapper获取snapshot ID。比如,当前RootFS在snapshot4,我们将其回滚到snapshot3:

重启后,再次查看,可以看到当前系统RootFS已经回滚到snapshot3。

当然,如果觉得snapshot过多,则可以使用transactional-update和snapper命令把一些不需要的snapshot进行删除,让系统更加清爽简洁。

IT解决方案
产品品类:
SUSE Linux企业服务器、Z系统和LinuxONE的SUSE Linux企业服务器、用于POWER的SUSE Linux企业服务器、用于ARM的SUSE Linux企业服务器、用于SAP应用程序的SUSE Linux企业服务器、SUSE Linux企业高性能计算、SUSE Linux企业实时、支持扩展的SUSE Linux企业服务器、SUSE Linux企业级服务点、SUSE Linux企业桌面、用于AmazonEC 2的SUSE Linux企业服务器、用于Azure的SUSE Linux企业服务器、SUSE Linux企业高可用性扩展、基于Geo集群的SUSE Linux企业高可用性扩展、SUSE Linux企业服务器工作站扩展、SUSE Linux企业虚拟机驱动程序包、SUSE LinuxEnterpriseLive修补、SUSE企业存储、SUSE容器作为服务平台、SUSE经理、零售经理、SUSE LinuxEnterpriseforARM、用于IBMZ和LinuxONE的SUSE Linux企业服务器、用于POWER的SUSE Linux企业服务器、SUSE嵌入式系统

运行SAP:

用于SAP应用程序的SUSE Linux企业服务器、用于高可用性扩展的SUSE Linux企业服务器、、容器和应用平台、SUSE CaaS平台、SUSE云应用平台、SUSE DevOps

高可用性:用于高可用性扩展的SUSE Linux企业服务器、面向高可用性Geo集群的SUSE Linux企业、SUSE Linux企业实时、SUSE LinuxEnterpriseLive修补、SUSE Linux企业高性能计算

品牌:
SUSE Linux操作系统

解决方案:
SUSE12修改密码、suse linux 安装软件、suse系统、suse和redhat区别、opensuse使用教程、技术资源、核极限、KVM限制、Xen极限、文件系统、支持Java版本
不间断的IT、Running SAP Solutions、运行SAP解决方案、Adopting Containers、容器比例尺、Managing Hybrid Clouds、混合云解决方案、Government Solutions、Deliver Applications Faster、Harness the Data Explosion、引导数据热潮、Powering AI Advanced Analytics、幂AI与分析、Innovate at the Edge

中国区Suse Linux Enterprise Server 产品建议列表价
SUSE Linux Enterprise Server  for X86 and forAMD64 & Intel EM64T
标准服务5*12 CPU 1年 3年 5年
 单一物理机 无限虚机  单一物理机 无限虚机  单一物理机 无限虚机
P/N 874-006879 874-006880 874-006887 874-006888 874-006898 874-006902
1-2 Socket 面议 面议 面议 面议 面议 面议
高级服务7*24 CPU 1年 3年 5年
 单一物理机 无限虚机  单一物理机 无限虚机  单一物理机 无限虚机
P/N 874-006875 874-006876 874-006883 874-006884 874-006894 874-006895
1-2 Socket 面议 面议 面议 面议 面议 面议
SUSE Linux Enterprise Server for SAP Applications (x86-64)
高级服务7*24 CPU 1年 3年 5年
 单一物理机 无限虚机  单一物理机 无限虚机  单一物理机 无限虚机
P/N 874-006905 874-006906 874-006907 874-006908 874-006909 874-006910
1-2 Socket 面议 面议 面议 面议 面议 面议
SUSE Linux Enterprise High Availability Extension for x86/AMD64/Intel64
跟随操作系统服务级别 CPU 1年 3年 5年
P/N 874-006923 874-006924 874-006925
1-2 Socket 面议 面议 面议

* 所有价格为人民币含税价格
* 最新报价为累计计算CPU数量方式,如客户服务器为4CPU,需采购1-2socket产品两套,如为8CPU即购买4套;
* HA的服务级别跟随SLES操作系统价格,并需成对购买
* 无限虚机版本为服务器上部署任意数量的虚拟机,在其上面安装Suse Linux OS 只收取一套版本的费用
* 更多产品信息及报价请咨询相关销售代表

服务区域:

四川suse 成都suse 西藏suse 重庆suse贵州suse 贵阳suse 云南suse 昆明suse

四川suse: 德阳suse 绵阳suse,攀枝花suse,西昌suse,雅安suse,内江suse,资阳suse,南充suse,眉山suse,乐山suse,自贡suse 泸州suse 广元suse 遂宁suse 宜宾suse 广安suse 达州suse 雅安suse 巴中suse 资阳suse 攀枝花suse 凉山彝族自治州suse 甘孜藏族自治州suse 阿坝藏族羌族自治州suse

贵州suse:贵阳suse 、六盘水suse、遵义suse、安顺suse、铜仁suse、毕节suse。 黔南suse 、黔西南suse、贵州黔东南suse

重庆suse 合川suse 南川suse

潼南suse 铜梁suse 长寿suse 璧山suse 荣昌suse 綦江suse 大足suse 武隆suse 垫江suse 奉节suse

丰都suse 城口suse 巫溪suse 云阳suse 酉阳suse 巫山suse 梁平suse 彭水suse 秀山suse 石柱suse 开县suse

昆明suse、曲靖suse、玉溪suse、 保山suse 、昭通suse 、丽江suse 、普洱suse、 临沧suse。

文山壮族苗族自治州(文山suse) 、红河哈尼族彝族自治州(红河suse) 、西双版纳傣族自治州、(西双版纳suse) 楚雄彝族自治州(楚雄suse)、 大理白族自治州(大理suse)、 德宏傣族景颇族自治州(德宏suse)、 怒江傈僳族自治州(怒江suse)、 迪庆藏族自治州(迪庆suse)

更多品类和方案、价格 请咨询:

成都科汇科技有限公司(IT解决方案商)
地址:四川省成都市武侯区人民南路四段一号时代数码大厦18楼A5
电话咨询热线:400-028-1235
24小时咨询热线:180 8195 0517(微信同号)
本文章为转发的公开信息,如有相关侵权,敬请联系上述联系方式即可删除。

在线客服系统