尝试进行更新时,如何解决“ MergeList问题”或“无法解析状态文件”错误?


355

计算机在一个窗口中给了我这个输出:

E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_natty_main_binary-i386_Packages
E: The package lists or status file could not be parsed or opened.

我怎样才能解决这个问题?


7
它一直困扰着我,即使到现在,这个操作系统如何笨拙地处理其更新,也是如此,因为用户没有特别的误用之后,就需要进行此操作和类似操作。
马特2016年

Answers:


485

这些终端命令应该可以解决您的问题:

首先,通过打开终端(按Ctrl+ Alt+ T启动)来删除“合并列表”,然后运行以下命令*:

sudo rm -vf /var/lib/apt/lists/*

接下来,通过运行一个简单的更新生成一个新的:

sudo apt-get update

这是针对此问题的错误报告(以及其他报告),现已修复,因此它不应创建新的格式错误的文件,但是,如果您已经有格式错误的文件,则需要按照本文中的说明将其删除。


*用于rm的选项非常-v详细

-v,--verbose解释正在做什么

-f

-f,--force忽略不存在的文件和参数,从不提示

如果您不确定命令行或所使用的选项,请始终参考命令的手册页。可以通过搜索man和命令(例如man rm)在互联网上访问这些信息,也可以通过在 终端中键入完全相同的命令来访问相同的信息,例如man rm退出页面的说明将在终端的底部,例如这个

手册页选项的图片


8
一个人发现他必须多次执行这两个步骤,但最终还是有效。
约翰·格鲁伯

5
-vfrm命令末尾加上奇怪。
基思·汤普森

6
它没有为我解决问题。更新仍然向我显示该错误。
海军陆战队

1
这是一个反复出现的问题。它不时发生一次。有人知道这个问题的原因吗?
Rushil Paul

1
我已编辑理解能力的答案@jasser
艾伦(Allan)

82

打开一个终端并一次运行以下命令:

sudo rm /var/lib/apt/lists/* -vf
sudo apt-get update

也可以看看:


1
-vf有什么作用?
speedox

5
根据man rm,@ speedox -v表示“详细”,-f表示“力”。换句话说,在不提示的情况下删除所有指定的文件,并告诉用户它在做什么。
Fouric 2013年

就我而言,只需sudo apt-get update解决问题即可。我认为Allan提到过apt的较新版本会自动更正此问题,因此也许首先尝试更新。
ThorSummoner

23

编辑时您搞砸了/var/lib/dpkg/status。从编辑之前进行的备份中还原它。当然,您做了备份,对吧?

由于您没有进行备份,因此请再次进行仔细编辑。尽量不要造成更多损坏。

您可以/var/lib/dpkg/status.old用作参考点。这是status上次dpkg运行之前文件的备份。跑

diff /var/lib/dpkg/status.old /var/lib/dpkg/status

看到差异。撤消您手动进行的更改,并保留上次dpkg运行时所做的更改。

如果你真的不能设法修复文件,复制/var/lib/dpkg/status.old/var/lib/dpkg/status。您将获得格式正确但已过期的软件包数据库。

您无需/var/lib/dpkg/status在正常操作中进行编辑。即使出现严重错误,/var/lib/dpkg/status也不是往往需要管理员干预的事情。无论您遇到什么问题,crossplatformui都可能有解决这些问题的更好方法。我唯一需要编辑的/var/lib/dpkg/status是上游Packages文件损坏时。


我还想知道您提到的删除crossplatformui的更好方法,如果您可以帮助我尝试各种可能的方法来删除它,并尝试找到许多解决方案,但只有我提到的一种有效……
Nirmik

1
@Nirmik不知道crossplatformui。作为一个单独的问题提出。我可以告诉您,在使用了十多年的时间(dpkg包括许多非官方资源)中,status仅在存在损坏的第三方存储库的情况下,我很少需要编辑文件。
吉尔斯

好吧...再次非常感谢....正如您建议我将其发布为新问题:)也是您似乎非常高级的用户,我想问您是否对使HOT无法正常运行有所了解-KTEYS工作??(我的无线密钥确实起作用)
Nirmik 2012年

试图用旧的代替新的,没有为我解决。:-(
斯特凡纳·古里科

1
回复:{对于我来说,您在编辑/ var / lib / dpkg / status时搞砸了-不,不是,我没有触摸过这个文件:)但是,这只是解决了我的问题的解决方案案件。谢谢。
ruslo


16

按照“ 程序包管理器故障排除过程”中的步骤2-5,通常可以解决此问题。

对于步骤2,禁用所有 PPA。您可以取消选中“软件源”中的所有选项,就像取消选中其中一项一样。请参阅如何禁用特定的PPA?。您可以稍后重新启用它们。

对于步骤3,请关闭所有打开的程序。保持网络浏览器打开可能很安全,这样您的说明就可以摆在面前。但是,确保任何程序包管理器未运行特别重要。这包括软件中心,软件更新程序(在旧版Ubuntu中为更新管理器),Synaptic和Gdebi。它还包括命令行包管理实用程序等apt-getdpkgaptitude

请注意,如果其他用户同时登录,则应尽可能注销。

对于步骤4,打开一个终端窗口。无论您使用哪种桌面环境,该方法都有效,一种方法是按Ctrl+ Alt+ T

对于步骤5,在终端窗口中运行以下命令:

ubuntu-support-status
sudo grep -R proxy /etc/apt/*
grep proxy  /etc/environment
echo $http_proxy
echo $ftp_proxy
grep proxy /etc/bash.bashrc
grep proxy ~/.bashrc
cat /etc/apt/apt.conf
sudo fuser -vvv /var/lib/dpkg/lock
sudo fuser -vvv /var/cache/apt/archives/lock
cat /etc/lsb-release
uname -a
sudo rm /var/lib/apt/lists/lock 
sudo rm  /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
sudo cp -arf /var/lib/dpkg /var/lib/dpkg.backup
sudo mv /var/lib/dpkg/status /var/lib/dpkg/status-bad
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status  ||  sudo cp /var/backups/apt.extended_states.0 /var/lib/dpkg/status
sudo mv /var/lib/dpkg/available /var/lib/dpkg/available-bad
sudo cp /var/lib/dpkg/available-old /var/lib/dpkg/available
sudo rm -rf /var/lib/dpkg/updates/*
sudo rm -rf /var/lib/apt/lists
sudo rm /var/cache/apt/*.bin
sudo mkdir /var/lib/apt/lists
sudo mkdir /var/lib/apt/lists/partial
LANG=C;sudo apt-get clean
LANG=C;sudo apt-get autoclean
LANG=C;sudo apt-get --purge autoremove
LANG=C;sudo apt-get --fix-missing update -o APT::Cache-Limit=100000000
sudo dpkg --configure -a
sudo dpkg --clear-avail
LANG=C;sudo apt-get -f install
LANG=C;sudo apt-get --fix-missing install
LANG=C;sudo apt-get update -o APT::Cache-Limit=100000000 && sudo apt-get dist-upgrade
find /etc/apt -name '*.list' -exec bash -c 'echo -e "\n$1\n"; cat -n "$1"' _ '{}' \;

我于2014年3月2日从PackageManagementTroubleshoootingProcedure复制了该逐字记录。这些命令在过去得到了发展,将来该文章中推荐的命令可能会更改或扩展。因此,您可能要从第5步开始工作。(这篇文章中,创建/编辑的“贡献者Ubuntu文档维基” -尤其是马克Rijckenberg --is 许可CC-BY-SA 3.0。,在这里允许包含与适当的归属)

其中一些命令试图解决该问题(并且可能还会显示诊断信息)。其他人则显示有关您的问题的有价值的信息,您可以将其包括在问题中,也可以提供给帮助您的人。(或者,根据您的技能,可能使能够诊断和解决它。)

通常,它可以修复它,但如果不能修复,通常会提供足够的信息来修复它。

您不必手动键入这些命令;您可以复制并粘贴它们。不过,我建议分别粘贴并运行每个。这样可以更清楚地了解来自哪些命令的输出。


我复制了整个代码块并粘贴,而不是一个接一个地运行。尽管此命令中的一些命令是无用的,并且有些命令失败了,但最终它对我的情况确实有所帮助
phuclv

11

当您的存储库中的源太多时,我也看到过发生此问题。

试试上面发布的解决方案,和/或有时在启动板上推荐的解决方案:

sudo mv /var/lib/apt/lists /var/lib/apt/lists-old
sudo mkdir -p /var/lib/apt/lists/partial
sudo apt-get update

让我们知道您的身体情况如何。


谢谢!没有makedir的DSL也无法使用。
道格2014年

4

我遇到了类似的错误:

Reading package lists... Error!
E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/dpkg/status
E: The package lists or status file could not be parsed or opened.

我遵循类似的建议进行复制status-old

$ head /var/lib/dpkg/status
$ head /var/lib/dpkg/status-old

由于某种原因,我所有的状态文件都为空白。幸运的是,我发现这些文件有备份:

$ ls -l /var/backups/dpkg.status.*
-rw-r--r-- 1 root root 444620 Nov 15 06:33 /var/backups/dpkg.status.0
-rw-r--r-- 1 root root 444620 Nov 15 06:33 /var/backups/dpkg.status.1.gz
-rw-r--r-- 1 root root 128168 Sep 20  2013 /var/backups/dpkg.status.2.gz
-rw-r--r-- 1 root root 112545 Sep 16  2013 /var/backups/dpkg.status.3.gz
-rw-r--r-- 1 root root 107767 Sep 14  2013 /var/backups/dpkg.status.4.gz
-rw-r--r-- 1 root root 107766 Sep 11  2013 /var/backups/dpkg.status.5.gz
-rw-r--r-- 1 root root  94583 Sep 11  2013 /var/backups/dpkg.status.6.gz

我检查了最新的备份...

$ head /var/backups/dpkg.status.0

...但是还是空白。所以我解压缩了一个旧的...

$ gunzip /var/backups/dpkg.status.1.gz
$ head /var/backups/dpkg.status.1

这次有内容。所以我复制了...

$ cp /var/backups/dpkg.status.1 /var/lib/dpkg/status

然后apt-get update就没问题了。

功劳归于此职位。


3

我遇到了同样的问题,并尝试了其他答案中提到的所有故障排除方法。奇怪的是,唯一的解决方法是不同的步骤:

  • 转到软件和更新-> Ubuntu软件->从以下位置下载->其他->选择最佳服务器

  • 等待测试。测试结束时,将选择最佳服务器,而不必选择最近的服务器,主服务器或您所在地区的服务器。

  • 现在重新加载回购数据,它将正常完成。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.