System maintenance (简体中文)
要持续使用 Arch Linux,需要进行系统日常维护,每个用户都应该及时维护系统。
检查错误
systemd 服务问题
检查是否有 systemd 服务失败:
$ systemctl --failed
更多信息请参考使用单元。
日志文件
检查 /var/log
日志文件中是否存在错误,检查 systemd 日志中的高优先级错误:
# journalctl -p 3 -b
Xorg 的相关错误可以查看 Xorg 的故障和修复。
备份
把重要数据的备份作为日常维护任务。随着时间推移,人为的或机械的处理错误会导致破坏;存储数据的介质也必然在某个时刻失效。
其它备份方案可以参考同步和备份程序页面。系统恢复分类包含其它相关文章。
建议通过计时事件自动备份。
配置文件
在编辑任何配置文件前,先保留备份。这样出问题时可以直接还原。vim 和 emacs 编辑器会自动备份。在更大的范围内,可以使用配置管理器。
对于点文件(即主文件夹内的配置文件),请参考 dotfiles#Tracking dotfiles directly with Git。
安装的软件包
维护一个所有安装软件包的列表,这样在不得已进行系统重装时,可以很快恢复到初始环境。
详情参考备份和恢复已安装软件包。
pacman 数据库
参考 pacman/Tips and tricks#Back up the pacman database.
加密元数据
参阅 Data-at-rest encryption#Backup for disk encryption scenarios.
系统和用户数据
参考 System backup。
更新系统
建议日常进行系统完整更新,这样既能享受到最新的问题修复和安全更新,还可以避免一次更新太多的软件包,手动处理是分批进行的。从社区寻求帮助时,其他人会假定系统进行了完整更新。
手头上保留 Arch 安装盘或其它 Linux “Live” 环境,这样有问题时可以进行修正。如果在生产环境使用 Arch,无法接受任何的停机,那么在更新前请在非关键系统上测试新配置文件和软件包,没有问题的时候再部署到生产环境。
如果软件包来自 AUR,请注意更新完整。
升级前的准备
建议升级前访问 Arch Linux 主页查看最新消息,或订阅 RSS 或 arch-announce 邮件列表。如果升级需要不寻常的用户操作介入时(无法简单地按照 pacman 的输出信息处理),以上信息总会给出合适的方法。
在更新内核、X.Org、systemd 和 glibc 等重要软件之前,查看论坛看是否有被报告的出错等问题。
有时候系统更新会出现问题,需要用户立即进行一些手动调整。因此,请不要在重要任务前进行系统更新;而是留出足够的时间用于应付可能的问题。
避免某些 pacman 命令
避免部分更新,不要运行 pacman -Sy
而是运行 pacman -Syu
。
一般情况下,避免使用 pacman 的 --force
选项,尤其要避免 pacman -Syu --force
这种可能更新多个软件包的指令。--force
忽略文件冲突,可能导致文件丢失!如果系统按正常维护,Arch 开发者会给出明确的指导,在 Arch 主页会有通知。
避免使用 -d
选项,pacman -Rdd package
会在删除软件包时跳过依赖关系检查。如果删除了系统必要的依赖关系,可能导致系统损坏。
不支持部分升级
Arch Linux 是滚动发行版,新库 版本将不断被推送到源。开发者和信任用户会按照需要重新构建源中的所有软件包。如果有本地安装的版本(例如 AUR 软件包),需要在它们的依赖关系升级了soname时重新编译。
也就是说,部分升级是不被支持的。不要使用:
pacman -Sy package
- 或等价命令,如
pacman -Sy
之后再pacman -S package
-
pacman -Syuw
,它和pacman -Sy
有一样的风险,因为它会更新 pacman 同步数据库而不安装新版本软件包。
在安装软件包前请更新源并升级(总是使用 pacman -Syu
)。请注意如果 pacman -Syu
因为某个错误而没有完成升级,最后导致的系统状态和运行 pacman -Sy
是一样的。错误必须被处理,升级更新要尽快完成。同理请特别注意 IgnorePkg
和 IgnoreGroup
的使用。如果系统安装了自行编译的软件包(如从 AUR 包),在其依赖出现 soname 冲突时用户必须重新编译。
如果进行了部分升级,二进制包因为找不到链接库而损坏,不要通过简单的符号链接进行修正。库升级 soname 是因为它们不再向前兼容。只要 pacman 可以运行,使用更新的源进行 pacman -Syu
就能修复这些问题。
注意更新时的提醒
当升级系统时, 请一定要注意 pacman 输出的注意信息。 如果有需要用户手动操作的,请一定要立即搞定。 如果不明白 pacman 输出的信息, 请去论坛搜索或者看 Arch Linux 首页的新闻。
处理配置文件更新
pacman 可能会创建 .pacnew
和 .pacsave
文件,这时 pacman 会通知用户,而用户需要主动处理这些文件。详细的操作说明请参考 Pacnew 和 Pacsave 文件。
同样,注意所有你可能会复制或创建的配置文件。如果软件包提供了一个空配置文件,这个文件被复制到主目录,请注意查看示例文件是否有更新。
在更新后重启程序和系统
升级通常不立即应用于运行中的程序。 您必须重新启动程序才能完全应用升级。
软件包 archlinux-contrib 提供了一个称为 checkservices 的脚本,它运行 pacdiff 来合并 .pacnew 文件,然后检查正在运行且使用过期库的进程,并提示用户是否想要重启它们。
内核很难在重启前更新。升级内核后重启系统永远是最安全的选择,如果不方便重启可以通过内核热补丁在不重启系统的情况下应用更新。
回退有问题的更新
如果软件包可能导致问题,软件包维护者会在更新时给出提示信息。在更新后遇到问题,请先确认 /var/log/pacman.log
中有没有提醒信息。
然后看看 https://archlinux.org/ 中有没有新闻,然后再到论坛上查找类似的问题,如果都没有找到,可到 论坛、IRC中发帖求助。
降级软件包是最后的解决方案。
检查孤立和未使用软件包
更新系统后,可能有些软件包不再需要,或者不再属于官方软件仓库。
用 pacman -Qtd
命令查找之前作为依赖安装,现在不再需要的软件包。如果孤立的包还是需要的,可用修改 安装原因。如果不再需要,可用将其删除。
除此之外,有些软件包可能已经不再属于远程仓库,但是依然还安装在本地,用 pacman -Qm
命令查找所有这些软件包。注意此命令会包含手动安装的软件,例如 AUR 中的软件。可以使用 ancient-packagesAUR 来排除尚存在于 AUR 中的软件包。
使用包管理器安装软件
软件包管理器 pacman 可以比你更好地记录安装的文件。如果你手动地安装软件,时间一长,就可能忘记安装了什么、到底安装在哪里、安装导致的哪些冲突、是否安装在了错误的地方等等问题。
- 使用 pacman 安装软件包中介绍的方法安装官方软件包。
- 如果找不到需要的软件包,看看 AUR 中有没有提供软件包打包脚本。
- 如果都没有找到,请学习创建软件包。
要清理自己安装的文件,可以参考查找不属于任何软件包的文件。
选择开源驱动
尽可能地选择开源驱动。避免私有驱动。大多数时候,开源驱动比私有驱动更加稳定可靠。开源驱动的问题修改起来比较容易快速,但同时私有驱动提供更多的特性和性能,不过也可能带来稳定性的代价。为了避免这个两难选择,可以选择已知的有很好的开源驱动支持的硬件。关于硬件和开源 Linux 驱动的信息可以在这里找到:linux-drivers.org。
谨慎使用非官方或测试不足的软件包
在使用 AUR 或非官方软件仓库中的软件包时应有预防措施。大部分软件包都是由用户提供的,并不能提供和官方软件仓库相同的质量。谨慎使用 AUR 助手,它们简化了 AUR 中的软件包的安装过程。在编译和安装 AUR 中的软件包之前,务必检查软件包的 PKGBUILD 确保其中不含有错误或恶意的代码。
为简化维护,请限制第三方软件包的使用。周期性地检查真正在使用的包,并移除实际上没有使用的包(或安装官方维护的版本)。pacman 维护提供了清理软件的方法。在系统升级后,可使用 rebuild-detector 来寻找可能需要重新构建的第三方包。
更新镜像列表
镜像的质量会随着时间而变化,有些镜像会下线或者同步和下载出问题,所以请注意更新 pacman 的镜像列表,详情参考镜像。
清理文件系统
检查磁盘空间的使用状况,删除占用空间较大的无用文件:
软件包缓存
从 /var/cache/pacman/pkg/
删除不需要的 .pkg
可以减少空间占用。详情参考清理软件包缓存。
不需要的软件包
从系统里面删除不需要的软件包可以减少空间占用和维护难度。详情参考删除孤立软件包。
旧配置文件
旧的配置文件可能和新软件版本不兼容,所以请定期清理和更新配置文件,尤其是主目录和 ~/.config
。在重新安装或共享 /home
时,注意下面文件夹:
-
~/.config/
-- 软件保存配置文件的地方 -
~/.cache/
-- 程序缓存大小可能持续增加 -
~/.local/share/
-- 可能有旧文件
参考 XDG Base Directory support。
为了帮助清理 home 目录,建议维护一份不需要的文件列表并定期清理,例如使用 rmshit.py。
rmlint 也可以用来查找不需要的重复文件、空文件和损坏的软链接。
破损的软链接
系统中可能存在老的,损坏的软链接,应该删除它们。方法可以参考 这里 和 这里。但是不应该盲目删除所有损坏的软链接,因为其中一些是有用处的[1]。
下面命令可以列出所有有问题的软链接,可以检查并删除列表中的文件。
# find / -xtype l -print
技巧
使用经过验证的软件包
Arch 的滚动发行让用户可以使用最新的功能和上游更新,但是这也增加了系统维护的难度。为了增加稳定性,可以尽量使用经过验证的稳定版本。这些软件包不太容易在升级时遇到问题。选用具有活跃开发社区的软件,选用用户能力更出众的软件,这样在出问题时更容易获得帮助。
避免使用测试仓库,这些软件包都是实验性质,不适合安装到稳定系统。因此对于 AUR 中的包以及部分 community 中的包需要谨慎,这些开发中的包是直接从上游开发版分支中获取到的,通常会在包的名字上注有:dev、devel、svn、cvs、git、hg、或是 darcs 的信息。
安装内核的长期支持版本
linux-lts 是 Arch 官方提供的 Linux kernel 的长期支持版本。内核上游开发者针对此版本提供了长期支持,包括安全补丁和功能 backport。适用于需要长期支持的用户,也可以将此内核作为新内核升级的后备内核。
需要编辑 bootloader 的启动加载项,启动到 vmlinuz-linux-lts
和 initramfs-linux-lts.img
。