跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 管理指南 / 常用任务 / 事务更新
适用范围 SUSE Linux Enterprise Server 15 SP6

13 事务更新

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

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

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

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

13.1 限制

目前,事务更新的功能存在某些限制。以下软件包不适用于 transactional-update 命令:

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

  • tomcat-webappstomcat-admin-webapps

  • phpMyAdmin

  • sca-appliance-*

  • mpi-selector

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

  • bindbind-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 Module 的一部分。新的 SUSE Linux Enterprise Server 安装中已不再支持,且已被 chrony 取代。如果您继续使用 ntp,需要进行全新安装才能正常使用事务更新。

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

  • btrfsmaintenance 软件包中的 btrfs-defrag 无法与只读根文件系统搭配使用。

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

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

13.2 启用 transactional-update

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

不支持更改根分区的子卷布局,或者将根分区的子目录或子卷置于各自的分区中(/home/var/srv/opt 除外),此类操作可能会破坏系统。

13.3 管理自动更新

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

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

# systemctl --now disable transactional-update.timer

13.4 transactional-update 命令

使用 transactional-update 命令可以原子方式安装或去除更新。如果所有更新都能成功安装,则会应用更新。在应用更新之前,transactional-update 会创建系统的快照,您可以恢复此快照。重引导后,所有更改才会生效。

--continue

使用 --continue 选项可在不重引导的情况下对现有快照进行多次更改。

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

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

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

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

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

cleanup

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

# transactional-update cleanup
pkg in/install

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

# transactional-update pkg install package_name

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

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

# transactional-update pkg remove package_name
pkg up/update

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

# transactional-update pkg update package_name
up/update

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

# transactional-update up
dup

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

# transactional-update dup
patch

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

# transactional-update patch
rollback

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

# transactional-update rollback snapshot_number
grub.cfg

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

# transactional-update grub.cfg
reboot

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

# transactional-update dup reboot
--help

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

# transactional-update --help

13.5 查错

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