2.3. 文件系统布局

Red Hat Enterprise Linux 7 引进了两个文件系统布局的主要变化。
  • /bin, /sbin, /lib/lib64 目录现在位于 /usr 目录中。
  • /tmp 目录目前可作为临时文件存储系统(tmpfs)使用。
  • 现在使用 /run 目录作为临时文件存储系统(tmpfs)。应用程序现在可以采用与 /var/run 目录的相同方式使用 /run

2.3.1. root 文件系统的新布局

通常在 /bin/lib 目录中只包含有限的必要内容以避免延缓引导进程。有些程序必须位于 root(/)层以便挂载 /usr 分区。这样会造成其他程序将其内容分散到多个目录层的情况,例如同时位于 /bin/usr/bin 中。
Red Hat Enterprise Linux 7 将 /bin, /sbin, /lib/lib64 目录移到 /usr 中。因为 /usr 文件系统现在可以使用 initramfs,而不是一定要使用 root 层目录中的程序挂载,因此不再需要将软件包内容分散到两个不同目录层中。这样就可以使用一个小得多的 root 文件系统,让系统可以更有效地共享磁盘空间,同时系统也更容易管理、更灵活且更安全。
要减轻这种变化的影响,之前的 /bin 目录现在是一个连接 /usr/bin 的符号链接,/sbin 是连接 /usr/sbin 的符号链接,依此类推。

2.3.1.1. 为升级准备您的文件系统

如果 /usr 目前位于不同的分区,请保证 /usr 分区有足够的空间可以复制 /bin, /sbin, /lib/lib64
如果 /usr 目前不是位于不同的分区,请保证 / 分区有足够的空间可以对 /bin, /sbin, /lib/lib64 进行恢复复制。
如果 /var 位于不同的分区,则必须手动将 /var/run/var/lock 转换为符号链接,比如:
# mv -f /var/run /var/run.runmove~
# ln -sfn /run /var/run
# mv -f /var/lock /var/lock.lockmove~
# ln -sfn /run/lock /var/lock
准备完成后,请按照《Red Hat Enterprise Linux 7 按照指南》中的步骤执行升级过程。

2.3.1.2. 确认成功升级

执行升级过程后,要确认升级如预期完成。
  1. 检查以下符号链接是否存在:
    • /bin 是到 /usr/bin 的符号链接
    • /sbin 是到 /usr/sbin 的符号链接
    • /lib 是到 /usr/lib 的符号链接
    • /lib64 是到 /usr/lib64 的符号链接
    • /var/run 是到 /run 的符号链接
    • /var/lock 是到 /run/lock 的符号链接
    如果上述目录如预期以符号链接显示,则还需要检查两项内容。
  2. 检查以下 find 命令的输出结果:
    # find /usr/{lib,lib64,bin,sbin} -name '.usrmove'
    这个命令输出结果中显示的文件或者目录无法复制到 /usr,因为有相同名称的文件或者目录已存在于 /usr 中。您需要手动解决这些名称冲突。
  3. 检查下面的目录中您要保留的文件:
    • /var/run.runmove~
    • /var/lock.lockmove~
如果上述目录中有任何非符号链接,则需要按照 第 2.3.1.3 节 “从失败的升级中恢复” 的恢复过程操作。

2.3.1.3. 从失败的升级中恢复

升级过程失败可能有很多种原因。请检查下面命令的输出结果找出问题所在:
# dmesg
# journalctl -ab --full
如果没有出现任何出错信息,请检查:
  • / 是否可写入
  • /usr 是否可写入
  • /usr 是否正确挂载
  • / 是否有足够空间
  • /usr 是否有足够空间
  • /var 是否挂载到 rhelup 工具中
如需进一步支持服务请联络 Red Hat 支持。

2.3.2. 更换至 /tmp 目录

Red Hat Enterprise Linux 7 可让您使用 /tmp 作为临时文件存储系统(tmpfs)的一个挂载点。
启用该功能后,这个临时存储会以挂载的文件系统出现,但是在易失性内存而不是持久存储设备中保存其内容。除非内存很少,不会在硬盘中保存 /tmp 中的文件,在这种情况下会使用 swap 空间。就是说 /tmp 中的内容在重启后会丢失。
要启用这个功能,请执行以下命令:
# systemctl enable tmp.mount
要禁用这个功能,请执行以下命令:
# systemctl disable tmp.mount
Red Hat 为您推荐 Red Hat Enterprise Linux 7 中使用的各种不同类型的临时存储空间。
  • 特权进程,比如守护进程,应使用 /run/processname 保存临时数据。
  • 保存大量数据的进程,或者需要重启后仍保留的数据,应使用 /var/tmp
  • 其他进程应使用 /tmp 保存临时数据。

2.3.3. 更换至 /run 目录

重要

预升级助手(Preupgrade Assistant)尚未检查这个变化对 Red Hat Enterprise Linux 7.0 最初发行本的影响。这个问题曾在 RHBA-2014:1627 做出过修正,请查看:https://rhn.redhat.com/errata/RHBA-2014-1627.html
Red Hat Enterprise Linux 之前的版本允许一些程序在引导之初,即挂载 /var 目录前将运行时数据保存在 /dev 目录中。在所有主要 Linux 发行本中均应采用 /run,因为 /dev 目录仅用于设备节点。
因此,在 Red Hat Enterprise Linux 7 中,/run 目录是一个临时文件存储系统(tmpfs),可绑定安装 /var/run 目录。同样,/run/lock 目录现在绑定安装 /var/lock 目录。保存在 /run/run/lock 中的文件在重启后不再存在。这意味着应用程序必须在启动时重新生成器自己的文件和目录,而不是在安装时一次搞定。/etc/app_name 目录是这个方法的理想选择。
有关如何在启动时重新生成文件和目录的详情,请查看 tmpfiles.d man page:man tmpfiles.d。例如:请在 /etc/tmpfiles.d 中查看配置文件。

为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。