系统维护

出自 ArchWiki
(重定向自 Partial upgrade

定期的系统维护对于 Arch 在一段时间内的正常运行是必要的。及时的维护是许多用户习惯的做法。

检查错误

失败的 systemd 服务

检查是否有 systemd 服务失败

$ systemctl --failed

有关更多信息,请参见 systemd#使用单元

日志文件

在位于 /var/log/ 的日志文件以及 systemd 日志中查找错误消息

# journalctl -b

有关更多信息和过滤选项,请参见 systemd/Journal

有关 Xorg 记录错误的位置和方式的信息,请参见 Xorg#故障排除

备份

备份重要数据是必要的措施,因为随着时间的推移,人为和机器处理错误很可能产生损坏,而且存储数据的物理介质也注定会发生故障。

有关可能更适合您情况的许多替代应用程序,请参见 同步和备份程序。 有关其他感兴趣的文章,请参见 Category:系统恢复

建议自动执行备份,请参见 Autostarting#定时事件

配置文件

在编辑任何配置文件之前,请创建备份,以便在出现问题时可以恢复到工作版本。 像 vimemacs 这样的编辑器可以自动执行此操作。 在更大的范围内,请考虑使用配置管理器

对于 点文件(主目录中的配置文件),请参见 dotfiles#直接使用 Git 跟踪点文件

已安装软件包列表

维护所有已安装软件包的列表,以便如果完全重新安装不可避免,则更容易重新创建原始环境。

有关详细信息,请参见 pacman 技巧#已安装软件包列表

Pacman 数据库

参见 pacman/技巧和诀窍#备份 pacman 数据库

加密元数据

参见 Data-at-rest encryption#磁盘加密场景的备份

系统和用户数据

参见 系统备份

升级系统

建议定期通过 pacman#升级软件包 执行完整的系统升级,以享受最新的错误修复和安全更新,并避免一次处理太多需要手动干预的软件包升级。 当向社区请求支持时,通常会假定系统是最新的。

确保备有 Arch 安装介质或另一个 Linux “live” CD/USB,以便在更新后出现问题时可以轻松地救援您的系统。 如果您在生产环境中运行 Arch,或者出于任何原因无法承受停机时间,请首先在非关键的重复系统上测试对配置文件的更改以及对软件包的更新。 然后,如果没有出现问题,将更改推广到生产系统。

如果系统有来自 AUR 的软件包,请仔细升级所有这些软件包。

pacman 是一个强大的软件包管理工具,但它并不试图处理所有极端情况。 用户必须保持警惕,并对维护自己的系统负责。

升级系统前阅读

在升级之前,用户应访问 Arch Linux 主页 以查看最新新闻,或者订阅 RSS 订阅arch-announce 邮件列表。 当更新需要非同寻常的用户干预时(不仅仅是通过遵循 pacman 给出的说明即可处理),将发布适当的新闻帖子。

在将基本软件(例如 内核xorgsystemdglibc)升级到新版本之前,请浏览相应的 论坛,以查看是否已报告任何问题。

用户同样必须意识到,升级软件包可能会引发意外问题,可能需要立即干预; 因此,不鼓励在需要执行重要任务之前不久升级稳定的系统。 相反,请等到有足够的时间来解决任何升级后问题时再进行升级。

提示: 您可以使用像 informantAUR 这样的 pacman 钩子,如果您自上次更新运行以来尚未阅读最新的 Arch 新闻,它会阻止您更新。

避免某些 pacman 命令

避免进行部分升级。 换句话说,永远不要运行 pacman -Sy; 而是始终使用 pacman -Syu

通常避免将 --overwrite 选项与 pacman 一起使用。 --overwrite 选项接受包含 glob 的参数。 使用后,pacman 将绕过与 glob 匹配的文件的文件冲突检查。 在正确维护的系统中,只有在 Arch 开发人员明确建议时才应使用它。 请参见#升级系统前阅读部分。

避免将 -d 选项与 pacman 一起使用。 pacman -Rdd package 在软件包删除期间跳过依赖性检查。 因此,可能会删除提供关键依赖性的软件包,从而导致系统损坏。

不支持部分升级

Arch Linux 是一个 滚动发布 发行版。 这意味着当新的 版本被推送到存储库时,开发人员软件包维护人员 会针对库重建存储库中所有需要重建的软件包。 例如,如果两个软件包依赖于同一个库,则仅升级一个软件包也可能升级该库(作为依赖项),这可能会破坏另一个依赖于较旧版本库的软件包。

这就是为什么不支持部分升级的原因。 不要使用

  • pacman -Sy package
  • pacman -Sy 后跟 pacman -S package(请注意,软件包安装中缺少 -Su。)
  • pacman -Syuw(请注意,pacman -Syuw 确实暗示了与 pacman -Sy 相同的风险,因为它将在不安装较新软件包的情况下更新 pacman 同步数据库。)

当刷新软件包数据库时,始终使用 pacman -Syu 执行完整升级。 请注意,如果 pacman -Syu 由于错误而未执行升级,则最终结果与运行 pacman -Sy 相同。 因此,必须尽快解决错误并完成升级操作。

出于相同的原因,使用 IgnorePkgIgnoreGroup 时要非常小心。 如果系统具有本地构建的软件包(例如 AUR 软件包),则当它们的依赖项收到 soname bump 时,用户将需要重建它们。

如果已创建部分升级方案,并且二进制文件因找不到它们链接到的库而损坏,请不要仅仅通过符号链接来“修复”问题。 当库不向后兼容时,它们会收到 soname bump。 只要 pacman 没有损坏,简单的 pacman -Syu 到正确同步的镜像将解决问题。

checkupdates bash 脚本,包含在 pacman-contrib 软件包中,提供了一种安全的方法来检查已安装软件包的升级,而无需同时运行系统更新,并提供了一个选项来下载待处理的更新到 pacman 缓存,而无需触及同步数据库。

升级期间处理警报

升级系统时,请务必注意 pacman 提供的警报通知。 如果用户需要任何其他操作,请务必立即处理。 如果 pacman 警报令人困惑,请搜索论坛和最近的新闻帖子以获取更详细的说明。

及时处理新的配置文件

当调用 pacman 时,可能会创建 .pacnew.pacsave 文件。 当发生这种情况时,Pacman 会发出通知,用户必须及时处理这些文件。 用户可以参考 pacman/Pacnew 和 Pacsave Wiki 页面以获取详细说明。

同时,请考虑您可能复制或创建的其他配置文件。如果某个软件包附带了一个示例配置,而您将其复制到了您的主目录,请检查是否已创建新的配置文件。

升级后重启或重新启动

升级通常不会应用于正在运行的进程。您必须重启进程才能完全应用升级。

archlinux-contrib 软件包提供了一个名为 checkservices 的脚本,该脚本运行 pacdiff 以合并 .pacnew 文件,然后检查是否有进程正在使用过时的库运行,并在用户希望重启它们时提示用户。

内核尤其难以在不重启的情况下进行修补。重启始终是最安全的选择,但如果非常不方便,可以使用 内核实时补丁 来应用升级而无需重启。

回滚损坏的更新

如果软件包更新预计/已知会导致问题,打包者将确保在软件包更新时 pacman 显示相应的消息。如果在更新后遇到问题,请查看 /var/log/pacman.log,仔细检查 pacman 的输出。

提示: 您可以使用日志查看器,例如 wat-gitAUR 来搜索 pacman 日志。

此时,只有在确保通过 pacman 没有可用信息,https://archlinux.org.cn/ 上没有相关新闻,并且论坛上没有关于此更新的帖子时,才考虑在 论坛IRC 上寻求帮助,或通过 降级 有问题的软件包来寻求帮助。

检查孤立和已删除的软件包

升级后,您现在可能有一些不再需要的软件包,或者这些软件包已不再在官方仓库中。

使用 pacman -Qtd 检查作为依赖项安装但现在没有其他软件包依赖于它们的软件包。如果仍然需要孤立的软件包,建议将 安装原因 更改为显式。否则,如果不再需要该软件包,则可以将其删除。有关详细信息,请参阅 pacman/技巧和窍门#删除未使用的软件包(孤立软件包)

此外,某些软件包可能不再在远程仓库中,但它们可能仍然在您的本地系统上。要列出所有外来软件包,请使用 pacman -Qm。请注意,此列表将包括手动安装的软件包(例如,来自 AUR 的软件包)。要排除(仍然)在 AUR 上可用的软件包,请使用 BBS#288205 中的脚本,或尝试使用 ancient-packagesAUR 工具。

使用软件包管理器安装软件

Pacman 在跟踪文件方面比您做得更好。如果您手动安装东西,您迟早忘记您做了什么,忘记您安装到哪里,安装冲突的软件,安装到错误的位置等等。

  • 使用 pacman#安装软件包 部分中的方法从官方仓库安装软件包。
  • 如果您想要的程序不可用,请检查是否有人在 AUR 中创建了软件包。按照该文章中的方法进行安装。
  • 最后,如果您想要的程序不在官方仓库或 AUR 中,请学习如何为其 创建软件包

要清理不正确安装的文件,请参阅 pacman/技巧和窍门#识别任何软件包都不拥有的文件

选择开源驱动程序

始终先尝试开源驱动程序,然后再求助于专有驱动程序。大多数情况下,开源驱动程序比专有驱动程序更稳定和可靠。开源驱动程序的错误更容易且更快地修复。虽然专有驱动程序可以提供更多功能和能力,但这可能会以稳定性为代价。为了避免这种困境,请尽量选择已知具有成熟开源驱动程序支持和完整功能的硬件组件。有关具有开源 Linux 驱动程序的硬件的信息,请访问 linux-drivers.org

谨慎对待非官方软件包

使用来自 AUR非官方用户仓库 的软件包时要谨慎。大多数软件包由普通用户提供,因此可能不具有与官方仓库中相同的标准。避免使用 AUR 助手,它们会自动安装 AUR 软件包。在构建和/或安装软件包之前,始终检查 PKGBUILD 的合理性和错误或恶意代码的迹象。

为了简化维护,请限制使用的非官方软件包的数量。定期检查哪些软件包正在实际使用,并删除(或替换为官方对应软件包)任何其他软件包。有关有用的命令,请参阅 pacman/技巧和窍门#维护。系统升级后,使用 rebuild-detector 来识别可能需要重建的任何非官方软件包。

更新镜像列表

更新 pacman 的镜像列表,因为镜像的质量会随时间变化,并且有些镜像可能会离线或其下载速度可能会降低。

有关详细信息,请参阅 镜像

清理文件系统

在查找要删除的文件时,重要的是找到占用最多磁盘空间的文件。帮助执行此操作的程序可以在以下位置找到:

软件包缓存

/var/cache/pacman/pkg/ 中删除不需要的 .pkg 文件以释放磁盘空间。

有关更多信息,请参阅 pacman#清理软件包缓存

未使用的软件包(孤立软件包)

从系统中删除未使用的软件包,以释放磁盘空间并简化维护。

有关详细信息,请参阅 pacman/技巧和窍门#删除未使用的软件包(孤立软件包)

旧的配置文件

旧的配置文件可能会与较新的软件版本冲突,或随着时间推移而损坏。定期删除不需要的配置,尤其是在您的主目录和 ~/.config 中。出于类似的原因,在安装之间共享主目录时要小心。

查找以下目录

  • ~/.config/ -- 应用程序存储其配置的位置
  • ~/.cache/ -- 某些程序的缓存可能会增长
  • ~/.local/share/ -- 旧文件可能位于此处

有关更多信息,请参阅 XDG 基本目录支持

为了保持主目录清洁,避免在错误的位置创建临时文件,最好管理一个不需要的文件列表并定期删除它们,例如使用 rmshit.py

rmlint-gitAUR 可用于查找并可选地删除重复文件、空文件、递归空目录和损坏的符号链接。

损坏的符号链接

旧的、损坏的符号链接可能仍然存在于您的系统中;您应该删除它们。有关实现此目的的示例可以在 这里这里 找到。但是,您不应盲目删除所有损坏的符号链接,因为其中一些符号链接是有目的的 [1]

要快速列出系统上永久文件的所有损坏的符号链接,请使用

# find / -type d \( -path "/dev" -o -path "/proc" -o -path "/run" -o -path "/sys" \) -prune -o -xtype l -print

然后检查并从此列表中删除不必要的条目。

技巧和窍门

以下技巧通常不是必需的,但某些用户可能会发现它们有用。

使用经过验证的软件包

Arch 的滚动发布对于想要尝试最新功能并尽快获得上游更新的用户来说可能是一个福音,但它们也可能使系统维护更加困难。为了简化维护并提高稳定性,请尽量避免使用前沿软件,而只安装成熟且经过验证的软件。此类软件包不太可能收到困难的升级,例如重大配置更改或功能删除。首选拥有强大而活跃的开发社区以及大量有能力的用户的软件,以便在出现问题时简化支持。

避免使用 testing 仓库的任何内容,甚至包括来自 testing 的单个软件包。这些软件包是实验性的,不适用于稳定的系统。同样,避免使用直接从上游开发源构建的软件包。这些软件包通常在 AUR 中找到,名称包括诸如:“dev”、“devel”、“svn”、“cvs”、“git”等。

安装 linux-lts 软件包

linux-lts 软件包是一个备用的 Arch 内核软件包,可在 core 仓库中获得。此特定内核版本具有来自上游的长期支持 (LTS),包括安全性和错误修复。如果您使用树外内核模块并希望确保其兼容性,或者如果您想要一个备用内核以防新内核版本导致问题,这将非常有用。

要使其作为启动选项可用,您需要更新您的 启动引导器 的配置文件以使用 LTS 内核和 ram 磁盘:vmlinuz-linux-ltsinitramfs-linux-lts.img

另请参阅