搜索

第 7 章 在 RHEL 的镜像模式中管理文件系统

download PDF

目前,RHEL 的镜像模式使用 OSTree 作为后端,并默认为存储启用 composefs/opt/usr/local 路径是纯文本目录,而不是指向 /var 的符号链接。这可让您轻松在派生容器镜像中安装写入 /opt 中的第三方内容,例如:

7.1. 使用 /sysroot 的物理和虚拟 root

当系统被完全引导时,它与 chroot 类似,即操作系统更改当前运行的进程及其子项的明显根目录。物理主机根文件系统挂载到 /sysrootchroot 文件系统称为部署 root。

其余的文件系统路径是部署 root 的一部分,用作系统引导的最终目标。系统使用 ostree=kernel 参数来查找部署根。

/usr
这个文件系统会将所有操作系统内容保存在 /usr 中,目录(如 /bin )作为 /usr/bin 的符号链接。
注意

启用 composefs/usr/ 不同。这两个目录都是同一不可变镜像的一部分,因此您不需要使用 bootc 系统执行完整的 UsrMove

/usr/local
基础镜像被配置为使用 /usr/local 作为默认目录。
/etc

/etc 目录默认包含 mutable 持久状态,但它支持启用 etc.transient 配置选项。当目录处于可变持久性状态时,它会在升级过程中执行三向合并:

  • 使用新默认 /etc 作为基础
  • 将当前和之前的 /etc 之间的 diff 应用到新的 /etc 目录
  • 保留与 /etc 中相同部署的默认 /usr/etc 不同的本地修改文件。

ostree-finalize-staged.service 在创建新引导装载程序条目前在关闭过程中执行这些任务。

这是因为 Linux 系统的许多组件在 /etc 目录中提供默认配置文件。即使默认软件包没有提供,默认情况下,软件只检查 /etc 中的配置文件。非基于 bootc 镜像的、没有不同版本的 /etc 更新系统只在安装过程中填充,且不会在安装后随时更改。这会导致初始镜像版本影响 /etc 系统状态,并可能导致问题来应用更改,例如: /etc/sudoers.conf,需要外部干预。有关文件配置的详情,请参阅 构建和测试 RHEL bootc 镜像

/var
默认情况下,/var 目录中的内容是持久的。您还可以使 /var 或 子目录挂载点持久,无论是网络还是 tmpfs

只有一个 /var 目录。如果它不是不同的分区,则 /var 目录物理是绑定到 /ostree/deploy/$stateroot/var,并在可用的引导装载程序条目部署间共享。

默认情况下,/var 中的内容充当卷,即在初始安装过程中复制容器镜像中的内容,并在之后不会更新。

/var/etc 目录不同。您可以将 /etc 用于相对较小的配置文件,预期的配置文件通常绑定到 /usr 中的操作系统二进制文件。/var 目录有任意的大型数据,如系统日志、数据库和默认,如果操作系统状态被回滚,则不会回滚。

例如,进行 dnf downgrade postgresql 等更新不会影响 /var/lib/postgres 中的物理数据库。同样,进行 bootc 更新bootc 回滚 不会影响这个应用程序数据。

使用 /var 也会在应用新操作系统更新之前完全正常工作,即下载并就绪更新,但仅在重启时生效。同样适用于 Docker 卷,因为它将应用程序代码与其数据分离。

如果您希望应用程序具有预先创建的目录结构,例如 /var/lib/postgresql,则可以使用这个情况。为此,请使用 systemd tmpfiles.d。您还可以以单位使用 StateDirectory= <directory& gt;。

其他目录
不支持在容器镜像中的 /run/proc 或其他 API Filesystems 中提供内容。除此之外,其他顶级目录(如 /usr/opt )与容器镜像相关联。
/opt
使用 composefsbootc 时,/opt 目录是只读的,以及其他顶级目录,如 /usr

当软件需要写入 /opt/exampleapp 中的其自己的目录时,常见的模式是使用要重定向到的符号链接,例如 /var 用于日志文件等操作:

RUN rmdir /opt/exampleapp/logs && ln -sr /var/log/exampleapp /opt/exampleapp/logs

另外,您可以将 systemd 单元配置为启动服务来动态进行这些挂载。例如:

BindPaths=/var/log/exampleapp:/opt/exampleapp/logs
启用临时 root
要默认启用完全临时可写 rootfs,请在 prepare-root.conf 中设置以下选项:
[root]
transient = true

这可让软件临时写入 /opt,对于必须保留的内容,到 /var 的符号链接。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.