系统维护
为了持续使用 Arch Linux,需要进行系统日常维护,每个用户都应该及时维护系统。
检查是否有 systemd 服务失败:
$ systemctl --failed
更多信息请参考使用单元。
检查 /var/log/ 目录下的日志文件中的错误信息,同时检查 systemd Journal 中记录的信息:
# journalctl -b
有关过滤选项等详细内容请参阅 systemd/Journal。
有关 Xorg 记录错误的位置与方式请参阅 Xorg#故障和修复。
应把重要数据的备份作为日常维护任务,因为随着时间推移,数据很可能会由于人为和机器处理错误损坏,且存储数据的物理介质也注定会发生故障。
请参见同步和备份程序寻找最符合实际需要的用于备份的应用程序。其它相关文章请参阅分类:系统恢复。
强烈建议自动化备份并测试恢复流程,以确保一切按预期运行。关于自动化操作,请参阅系统备份#自动化。
在编辑任何配置文件前,都先进行备份,这样若出现问题便可以直接还原。可以配置 Vim、Emacs 等编辑器自动进行此操作。在更复杂的应用场景中,可考虑使用配置管理器。
对于 dotfiles(即主文件夹内的配置文件),可参阅 dotfiles#使用 Git 跟踪点文件。
维护一个所有安装软件包的列表,这样在不得已进行系统重装时,可以很快恢复到初始环境。
参见 pacman/提示和技巧#备份 pacman 数据库。
参见系统备份。
建议定期通过 pacman#升级软件包进行完整系统升级,这样既能享受到最新的问题修复和安全更新,还可以避免一次性处理过多需要手动干预的软件包升级。从社区寻求帮助时,其他人通常会假定系统处于最新状态。
手头上保留 Arch 安装盘或其它 Linux“Live”环境介质,以便在更新后出现问题时能轻松恢复系统。如果在生产环境使用 Arch,或因其它原因不能接受停机,那么在更新前请在非关键系统上测试新的配置文件和软件包,确认没有问题后再部署到生产环境。
如果系统中装有来自 AUR 的软件包,请注意小心地升级每个软件包。
pacman 是一款强大的包管理工具,但并不试图处理所有极端情况。用户必须保持警惕,并承担维护自身系统的责任。
升级前建议访问 Arch Linux 主页查看最新消息(中文翻译见 Arch Linux 中文社区主页),或订阅 RSS(中文翻译)、arch-announce 邮件列表 或 Telegram Arch Linux 中文新闻频道。如果升级需要不寻常的(即无法简单地按照 pacman 的输出信息处理的)用户操作介入时,以上信息源总会给出合适的方法。
在更新内核、Xorg、systemd、glibc包 等核心软件之前,查看论坛(中文论坛)了解是否已有任何问题报告。
必须同样意识到的是,升级软件包可能引发意想不到的问题,需要用户立即进行一些手动调整。因此,请不要在重要任务前进行系统更新,而要留出足够的时间用于应付可能的问题。
避免部分升级⸺总是使用 pacman -Syu 而不要使用 pacman -Sy。
一般情况下,避免使用 pacman 的 --overwrite 选项。--overwrite 选项接受一个可包含通配符的模式作为参数。使用时,pacman 将跳过匹配模式的文件的冲突检查,直接覆盖文件。在一个维护得当的系统中,该选项应仅在 Arch 开发者明确推荐(参见 #在升级前阅读新闻)时使用。
避免使用 pacman 的 -d 选项。pacman -Rdd 软件包 在移除软件包时不会进行依赖关系检查,因此可能仅移除某个提供关键依赖的软件包,从而导致系统损坏。
Arch Linux 是滚动更新的发行版:当新版本的库被推送到软件仓库时,开发者和软件包维护者会重新构建仓库中所有需要针对新库重新构建的软件包。如果两个软件包依赖于同一个库,仅升级其中一个软件包时,若需要同时升级该库(作为依赖项),就会破坏另一个依赖于该库旧版本的软件包。
这就是为什么 Arch 不支持部分升级。切勿使用:
pacman -Sy 软件包- 先执行
pacman -Sy或pacman -Syuw再执行pacman -S 软件包(此处应使用-Su安装软件包。)
pacman -Syuw 命令确实存在与 pacman -Sy 相同的风险,因其也会更新 pacman 的同步数据库但并不进行完整系统升级。当更新或安装软件包时,总是使用 pacman -Syu 进行完整升级。
pacman -Syu 因错误而未能完成完整升级,必须尽快解决该错误并完成升级操作。出于同样的原因,使用 IgnorePkg 和 IgnoreGroup 时要非常小心。如果系统有本地构建的软件包(例如 AUR 包),当其依赖项发生 soname 升级时,需要重新构建。
如果不慎造成了部分升级,导致二进制文件找不到链接库,不要简单地通过创建符号链接来“修复”问题。当库不再向后兼容时,会进行 soname 升级。只要 pacman 本身没有损坏,对一个同步正常的镜像执行简单的 pacman -Syu 即可解决问题。
pacman-contrib包 提供的 bash 脚本 checkupdates 提供了一种安全方法检查已安装软件包的可用更新但不进行完整系统升级,并且提供了一个选项 -d 可以将待处理的更新下载到 pacman 缓存中而不同步数据库,从而避免在这些操作后尝试使用 pacman -S 软件包 安装软件包导致的部分升级问题。
升级系统时,请一定要注意 pacman 输出的注意信息。如果有需要手动操作的,请一定要立即搞定。如果不明白 pacman 输出的信息,请去论坛搜索或检查 Arch Linux 首页的新闻(参见 #升级前阅读新闻)。
pacman 运行时可能会创建 .pacnew 和 .pacsave 文件并发出通知。这些文件必须及时处理,详细的操作说明请参阅 pacman/pacnew 与 pacsave。
此外,请留意之前复制来的或创建的其他配置文件。例如,若曾将软件包的示例配置文件复制到主目录,请检查示例文件是否更新。
升级通常不立即应用于运行中的程序,只有重新启动程序才能完全应用升级。
可使用 archlinux-contrib包 提供的 checkservices 脚本,其运行 pacdiff 合并 .pacnew 文件,然后检查正在运行且使用过期库的进程,并提示用户是否想要重启这些进程。
内核尤其难以应用升级,一般需要重启系统。升级内核后重启系统永远是最安全的选择,但如果非常不便,也可使用内核热补丁在不重启系统的情况下应用更新。
如果已知升级某个软件包可能会引发问题,软件包维护者会确保在 pacman 升级该包时给出提示信息。如果在升级后遇到问题,可以查看 /var/log/pacman.log 再次确认 pacman 的输出内容。
只有在确保无法从 pacman 日志中找到任何相关信息、已 #在升级前阅读新闻且没有关于该更新的论坛帖子之后,才应考虑在论坛(中文论坛)或 IRC 上寻求帮助。降级软件包回退有问题的更新是最后的解决方案。
系统升级后,有些软件包可能不再需要,或者已从远程仓库中移除。
用 pacman -Qtd 命令查找之前作为依赖安装,现在不再需要的软件包(即孤立软件包)。如果还需要孤立包,可以将安装原因改为“显式安装”;如果不再需要,可以直接将其删除。详见 pacman/提示和技巧#删除未使用的软件包(孤立软件包)。
除此之外,有些软件包可能已从远程仓库中移除,但是还安装在本地(即弃用的软件包)。pacman -Qm 命令可以列出所有弃用的软件包。注意输出的列表会包含手动安装的软件(包括来自 AUR 的包)。若要排除那些在 AUR 上可用的软件包(曾通过 AUR 安装,或从远程仓库移至 AUR),可使用 BBS#288205 中提供的脚本,或尝试使用 ancient-packagesAUR 工具。
pacman 在跟踪安装的文件方面远比人工操作更可靠。如果手动安装软件,迟早会忘记做过的操作、忘记安装位置、安装冲突的软件、安装到错误的位置等等。
- 使用 pacman#安装软件包中介绍的方法安装官方软件包。
- 如果官方源中没有所需程序,请检查 AUR 中是否有人已为其创建了软件包。如果有,按照 AUR 文章中的方法进行安装。
- 如果在 AUR 中也没有找到,可以考虑为其创建软件包。
要清理自己安装的文件,可以参考查找不属于任何软件包的文件。
尽可能选择开源驱动,避免私有驱动。大多数时候,开源驱动比私有驱动更加稳定可靠且开源驱动的问题修改起来更加容易快速。私有驱动尽管提供更多的特性和性能,但往往以牺牲稳定性为代价。为了避免这个两难选择,可以选择已知有功能完整、成熟的开源驱动支持的硬件。关于硬件和开源 Linux 驱动的信息可以在 linux-drivers.org 找到。
在使用 AUR 或非官方用户仓库中的软件包时,请务必保持谨慎。这些包大多由普通用户提供,可能无法达到与官方仓库相同的质量。在编译或安装软件包之前,务必检查软件包的 PKGBUILD 确保其中不含有错误或恶意的代码。
为简化维护,应限制第三方软件包的使用。定期检查实际使用的包,移除不再需要的包(或使用官方仓库中存在的包替代)。pacman/提示和技巧#维护提供了相关实用命令。系统升级后,可使用 rebuild-detector包 识别可能需要重新构建的非官方软件包。
镜像的质量可能会随时间变化,有些镜像会下线或者出现同步或下载问题,所以请注意更新 pacman 的镜像列表。
详见镜像源。
有助于完成此任务的程序可在应用程序列表/工具#磁盘清理中找到。
在查找要删除的文件时,关键在于找到那些占用最多磁盘空间的文件。有助于完成此任务的程序可在应用程序列表/工具#磁盘使用情况显示中找到。
删除 /var/cache/pacman/pkg/ 中不需要的 .pkg 文件可以减少空间占用。
详见 pacman#清理软件包缓存。
删除系统中不需要的软件包可以减少空间占用并降低维护难度。
参见 #检查孤立与弃用的软件包。
新版本的软件可能不兼容旧配置文件。请定期清理不需要的配置文件,尤其是在主目录和 ~/.config 目录。出于类似原因,在不同系统安装之间共享主目录时需格外谨慎。
检查以下目录:
-
~/.config/⸺应用程序存储其配置的位置 -
~/.cache/⸺某些程序的缓存可能会占用大量空间 -
~/.local/share/⸺旧文件可能残留于此
有关这些目录的更多信息请参阅 XDG 基本目录。
为使主目录免受错误创建于其中的临时文件影响,建议管理一个不需要的文件列表并定期清理它们,例如使用 rmshit.py 脚本。
系统中可能残留有需要删除的已损坏的旧符号链接。方法可以参考这里和这里。但是注意一些损坏的符号链接仍有用处,故不应盲目删除所有的符号链接 [1]。
要快速列出系统中全部损坏符号链接(排除运行时与虚拟目录),请使用:
# find / -type d \( -path "/dev" -o -path "/proc" -o -path "/run" -o -path "/sys" \) -prune -o -xtype l -print
然后检查并删除列表中不必要的文件。
以下技巧通常并非必需,但对某些用户可能有用。
Arch 的滚动更新让用户可以使用最新的功能和上游更新,但是这也增加了系统维护的难度。为简化维护并提升稳定性,可以尽量避免使用尖端软件,使用稳定的、经测试的软件包。此类软件包不太可能出现复杂的升级,例如重大的配置变更或功能移除。选择拥有强大活跃开发社区以及大量资深用户的软件,在出现问题时能够更轻松地获得支持。
避免使用 testing 仓库(即使仅仅单个软件包),这些软件包都属实验性质,不适合安装到稳定系统。同样地,也应避免那些直接从上流开发源代码构建的软件包。这些包通常由 AUR 提供,包名上通常带有 dev、devel、svn、cvs、git 等字样。
可使用 core 仓库中的 linux-lts包 替代默认内核。内核上游开发者为此版本提供长期支持(LTS),包括安全更新和错误修复。适用于由于使用了树外内核模块(如某些专有驱动)并希望确保其兼容性或其它原因需要长期支持的用户,也可以将此内核作为备用内核,以免升级到新内核后出现问题。
要将其添加到启动选项,需要编辑引导加载程序的配置文件,使用 LTS 内核及其内存磁盘映像:vmlinuz-linux-lts 和 initramfs-linux-lts.img。