如何从 Red Hat Enterprise Linux 6 升级到 Red Hat Enterprise Linux 7?

https://access.redhat.com/zh_CN/solutions/3293791

如何从 Red Hat Enterprise Linux 6 升级到 Red Hat Enterprise Linux 7?

 SOLUTION 已验证 - 已更新 2019年一月2日09:19 - 

中文 (中国) 

环境

  • Red Hat Enterprise Linux 6.x 到 Red Hat Enterprise Linux 7
产品变体 x86 架构 x86_64 架构 IBM Power IBM z Systems
Desktop Edition 不支持 不支持 N/A N/A
Workstation Edition 不支持 不支持 N/A N/A
Server Edition 不支持 支持 支持[1] 支持[2]
HPC Compute Node 不支持 支持 N/A N/A
Server running CloudForms software N/A 不支持 N/A N/A
Server running Satellite software N/A 不支持[3] N/A N/A
产品变体 所有变体
基于 UEFI 的 RHEL 安装 不支持

[1] Red Hat Enterprise Linux for Power, big endian
[2] Red Hat Enterprise Linux for IBM z Systems,当使用 Direct Access Storage Device (DASD) with Linux Disk Layout (LDL) 时除外
[3] Red Hat Satellite 6 文档提供了把 Satellite 环境从 RHEL 6 升级到 RHEL 7 的信息以及所需的工具,但是这个升级过程并不支持使用 in-place 升级工具。相关信息请参阅 Satellite 6 Documentation 

问题

  • 如何把最新版本的 Red Hat Enterprise Linux 6 原位升级 (in-place upgrade) 到最新版本的 Red Hat Enterprise Linux 7?
  • 如何使用 Preupgrade Assistant 和 Red Hat Upgrade Tool 把 Red Hat Enterprise Linux 6 升级到 Red Hat Enterprise Linux 7?

决议

概述

Red Hat Enterprise Linux 7 (RHEL 7) 是第一个支持从前一个 RHEL 主发行版本(RHEL 6)进行原位( in-place)升级的 RHEL 主版本。原位升级(in-place upgrade)提供了通过覆盖已存在的操作系统来把系统升级到一个新的主 RHEL 版本的方法。

请注意:这个过程不适用于升级 Amazon Web Services(AWS) 实例、Amazon Machine Image 和 Microsoft Azure。

当您的 RHEL 系统满足以下条件时,这里所介绍的 RHEL 6 升级到 RHEL 7 的过程会被完全支持:

  • 最新的 Red Hat Enterprise Linux 6: 在把系统升级到最新的 RHEL 7 版本前,需要对 RHEL 6 系统进行更新以安装最新的 RHEL 6 软件包。下面会对此进行介绍。

  • 所有 Server 版本 (除 x86 以外): RHEL 6 的所有 server 版本 (除 x86 以外) 都可以使用这个方法进行升级。这个方法不支持升级 RHEL Workstation 和 Desktop 系统。这个方法支持对 POWER 系统进行升级,请参阅上表。这个方法不支持 32 位系统的升级。

  • 有限的软件包组: 这个升级方法只会处理以下软件包组和软件包:Minimal (@minimal)、Base (@base)、Web Server (@web-server)、DHCP Server、File Server (@nfs-server) 、CIFS File Server 和 Print Server (@print-server)。虽然不支持升级其它软件包和软件包组,但是在一些情况下,可以从 RHEL 6 系统中卸载其它软件包,并在升级的 RHEL 7 系统上重新安装卸载的软件包。请参阅下表。

支持的 RHEL 6 升级到 RHEL 7 的用例:

  支持 不支持
要升级的系统 最新的 RHEL 6.X 早于最新版本 6.X 的 RHEL 6
升级到的系统 最新的 RHEL 7.X 早于最新版本7.X 的 RHEL 7
文件系统 同类文件系统升级。
例如,ext3 到 ext3、ext4 到 ext4、xfs 到 xfs
不同类文件系统升级。
例如,ext4 到 xfs
GNOME, KDE 所有 GNOME 和 KDE 的安装
软件包/组 Minimal (@minimal)
Base (@base)
Web Server (@web-server)
DHCP Server
File Server (@nfs-server)
CIFS File Server
Print Server
其它所有软件包/组
Virtualization KVM, VMware Microsoft Hyper-V (将来会支持)
Red Hat Software Collections 使用测试的过程 所有其它
High Availability 所有

 

升级过程包括以下基本步骤:

  1. 准备系统
    把系统更新到最新的 RHEL 6 次要版本并安装所需工具。
  2. 执行系统评估
    在进行实际升级前,使用 Preupgrade Assistant 对要升级的系统进行评估,找出可能存在的升级问题。这个操作不会对系统进行任何改变,您可以重复这个操作直到解决了所有可能的问题。
  3. 进行实际的升级
    请备份您的系统,并使用 Red Hat Upgrade Tool 进行升级操作。
  4. 提供反馈意见
    请向红帽提供您在升级过程中遇到的问题信息。

步骤 1: 准备系统

  1. 获得最新的软件包
    确保您在运行最新版本的 Red Hat Enterprise Linux,并安装了最新的软件包,注册了系统并具有相关的订阅。然后运行以下命令:

    # yum update -y
    # reboot
    
  2. 启用 Extras repository
    启用包括 preupgrade-assistant、 preupgrade-assistant-uipreupgrade-assistant-el6toel7preupgrade-assistant-el6toel7-data 和 redhat-upgrade-tool 软件包的 repository。这个 repository 的订阅可以通过 RHN Classic获得(系统连接到一个 Red Hat Satellite Server),或通过 Red Hat Subscription Management 获得(系统连接到 CDN):

    RHN Classic (Satellite):

    # rhn-channel --add --channel rhel-x86_64-server-extras-6 
    # rhn-channel --add --channel rhel-x86_64-server-optional-6 

    Red Hat Subscription Management

    # subscription-manager repos --enable rhel-6-server-extras-rpms 
    # subscription-manager repos --enable rhel-6-server-optional-rpms 
  3. 安装所需的软件包
    运行以下命令安装升级所需的软件包:

    # yum -y install preupgrade-assistant preupgrade-assistant-ui preupgrade-assistant-el6toel7 redhat-upgrade-tool
    

Step 2: 执行系统评估操作

在实际升级前,使用 Preupgrade Assistant (preupg 命令) 可以对您的系统进行评估,并找出在 Red Hat Enterprise Linux 6 升级到 Red Hat Enterprise Linux 7 的过程中可能会出现的问题。这个操作不会对系统进行任何改变,它可以帮助您在进行实际的升级前,对成功升级到 Red Hat Enterprise Linux 7 的可能性有一个了解。

注意: 在进行实际升级前,您可以(并应该)多次运行 Preupgrade Assistant 以帮助提前解决可能的问题。Preupgrade Assistant 不会对您已安装的系统造成任何损害。而如何您对系统执行了原位升级操作,则无法简单恢复到以前的系统。

Preupgrade Assistant 会执行以下任务:

  • 对系统进行分析以找出在升级过程中的限制,如删除软件包、不兼容的过期数据、名称的改变、配置文件不兼容的问题等。

  • 提供一个评估结果报告。

  • 提供一些在升级操作完成后执行的脚本。

  • 除了保存一些信息和日志数据外,系统不会有任何改变。这个操作不会对评估的系统进行修改。

Preupgrade Assistant 是一个基于模块的工具,新的检查和升级操作模块可以被方便地安装,因此,随着时间的推移,这个工具会变得更加完善。

在安装了 Preupgrade Assistant 软件包后,您可以选择在被评估系统的本地查看系统评估的结果信息,或通过网络把多个系统的评估结果发送到远程的服务器上。下面对这两种选择进行介绍。

选择 1: 运行 Preupgrade Assistant 来本地查看评估结果报告

  1. 运行 preupg 命令执行系统评估

    # preupg    With no options, produces result.html and tar.gz results files
    The Preupgrade Assistant is a diagnostics tool 
    and does not perform the actual upgrade.
    Do you want to continue? [Y/n]
    y
    Gathering logs used by the Preupgrade Assistant:
    All installed packages : 01/10 ...finished (time 00:01s)
       ...
    |Removed rpms                                                                       |needs_inspection  |
    |Content for enabling and disabling services based on RHEL 6 system                 |needs_inspection  |
    |Python 2.7.5                                                                       |needs_inspection  |
    |Check for usage of dangerous range of UID/GIDs                                     |needs_inspection  |
    |Packages not signed by Red Hat                                                     |needs_action      |
    --------------------------------------------------------------------------------------------------------
    The tarball with results is stored in '/root/preupgrade-results/preupg_results-170629152543.tar.gz' .
    The latest assessment is stored in the '/root/preupgrade' directory.
    Summary information:
    We have found some potential risks.
    Read the full report file '/root/preupgrade/result.html' for more details.
    Please ensure you have backed up your system and/or data 
    before doing a system upgrade to prevent loss of data in 
    case the upgrade fails and full re-install of the system 
    from installation media is needed.
    Upload results to UI by the command:
    e.g. preupg -u http://example.com:8099/submit/ -r /root/preupgrade-results/preupg_results-170629152543.tar.gz .
    
  2. 查看评估结果
    在 Preupgrade Assistant 对系统进行扫描时,每个执行的测试都会在命令行的标准输出中显示相应的信息,以及测试的结果。另外,这个工具还会产生一个详细的评估报告。

    • 命令行: 每个测试的结果关键字和评估的概述信息会在屏幕中显示。查看这些信息可以对评估结果有一个大概的了解。您也可以只查看结果关键字,如需更详细的信息,则可以查看 HTML 格式的评估报告。

    • 评估报告文件: 用户可以使用任何网络浏览器打开 /root/preupgrade/result.html 文件。下面是使用 Firefox 浏览器打开这个文件的命令示例:
      # firefox file:///root/preupgrade/result.html

  3. 检查每个测试结果
    在评估过程中执行的每个测试都会有自己的关键字。下表对所有可能的测试结果关键字进行了介绍:

    结果关键字 解释
    PASS 一切正常。如果所有的结果关键字都是 PASS,则可以进行升级操作。
    FAIL 进行升级操作有极大风险。无法进行原位升级。
    NEEDS_ACTION 升级会有很大风险。在运行 Red Hat Upgrade Tool 进行升级前,需要进行一些额外的操作。
    NEEDS_INSPECTION 升级有中度或低度风险。这个关键字并不意味着升级将会失败,但升级后的系统可能无法完全正常工作。系统管理员可能需要对系统的一些部分进行检查,如果需要,还需要对相关部分进行修改。
    FIXED 升级所需要的系统修改已自动完成,用户不再需要对此进行额外检查。
    INFORMATIONAL 有用但并不是非常关键的信息。
    NOT_APPLICABLE 要进行测试的软件包没有包括在测试的系统中。
    ERROR 这通常意味着测试工具本身有问题。请向红帽的技术支持团队报告这类问题。

     

  4. 查看 README 文件
    输出目录中 (/root/preupgrade/) 还会包括一个 README 文件。您可以查看这个文件来了解与 preupg 工具相关的测试结果信息。

  5. 修正发现的问题
    解决在评估过程中 Preupgrade Assistant 发现的问题。测试结果报告中会对每个问题提供一段 Solution 信息,您可以参考这些信息解决相关的问题。然后,再次进行评估操作。当没有更多需要解决的问题时,则可以继续 Step 3 的操作对系统进行升级。

选择 2: 运行 Preupgrade Assistant 来远程查看测试结果报告

如果已安装了 preupgrade-assistant-ui 软件包,您可以使用 Preupgrade Assistant 的基于浏览器的接口。这个接口从多个系统收集评估报告,并提供了对结果数据进行过滤的功能。因为升级的过程不支持升级 GNOME desktop,您可以使用这个接口在一个远程的 GUI 桌面系统中显示 Preupgrade Assistant 的结果。

警告: 安装并使用 Preupgrade Assistant Web UI 会改变要升级系统的内容,它会在 /etc/httpd/conf.d/ 目录中增加一些文件,并会在那个系统上运行 httpd 服务以实现提供相关内容的功能。如果您不希望要升级系统上的数据暴露在网络中,或不希望在要升级的系统上增加新内容,请不要使用这个方法。一个更安全的、使用图形界面查看 Preupgrade Assistant 评估结果报告的方法是,把 result.html 文件复制到一个远程系统上,并在远程系统上使用网络浏览器打开这个文件进行查看。

如果需要使用 Preupgrade Assistant Web UI 通过网络远程查看评估结果数据,则进行以下操作:

  1. 安装 httpd 软件包
    如果要升级的 RHEL 6 系统上还没有安装 httpd 软件包,运行以下命令安装它:

    # yum -y install httpd
    
  2. 配置 conf.d 文件
    在默认配置中,Preupgrade Assistant Web UI 只可以通过本地系统 (127.0.0.1) 访问。要使它可以通过本地系统中的其它网络接口进行访问(默认 TCP 端口是 8099),运行以下命令:

    # cd /etc/httpd/conf.d
    # cp 99-preup-httpd.conf.public 99-preup-httpd.conf
    
  3. 编辑新的 .conf 文件
    前一步会创建一个名为 99-preup-httpd.conf 的文件,它将允许通过主机上的一个 IP 地址访问 Preupgrade Assistant UI。如果您希望使用主机名而不是 IP 地址进行访问,您可以修改这个文件中的 "NameVirtualHost" 行中的内容。例如,您所使用的 DNS CNAME 会把 preupg-ui.example.com 指向要升级的系统,则可以使用 NameVirtualHost preupg-ui.example.com:8099 来通过主机名访问这个服务。

  4. 修改防火墙和 SELinux 设置
    如果您在使用防火墙,并以 enforcing 模式运行 SELinux,则可以使用以下命令来允许对 Preupgrade Assistant Web UI 服务所需要的端口进行访问:

    # setsebool httpd_run_preupgrade on
    # iptables -I INPUT -m state --state NEW -p tcp --dport 8099 -j ACCEPT
    
  5. 重启 httpd 访问加载新的配置

    # service httpd restart
    
  6. 使用一个网络浏览器访问 Preupgrade Assistant Web UI
    在另外一台机器上使用网络浏览器,通过 IP 地址(例如,http://192.168.99.1:8099)或主机名(例如,http://preupg-ui.example.com:8099)访问 Preupgrade Assistant Web UI 服务。

  7. 添加 Web UI 身份验证信息
    在第一次访问 Preupgrade Assistant Web UI 时,需要添加一个用户账户,使用这个用户来对服务进行访问;或禁用身份验证功能。

    • 使用用户验证功能
      可以使用一个已存在的用户账户,或添加一个新账户。如果选择了 "Submit" 来创建一个新用户,当用户验证功能被禁用时,它会被自动启用。如果您需要在以后编辑用户,使用 UI 中的 User Management 标签页。
    • 不使用用户验证功能
      如果您不需要进行用户验证,点 "Disable Authentication" 来开始使用图形界面。
  8. 运行 preupg 命令
    返回到您需要升级的系统。运行以下命令可以使系统评估结果自动发送到 Preupgrade Assistant Web UI 服务器:

    # preupg -u http://localhost:8099/submit/
    The Preupgrade Assistant is a diagnostics tool 
    and does not perform the actual upgrade.
    Do you want to continue? [Y/n]
    y
    Gathering logs used by the Preupgrade Assistant:
    All installed packages : 01/10 ...finished ...
      ...
    Report submitted successfully. You can inspect it at http://localhost:8099/1/detail/
    
  9. 通过 Web UI 查看评估结果
    返回到远程系统中的网络浏览器并再次访问 Web UI,或重新加载这个网页。以下是 Preupgrade Assistant Web UI 的一个示例:

    Preupgrade Assistant report in Web UI

  10. 修复结果报告中的问题
    在 Web UI 中,找到并查看相关的评估报告。检查报告中的每个项,并解决相关的问题。然后,再次运行 preupg 已重新访问系统,并把报告上传到 Web UI。如果没有新问题,则可以继续 Step 3 的操作。

Step 3: 进行升级

当完成了 Preupgrade Assistant 评估并解决了所有发现的问题后,就可以使用 Red Hat Upgrade Tool 对系统进行实际的升级。

重要信息: 运行 Red Hat Upgrade Tool 的一个前提条件是已运行了 Preupgrade Assistant。如果在还没有运行 Preupgrade Assistant 的情况下运行 Red Hat Upgrade Tool,则会出现 preupgrade-assistant has not been run 错误信息并退出操作。虽然您可以通过使用 --force 选项来强制进行升级,但使用这个选项进行升级的系统将不被支持。

  1. 备份系统
    在使用 Red Hat Upgrade Tool 对系统进行升级前,请备份所有数据以避免出现可能的数据丢失问题。这一点非常重要。

  2. 先进行测试
    请不要马上对生产环境中的系统进行升级。先对系统进行一个克隆并在克隆的环境中对升级过程进行测试。

  3. 使用 Subscription Management
    Red Hat Enterprise Linux 7 需要 Red Hat Subscription Management (RHSM) 工具,而不是 RHN Classic 工具。如果您的 Red Hat Enterprise Linux 6 系统还在使用 RHN Classic 工具进行注册,您需要取消相关的注册(请参阅 How do I delete System Profiles in RHN Classic?),然后使用 subscription-manager 命令进行注册。请参阅 Get Started with Red Hat Subscription Management。您也可以使用 一个自动的方法从 RHN 迁移到 RHSM

  4. 运行 redhat-upgrade-tool 下载升级到 Red Hat Enterprise Linux 7 所需的软件包,并准备软件包的安装。您可以使用多个方法指定 Red Hat Enterprise Linux 7 软件包的位置:

    • 安装软件仓库(repository)
      使用 --instrepo 选项可以指定包括 Red Hat Enterprise Linux 7 软件包的软件仓库的位置。红帽不会提供这个软件仓库,您需要自己创建它。在这里的示例中,我们使用一个 FTP 服务器,最新的 RHEL 7 DVD 中的内容被复制到这个服务器的一个 rhel7/ 目录中。您也可以使用 HTTP 或 HTTPS 系统来包括最新的 Red Hat Enterprise Linux 7 软件包。

    # redhat-upgrade-tool --network <the-latest-rhel-7-minor-version> --instrepo ftp://ftp.example.com/pub/rhel7/
    example:
    # redhat-upgrade-tool --network 7.3 --instrepo ftp://ftp.example.com/pub/rhel7/ 

    如果指定了一个无效的 Red Hat Enterprise Linux 7 次版本,升级过程会失败。

    • 挂载安装介质
      把安装介质挂载到系统上。例如,/dev/sdb 设备中的一个 DVD 或 USB 盘,以 root 身份运行以下命令:
    # redhat-upgrade-tool --device /dev/sdb
    

    如果没有在参数中指定一个具体设备,这个工具程序会扫描当前所有已挂载的可删除设备。

    • ISO 镜像
      如果需要使用一个 ISO 镜像进行升级,在 --iso 参数后指定到 ISO 镜像的路径。例如,最新的 RHEL 7 安装 DVD 镜像位于本地系统上的 /var/isos/rhel7dvd.iso,可以使用与以下相似的命令:
    # redhat-upgrade-tool --iso /var/isos/rhel7dvd.iso
    

    请注意: 为了使升级可以正常进行,您可以需要访问除 RHEL 7 DVD 所提供的基础软件包以外的其它一些软件仓库。特别是,RHEL 7 的 Extras 软件仓库中包括了一些 RHEL 6 基本系统中的一些软件包(主要是与软件开发相关的软件包),它们没有包括在 DVD 中。如果您的系统升级需要的软件包(用来满足软件包依赖)没有包括在 RHEL 7 Base 软件仓库中,您可以安装一个独立的 RHEL 7 系统作为一个 yum 软件仓库来提供您所需要的软件包(通过 FTP 或 HTTP)。根据使用 createrepo 或 reposync 创建一个本地软件仓库以进行更新 的介绍设置一个在升级过程中可以使用的软件仓库。然后,使用 --addrepo 参数为 Red Hat Upgrade Tool 提供额外的软件仓库。这个命令会和以下类似:

    # redhat-upgrade-tool --device /dev/sdb --addrepo optional=http://host/repo
    
  5. 重启
    您需要重启系统以完成安装过程。根据您所升级的软件包数量,重启过程可能会需要一定时间完成。如果一切顺利,系统会重启到 Red Hat Enterprise Linux 7,您可以检查系统是否可以正常工作。

  6. 执行升级后(post-upgrade)任务
    Preupgrade Assistant 为那些 FIXED 项创建的脚本会在升级后自动运行。 Preupgrade Assistant 中报告的其它升级后的任务需要系统管理员手工运行。

  7. 检查系统
    如果您的系统在使用 RHEL 6 时已被正确注册并订阅,升级过程会自动把它重新订阅到 RHEL 7。运行以下命令检查系统已被正确升级并订阅为 RHEL 7 系统:

    # yum repolist
    Loaded plugins: product-id, subscription-manager
    repo id                 repo name                                                     status
    rhel-7-rpms             Red Hat Enterprise Linux 7 Server (RPMs)                      4,323
    # cat /etc/redhat-release
    Red Hat Enterprise Linux Server release 7.0 (Maipo)
    
  8. 如果需要,更新软件仓库列表
    如果软件仓库列表没有被正确升级到 RHEL 7,取消订阅这个系统,重新把它订阅为一个 RHEL 7 系统,添加您需要的软件仓库。所有可用的软件仓库都应该在 /etc/yum.repos.d/redhat.repo 文件中列出。

    # subscription-manager remove --all
    # subscription-manager unregister
    # subscription-manager register
    # subscription-manager attach --pool=poolID
    # subscription-manager repos --enable=repoID
    
  9. 运行 yum update
    如果升级过程成功,使用以下命令把所有新的 RHEL 7 软件包升级到最新版本:

    # yum update -y
    # reboot
    

Step 4: 提供反馈意见

请向红帽提供您在升级过程中遇到的问题信息。您可以在 Bugzilla 中开一个 bug report,或在红帽客户门户网站中开一个支持问题单,我们将帮助解决您可能遇到的问题。

您也可以提供一个 debug 日志,它位于升级系统的 /var/log/upgrade.log 文件中。

信息更新

现在,原位升级(in-place upgrade)中增加了一个新的回滚功能。请参阅 RHEL 6.10 发行注记 或 Red Hat Upgrade Tool - rollbacks and cleanup after upgrading RHEL 6 to RHEL 7 KBase 中的相关内容。

已知问题

启用 FIPS 模式时将无法使用原位升级的方法把 RHEL 6 系统升级到 RHEL 7.6
当使用 LDL 时,在 IBM Z 系统上进行原位升级将会失败并导致数据丢失