“Hash sum mismatch” 错误是由于相同的SHA1和MD5但不同的SHA256引起的。

运行apt full-upgradeapt update时,我得到了几个日志,它们与这个日志几乎相同,其中有一个相同的文件大小、SHA1和MD5,但SHA256不同。
E: Failed to fetch store:/var/lib/apt/lists/partial/jp.archive.ubuntu.com_ubuntu_dists_focal_main_binary-amd64_Packages.xz  Hash Sum mismatch
   Hashes of expected file:
    - Filesize:5826751 [weak]
    - SHA256:af226b4496cbb524bd4814d102047ae77769836203274dffc91cb543d5da13cc
    - SHA1:aef5c36ce45bd5c3154a1bb03c62b6cfb33e2bc6 [weak]
    - MD5Sum:7ef83228ec207df10acac48fbdd81112 [weak]
   Hashes of received file:
    - SHA256:e2c7fc5a2d86f75f03612fec614dcf84d3d502976558fbe40928c1dd120bb05e
    - SHA1:aef5c36ce45bd5c3154a1bb03c62b6cfb33e2bc6 [weak]
    - MD5Sum:7ef83228ec207df10acac48fbdd81112 [weak]
    - Filesize:5826751 [weak]
   Last modification reported: Thu, 23 Apr 2020 16:40:26 +0000
   Release file created at: Thu, 23 Apr 2020 17:33:17 +0000

而其他人具有相同的MD5,但不同的SHA1和SHA256。
E: Failed to fetch http://jp.archive.ubuntu.com/ubuntu/pool/main/l/linux/linux-headers-5.4.0-29_5.4.0-29.33_all.deb  Hash Sum mismatch
   Hashes of expected file:
    - SHA256:edde13dcd52c51e2404d37731948d491e6e215b22f599239326809754f8d5633
    - SHA1:3e46354d6aaa92f82d5392a80f6b72c3fcc78a91 [weak]
    - MD5Sum:4ccf38c666c836f29fc3602314de47b9 [weak]
    - Filesize:10936232 [weak]
   Hashes of received file:
    - SHA256:9af606f85850ba3010ac8743f62dca91bbef3e5e60da5a7df62dac53eb5a4fb7
    - SHA1:61c842d896676ac9af0fef9f9f48bc4a3c39cce6 [weak]
    - MD5Sum:4ccf38c666c836f29fc3602314de47b9 [weak]
    - Filesize:10936232 [weak]
   Last modification reported: Thu, 30 Apr 2020 08:23:38 +0000


这个问题与这里所问的类似,我确实尝试了那里(以及其他地方)提供的几种解决方案,但它们没有起到帮助作用。然而,我特别想知道为什么SHA-1和MD5Sum是相同的,只有SHA256不同。这是否意味着在某个环节上存在安全问题?还是我的系统错误地读取了SHA256?还是其他原因?
谢谢

你应该询问软件包的维护者,他们可能出现了错误。 - ubfan1
@ubfan1 那就是了,除非我搞错了,否则这些是核心Ubuntu软件包(我正在运行20.04 lts)。此外,在另一个虚拟机中运行时,我没有遇到这些错误。 - RyanQuey
1我刚刚从http://ports.ubuntu.com/pool/main/l/linux/linux-headers-5.4.0-29_5.4.0-29.33_all.deb下载了pkg文件,并且sha256sum哈希值是正确的。请再试一次。 - ubfan1
这是个好主意,通过确认SHA256校验和的方式。但对我来说,它仍然无法正常工作。 - RyanQuey
7个回答

在运行apt之前,请尝试一下这个。
$ sudo bash
# mkdir /etc/gcrypt
# echo all >> /etc/gcrypt/hwf.deny

因为apt使用了来自libgcrypt20的sha256方法,但进行了过多的优化。我们可以通过配置文件/etc/gcrypt/hwf.deny来选择不使用这些优化。

info gcrypt section 16说:

/etc/gcrypt/hwf.deny

这个文件可以用来禁用硬件优化功能,详见硬件特性

info gcrypt section 2.7接着说:

Libgcrypt利用了某些硬件特性。如果不希望使用某个特性,可以通过程序或全局配置文件进行禁用。


1这是对我有效的方法。像接受的答案所说的那样禁用WSL并没有帮助。 - cclloyd
如果你在使用VirtualBox + Ubuntu + (Hyper-V或WSL或Windows容器平台)时遇到问题,请使用这个方法。 - Striar
2刚在Windows 10上安装的Oracle VM VirtualBox中的Ubuntu 20.04上测试了这个解决方案。在此之前,什么都不起作用,甚至尝试禁用wsl也无效。 - prm296
2对我来说起作用了!Windows 10主机(最新的Windows更新弄坏了这个东西),Ubuntu 20.04客户端。没有禁用WSL或其他任何东西 - 这个解决方案有效。 - user2622016
2纯粹出于好奇,这到底是要做什么?它确实解决了问题,但从安全角度来看,似乎是禁用了所有(?)检查,听起来并不太好。 - geisterfurz007
1@geisterfurz007,它只是禁用了芯片提供的专用硬件功能。这在https://dev.gnupg.org/source/libgcrypt/的文档中有说明。 - caduceus
很抱歉,有没有办法让它在Ubuntu服务器安装程序中运行?我尝试从安装程序帮助中切换到bash终端,并执行了这些步骤,看起来是有效的。但是当我回到安装程序时,又遇到了同样的问题。我尝试了一些其他方法,比如将chroot更改为/target,然后再尝试相同的步骤,但似乎没有效果。而且在安装程序启动时,我还看到了一些完整性失败的错误。非常感谢任何帮助。 - Pushpendra
这个解决方案对我也起作用了。在新的电脑上,使用最新版本的Windows系统。对于一台旧机器(2年前的Windows 10),关闭虚拟机平台并不是一个问题。有趣的是,在新机器上关闭VMP并没有解决这个问题。 - tomd
有趣的是,在 macOS(2019 MBP)上使用 VirtualBox 运行 Ubuntu 20.04 LTS 虚拟机时遇到了问题。CPU 可能具有一些额外的硬件加速功能,而创建者(运行 Manjaro 的非常古老的 2007 MacBook3,1)则没有这些功能。因此,当 VirtualBox 将这些功能暴露给虚拟机时,默认情况下会利用它们,从而导致了这个问题,我在其他地方还没有见过类似的情况。 - Terry Wang
这是解决方案。我试图在Windows 10上的虚拟机中安装Lubuntu impish (21.10)。我还安装了WSL2,但不想将其移除。 - matthewcherrey

如果你使用的是Windows和VirtualBox,那么请禁用Windows子系统和虚拟机平台。当我尝试使用VirtualBox 6.0.4安装lubuntu 20.04时,遇到了这个问题,因为WSL2被启用了。

1你能详细说明一下为什么这个方法可以解决哈希校验不匹配的问题吗?如果有任何外部文档可供参考,也请提供。谢谢。 - RyanQuey
4如果启用了,VirtualBox将使用所谓的“虚拟机平台”作为虚拟化提供程序。我不知道为什么会发生这种情况,但是在运行apt update时,我发现只有SHA256不匹配 - SHA1和MD5是相同的。这让我想到,在这个版本的虚拟机平台中可能存在一个错误,导致SHA256计算不正确。这只是我的猜测,因为对我来说解决了问题。 https://forums.virtualbox.org/viewtopic.php?f=6&t=92440 当它无法工作时,我得到了一个“乌龟图标”,因此我猜想这可能改变了虚拟CPU的行为方式。 - Marcin Gordziejewski
2非常感谢,这正是我所需要的。我也成功摆脱了我的绿色乌龟。在此发布链接以获取更详细和最新的说明和指导:https://forums.virtualbox.org/viewtopic.php?f=6&t=90853&sid=dd153bd7f58ac95966ee195414bdf7a5&start=270#p476261 - RyanQuey
这不是一个解决方案!我使用这个Windows版本的整个目的就是为了WSL2。它必须在同一系统上同时工作。 - Akito
目前无法确定为什么会发生这种情况 - 所以一个快速的解决办法就是按照我说的去做。可能在外面有一种解决方案可以解决它 - 但我只是不知道而已。 - Marcin Gordziejewski
@Akito,这可能不是一个好的解决方案,但这是VirtualBox官方推荐的解决方案。据我所知,似乎唯一的其他选择就是不使用VirtualBox了。 - RyanQuey
这个答案允许了Apt进行更新,但在升级过程中仍然遇到了几个哈希错误。我之前也尝试过使用hwf.deny的建议,但没有成功。我在没有重新启动的情况下禁用了WSL并启用了VMP。 - Sir_Scofferoff

解释和解决方案:快速修复

这个问题是由于Windows Hypervisor平台引起的。目前(据我所知)无法解决这个问题。

不过,有一个部分解决方案可供选择。我说"部分"是因为它涉及到禁用该平台(也称为"Hyper-V"),这可能会破坏您已安装的其他虚拟化解决方案,因为它需要手动启用。无论如何,以下是禁用它并使您的虚拟机再次运行的方法:

  1. 关闭虚拟机。

  2. 按下Windows徽标键+X,然后按A以管理员身份运行命令提示符(powershell)。

  3. 输入 bcdedit /set hypervisorlaunchtype off

4.当您看到"操作成功完成"时,重新启动Windows。重新启动后,启动您的虚拟机并进行更新/升级。


谢谢 @MRX Clay。你救了我一天!事实上,你救了我的夜晚;) 问题发生在我启用了Windows Sandbox功能后,并且在禁用它后问题仍然存在。我有两个虚拟机在两个不同的物理主机上出现故障。 当我说故障时,意思是所有的校验操作都返回错误结果。我无法使用npm、serverless或apt。现在一切都恢复正常了。 - David Beneš

从jp...存档中的文件是正确的,所以肯定是你的sha256sum副本出了问题。确认你正在运行的sha256sum可执行文件位于/usr/bin目录下,如果不是的话,请删除路径中早于/usr/bin的已识别可执行文件。如果是的话,请从主要的Ubuntu存档中下载coreutils软件包,并重新安装coreutils。

对我来说,这个答案在确定我的sha256sum不正常工作方面非常有帮助。然而,这个答案实际上才是能够解决问题的方法。虽然我在问题中没有提到关于VirtualBox和使用Windows 10主机的事情。但现在改变问题可能对这个答案不公平,所以我会给两个答案点赞并接受那个对我有用的答案。 - RyanQuey

我不明白问题的原因,但在我的特定情况下(在笔记本电脑上同时使用WiFi和以太网的Ubuntu WSL),我可以通过拔掉以太网线来解决哈希值不匹配的问题。别问我为什么,但现在一切都正常了...

HyperV在我的Windows上已经被禁用了。 但是在VirtualBox下我一直有这个问题。
在Virtualbox的配置中,选择机器 > 系统 > 处理器 > "启用PAE/NX"选项。 重新启动虚拟机,然后对我来说它就可以工作了。

我一直在尝试在VirtualBox中安装Ubuntu时遇到了问题。结果发现在VirtualBox 6.1.16中有一个修复此问题的bug。今天早上我更新到了6.1.18,并且成功地安装了一个干净的Ubuntu Server 20.04,没有任何问题。

https://www.virtualbox.org/ticket/19695