系统维护

出自 ArchWiki

为了 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)升级到新版本之前,请查看相应的 论坛,看看是否有人报告过任何问题。

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

提示: 您可以使用 pacman hook,例如 informantAUR,它可以防止您在未阅读自上次更新运行以来发布的新鲜 Arch 新闻时进行更新。

避免某些 pacman 命令

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

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

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

不支持部分升级

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

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

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

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

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

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

bash 脚本 checkupdates,包含在 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 Base Directory 支持 以获取更多信息。

为了保持主目录清洁,避免在错误的位置创建临时文件,最好管理不需要的文件列表并定期删除它们,例如使用 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

参见