Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 管理指南 / 常用任务 / 事务更新
Applies to SUSE Linux Enterprise Server 15 SP2

9 事务更新

事务更新在 SUSE Linux Enterprise Server 中以技术预览形式提供,当根文件系统为只读时,可使用技术更新来更新 SLES。事务更新具有原子性(仅当所有更新都成功时,才会应用所有更新),且支持回滚。它不影响正在运行的系统,因为只有在重引导系统后,才会激活更改。由于重引导是中断性的操作,管理员必须确定重引导的开销是否高于中断运行中服务的开销。如果重引导的开销过高,则不要使用事务更新。

事务更新由 transactional-update 脚本每天运行。该脚本将检查可用的更新。如果存在任何更新,则它会在后台创建根文件系统的新快照,然后从发布渠道提取更新。完全更新新快照后,该快照将标记为活动快照,并在下一次重引导系统后,成为新的默认根文件系统。当 transactional-update 设置为自动运行(默认行为)时,该脚本还会重引导系统。更新运行时间以及重引导维护时段均可配置。

只能更新属于根文件系统快照的包。如果包中包含不属于该快照的文件,更新可能会失败或中断系统。

无法更新需要接受许可证的 RPM。

9.1 技术预览的限制

技术预览的功能存在某些限制。transactional-update 对于以下包不起作用:

  • nginx 默认的 index.html 页可能不可用

  • tomcat-webappstomcat-admin-webapps

  • phpMyAdmin

  • sca-appliance-*

  • mpi-selector

  • emacs 可正常工作(Emacs 游戏除外)

  • 联结bind-chrootenv

  • docbook*

  • sblim-sfcb*

  • texlive*

  • iso_ent

  • openjade

  • opensp

  • pcp

  • plymouth

  • postgresql-server-10

  • pulseaudio-gdm-hooks

  • smartmontools

系统安装程序的更新程序组件不适用于只读的文件系统,因为此类文件系统不支持事务更新。

其他注意事项:

  • 一般情况下,最好在更新系统之后尽早重引导计算机。

  • 每次只能应用一项更新。在应用一项更新之后到应用下一项更新之前,请务必重引导。

  • 在事务更新之后直到将计算机重引导,都不应运行 update-alternatives

  • 在事务更新之后直到重引导,都不要创建新的系统用户或系统组。允许创建普通用户和组(UID > 1000,GID > 1000)。

  • YaST 尚不能识别事务更新。如果 YaST 模块需要安装额外的包,此操作将无法正常执行。而只是修改 /etc 中配置文件的常规系统操作可正常进行。

  • 对于 php7-fastcgi,必须手动创建指向 /usr/bin/php-cgi 的符号链接 /srv/www/cgi-bin/php

  • ntp是要从早期 SLES 版本迁移的 Legacy 模块的一部分。它在新的 SUSE Linux Enterprise Server 安装中不再受支持,且已替换为 chrony。如果您继续使用 ntp,需要进行全新安装才能正常使用事务更新。

  • sblim-sfcb:整个 sblim 生态系统与事务更新不兼容。

  • btrfs-defrag(来自 btrfsmaintenance 包)不适用于只读根文件系统。

  • 对于 btrfs-balance/etc/sysconfig/btrfsmaintenance 中的变量 BTRFS_BALANCE_MOUNTPOINTS 必须从 / 更改为 /.snapshots

  • 对于 btrfs-scrub/etc/sysconfig/btrfsmaintenance 中的变量 BTRFS_SCRUB_MOUNTPOINTS 必须从 / 更改为 /.snapshots

9.2 启用 transactional-update

必须在系统安装期间启用 Transactional Server 模块,然后选择 Transactional Server 系统角色。不支持稍后再于正在运行的系统中从 Transactional Server 模块安装任何包,此操作可能会使系统中断。

请注意,不支持更改根分区的子卷布局,或者将根分区的子目录或子卷放到其各自的分区中(/home/var/srv/opt 除外),此类操作很可能会使系统中断。

9.3 管理自动更新

自动更新由每天运行一次的 systemd.timer 控制。此操作会应用所有更新,并告知 rebootmgrd 应重引导计算机。您可以调整更新运行时间,具体请参见“systemd.timer(5)”。要调整维护时段(即 rebootmgrd 重引导系统的时间),请参见“rebootmgrd(8)”。

您可以使用以下命令禁用自动事务更新:

root # systemctl --now disable transactional-update.timer

9.4 transactional-update 命令

transactional-update 命令会启用更新的原子性安装或去除,即仅当所有更新都可以成功安装时,才会应用这些更新。在应用更新之前,transactional-update 会创建系统的快照,您可以恢复此快照。重引导后,所有更改才会生效。

--continue

可使用 --continue 选项对现有快照进行多次更改,而无需重引导。

默认的 transactional-update 行为是从当前根文件系统创建新快照。如果您忘记了某项操作,例如,忘记了安装某个新包,必须重引导来应用先前的更改,然后再次运行 transactional-update 以安装忘记安装的包,并再次重引导。不能在未进行重引导的情况下多次运行 transactional-update 命令来向快照添加更多更改,因为这样做只会创建多个独立的快照,这些快照并不会包含先前快照中的更改。

您可使用 --continue 选项在不重引导的情况下,进行任意次数的更改。每次会创建一个独立的快照,且每个快照都包含您在先前快照中进行的所有更改以及新的更改。重复此过程任意次数,当最终快照包含所需的全部更改时,再重引导系统,然后最终快照便会成为新的根文件系统。

--continue 选项的另一个有用功能是,可让您选择任一现有快照作为新快照的基础快照。以下示例演示如何运行 transactional-update 在基于快照 13 的某个快照中安装新包,然后再次运行该命令来安装另一个包:

root # transactional-update pkg install package_1
root # transactional-update --continue 13 pkg install package_2

--continue [num] 选项会调用 snapper create --from,请参见第 7.6.2 节 “创建快照”

cleanup

如果当前根文件系统与活动的根文件系统为同一个(在重引导之后,transactional-update 创建包含更新的新快照之前),将为没有清理算法的所有旧快照设置一个清理算法。如此可确保 Snapper 会删除旧快照。(请参见“snapper(8)”中有关清理算法的章节。)此操作还会去除 /var/lib/overlay 中所有未引用的(因此也未使用)/etc 覆盖目录:

root # transactional-update cleanup
pkg in/install

使用 zypper install 命令从可用渠道安装单个包。此命令还可用于安装程序临时修复 (PTF) RPM 文件。

root # transactional-update pkg install package_name

或者

root # transactional-update pkg install rpm1 rpm2
pkg rm/remove

使用 zypper remove 命令从活动快照中去除单个包。此命令还可用于去除 PTF RPM 文件。

root # transactional-update pkg remove package_name
pkg up/update

使用 zypper update 命令更新活动快照中的单个包。只能更新属于基础文件系统快照的包。

root # transactional-update pkg remove package_name
up/update

如果有新的可用更新,将会创建一个新快照,并使用 zypper up/update 更新该快照。

root # transactional-update up
dup

如果有新的可用更新,将会创建一个新快照,并使用 zypper dup –no-allow-vendor-change 更新该快照。然后,该快照将会激活,并在重引导后成为新的根文件系统。

root # transactional-update dup
patch

如果有新的可用更新,将会创建一个新快照,并使用 zypper patch 更新该快照。

root # transactional-update patch
rollback

此选项会设置默认子卷。在使用读/写文件系统的系统上可调用 snapper rollback。在只读文件系统上,如果未提供任何自变量,当前系统将设置为新的默认根文件系统。如果您指定了编号,则该快照将用作默认的根文件系统。在只读文件系统上,不会创建任何额外快照。

root # transactional-update rollback snapshot_number
grub.cfg

此参数会创建新的 GRUB2 配置。有时需要调整引导配置,例如,添加额外的内核参数。编辑 /etc/default/grub,运行 transactional-update grub.cfg,然后重引导以激活更改。您必须立即重引导,否则,下一次运行 transactional-update 时会使用默认值重写新的 GRUB2 配置。

root # transactional-update grub.cfg
reboot

此参数在完成操作后会触发重引导。

root # transactional-update dup reboot
--help

此时会输出包含选项和子命令的帮助屏幕。

root # transactional-update --help

9.5 查错

如果升级失败,请运行 supportconfig 来收集日志数据。将生成的文件(包括 /var/log/transactional-update.log)提供给 SUSE 支持人员。