系统维护

来自 ArchWiki
(重定向自 Upgrade

为了使 Arch 长期正常运行,定期的系统维护是必要的。及时维护是许多用户习惯的做法。

检查错误

systemd 服务失败

检查是否有 systemd 服务失败

$ systemctl --failed

请参阅 systemd#使用单元 了解更多信息。

日志文件

/var/log/ 中的日志文件以及 systemd 日志中查找错误

# journalctl -b

请参阅 systemd/日志 了解更多信息和过滤选项。

请参阅 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 feedarch-announce 邮件列表。当更新需要非同寻常的用户干预时(超出仅通过遵循 pacman 给出的说明即可处理的范围),将发布相应的公告。

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

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

提示: 您可以使用像 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 维基页面了解详细说明。

此外,考虑一下您可能复制或创建的其他配置文件。如果软件包有一个您复制到主目录的示例配置,请检查是否已创建新的配置。

升级后重启或重新启动

升级通常不应用于现有进程。您必须重新启动进程才能完全应用升级。

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

参见