用心打造
VPS知识分享网站

APT更新出现Hash Sum mismatch,索引校验解决方法

本文于 2026-09-11 08:27 更新,部分内容具有时效性,如有失效,请留言

执行 apt update 时出现 Hash Sum mismatch,说明下载到的索引文件与仓库元数据记录的摘要不一致。它常见于镜像同步窗口、本地旧索引、透明缓存或代理返回了不同版本的文件,并不等同于缺少仓库签名密钥。

正确处理顺序是先记录失败的软件源与文件,再重建可再生的APT索引。 不要一看到校验错误就关闭安全验证,也不要删除dpkg状态数据库。

APT软件包索引文件与仓库摘要校验不一致的故障示意图

先读清楚是哪一个文件校验失败

重新执行更新并保留完整输出:

sudo apt-get update

重点记录错误中的仓库域名、发行版代号、组件、文件路径,以及期望值和实际值。若只有一个第三方仓库失败,问题范围通常就在该仓库;若多个无关仓库同时失败,更应检查本机代理、出口缓存、DNS或磁盘。

再列出实际启用的软件源。Debian和Ubuntu新版本可能同时使用传统的 .list 文件与deb822格式的 .sources 文件:

grep -RhsE '^[[:space:]]*(deb |Types:|URIs:|Suites:)' \
  /etc/apt/sources.list /etc/apt/sources.list.d 2>/dev/null

必须先确认失败的是官方源还是第三方源,不能用更换全部镜像的方式掩盖单个仓库配置错误。

区分哈希不一致与签名错误

APT会先取得仓库发布元数据,再根据其中记录的摘要校验索引文件。Hash Sum mismatch表示文件内容与预期摘要不一致;NO_PUBKEYEXPKEYSIGThe repository is not signed 则属于签名信任链问题,处理方法不同。

先检查系统时间和索引目录所在文件系统是否正常:

date -Is
timedatectl status
df -h /var/lib/apt/lists
df -i /var/lib/apt/lists

时间错误更常导致发布文件尚未生效或签名有效期异常,不应机械地归因于哈希错误。磁盘空间或inode耗尽则可能让索引下载、解压和替换无法完整完成。

不要通过 0、1 或关闭证书校验来绕过问题。 哈希校验失败时继续安装,会失去APT本来提供的完整性保护。

安全重建本地APT索引

软件包索引位于 /var/lib/apt/lists,它们可以通过更新重新下载。先确认没有其他APT或dpkg进程正在工作,再删除索引内容并重建partial目录:

ps -ef | grep -E '[a]pt|[d]pkg'
sudo find /var/lib/apt/lists -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +
sudo mkdir -p /var/lib/apt/lists/partial
sudo apt-get update

这一操作不会卸载已经安装的软件包,也不会删除dpkg已安装状态。apt-get clean清理的是已下载的软件包归档,它不能替代对损坏索引目录的重建。

绝对不要删除 /var/lib/dpkg/status、整个 /var/lib/dpkg 或仓库签名密钥来尝试修复哈希不一致。这些内容不是可随意重建的下载缓存,误删可能使包管理状态严重损坏。

检查镜像、代理和CDN缓存

若重建后仍是同一个镜像、同一个文件失败,等待几分钟后再试一次,可以避开仓库元数据与索引文件尚未同步完成的短窗口。持续失败时,按发行版官方说明切换到同发行版、同组件的可信镜像,不要混用不同版本代号。

检查APT是否配置了显式代理:

apt-config dump | grep -iE 'Acquire::(http|https)::Proxy|By-Hash'
env | grep -iE '^(http|https|no)_proxy='

企业代理、运营商透明缓存或自建缓存节点可能保存了旧索引。可在经过授权的情况下暂时绕过缓存链做对照测试;生产网络不要直接删除共享代理配置。如果直连正常、经代理失败,修复点在代理缓存一致性,而不是APT校验器。

正确认识By-Hash与第三方仓库

APT支持按内容哈希获取索引,仓库也发布对应路径时,可减少镜像更新过程中同名文件变化带来的竞态。当前配置可通过 apt-config dump 查看,但是否真正使用还取决于仓库发布的元数据与服务端支持。

不要为了消除报错就全局关闭By-Hash,也不要把来源不明的仓库强行标记为可信。第三方仓库若长期返回不一致文件,应暂停该源并联系维护者,等其恢复一致发布后再启用。

需要在干净系统中复现相同软件源时,可用 萤光云 建立临时测试机;要从不同地区对比镜像或CDN返回,也可在 LightNode 部署按小时环境。测试机必须使用相同发行版代号,并避免复制生产凭据。

更新恢复后的验收标准

再次运行更新,并确认命令以成功状态退出:

sudo apt-get update
printf 'exit=%s\n' "$?"

验收时不仅要看最后一行,还要确认所有启用仓库都取得了正确的Release与索引文件,没有 Hash Sum mismatch、签名错误或被静默跳过的失败源。随后可用模拟升级检查依赖,不立即安装软件包:

apt-get -s upgrade

合格结果应同时满足更新退出码为0、目标仓库无校验错误、索引日期合理,并且模拟升级能够正常解析依赖。 若错误在换网络后消失,还应继续修复原代理或镜像链路,而不是长期依赖偶然成功。

FAQ

删除 0 会删除已安装软件吗?

不会。这里主要保存可重新下载的软件包索引;已安装状态由dpkg数据库维护。但应只清理目录内容,不要误删 /var/lib/dpkg

可以反复执行 0 吗?

可以清理软件包归档,但它不一定解决索引哈希错误。针对本问题,需要重建 /var/lib/apt/lists 中的索引。

更换镜像一定能解决吗?

不一定。若根因是本机代理、透明缓存、DNS或磁盘异常,换镜像仍可能失败。应以失败文件和网络对照结果定位。

温馨提示

软件源校验是供应链安全边界。宁可暂停有问题的仓库,也不要用不安全参数强行继续安装;先保留错误证据,再做可逆的索引清理和镜像切换。

赞(0)
未经允许不得转载;国外VPS测评网 » APT更新出现Hash Sum mismatch,索引校验解决方法
分享到