系统维护
为了 Arch 在一段时间内正常运行,定期的系统维护是必要的。许多用户都习惯了及时维护的做法。
检查错误
失败的 systemd 服务
检查是否有任何 systemd 服务失败
$ systemctl --failed
有关更多信息,请参见 systemd#使用单元。
日志文件
在位于 /var/log/
中的日志文件以及 systemd 日志中查找错误消息
# journalctl -b
有关更多信息和过滤选项,请参见 systemd/日志。
有关 Xorg 记录错误的位置和方式的信息,请参见 Xorg#故障排除。
备份
备份重要数据是必要的措施,因为随着时间的推移,人为和机器处理错误很可能产生损坏,而且存储数据的物理介质注定会发生故障。
有关可能更适合您情况的许多替代应用程序,请参见 同步和备份程序。 有关其他感兴趣的文章,请参见 Category:系统恢复。
建议自动化备份,请参见 自动启动#定时事件。
配置文件
在编辑任何配置文件之前,请创建备份,以便在出现问题时可以恢复到工作版本。诸如 vim 和 emacs 之类的编辑器可以自动执行此操作。在更大的范围内,请考虑使用配置管理器。
对于 点文件(主目录中的配置文件),请参见 dotfiles#使用 Git 直接跟踪点文件。
已安装软件包列表
维护所有已安装软件包的列表,以便在不可避免地需要完全重新安装时,可以更轻松地重新创建原始环境。
有关详细信息,请参见 pacman 技巧#已安装软件包列表。
Pacman 数据库
请参见 pacman/技巧和窍门#备份 pacman 数据库。
加密元数据
请参见 Data-at-rest 加密#磁盘加密场景的备份。
系统和用户数据
请参见 系统备份。
升级系统
建议定期通过 pacman#升级软件包 执行完整的系统升级,以享受最新的错误修复和安全更新,并避免一次处理太多需要手动干预的软件包升级。当从社区请求支持时,通常会假定系统是最新的。
确保拥有 Arch 安装介质或其他 Linux “live” CD/USB,以便在更新后出现问题时可以轻松地救援您的系统。如果您在生产环境中运行 Arch,或者出于任何原因无法承担停机时间,请首先在非关键的重复系统上测试对配置文件的更改以及对软件包的更新。然后,如果没有出现问题,将更改推广到生产系统。
如果系统具有来自 AUR 的软件包,请仔细升级所有软件包。
pacman 是一个强大的软件包管理工具,但它并不试图处理所有极端情况。用户必须保持警惕,并对维护自己的系统负责。
升级系统前阅读
在升级之前,用户应访问 Arch Linux 主页 以查看最新消息,或者订阅 RSS feed 或 arch-announce 邮件列表。当更新需要非常规的用户干预时(不仅仅是通过遵循 pacman 给出的说明即可处理),将发布适当的新闻帖子。
在将基本软件(例如 内核、xorg、systemd 或 glibc)升级到新版本之前,请查看相应的 论坛,以查看是否已报告任何问题。
用户同样必须意识到,升级软件包可能会引发意外问题,可能需要立即干预;因此,不建议在需要执行重要任务之前不久升级稳定的系统。相反,请等到有足够的时间来解决任何升级后问题时再进行升级。
避免某些 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
相同。因此,必须尽快解决错误并完成升级操作。
由于相同的原因,使用 IgnorePkg
和 IgnoreGroup
时要非常小心。如果系统具有本地构建的软件包(例如 AUR 软件包),则当其依赖项收到 soname 版本号提升时,用户将需要重建它们。
如果已创建部分升级方案,并且二进制文件由于找不到它们链接到的库而损坏,则不要简单地通过符号链接“修复”问题。当库不向后兼容时,它们会收到 soname 版本号提升。只要 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 的输出。
此时,只有在确保没有通过 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 内核和内存磁盘:vmlinuz-linux-lts
和 initramfs-linux-lts.img
。