“无法解析或打开包列表或状态文件”

Teo*_*uin 45 apt

每次我sudo apt-get update总是不完整,最后会说

E: Read error - read (5: Input/output error)
E: The package lists or status file could not be parsed or opened.
Run Code Online (Sandbox Code Playgroud)

同样的,当我尝试安装一些东西并做 sudo apt-get install <some app>

我该怎么办 ?我承认,我的驱动器有坏扇区,这可能是原因吗?还有什么我可以做的吗?

小智 45

这是一个老问题,但仅用于存档目的……以下是在我的情况下解决此问题的方法:

sudo rm /var/lib/apt/lists/* -vf
sudo apt-get clean
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

  • 是的,删除所有 apt-get 文件并重新开始也对我有用,这花了一些时间但有效!坦克斯 (2认同)
  • 这也对我有用,另请参阅[尝试更新时如何修复“MergeList 问题”或“无法解析状态文件”错误?](https://askubuntu.com/q/30072)有关更多详细信息和说明。 (2认同)

Avi*_*Raj 39

尝试使用较旧的状态文件,

sudo mv /var/lib/dpkg/status /var/lib/dpkg/status.bad
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,这不起作用。我删除了 `/var/lib/dpkg/status` 并使用 `touch /var/lib/dpkg/status` 创建了一个空的,并解决了问题。 (4认同)
  • 即使按照您说的步骤,问题仍然存在,可能是我的旧状态也已损坏。 (2认同)
  • 我必须执行以下操作来解决这个问题: sudo rm /var/lib/apt/lists/* -vf sudo apt-get update (2认同)

And*_*rew 8

我遇到了类似的错误:

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.
Run Code Online (Sandbox Code Playgroud)

我按照类似的建议复制status-old.

$ head /var/lib/dpkg/status
$ head /var/lib/dpkg/status-old
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

$ head /var/backups/dpkg.status.0
Run Code Online (Sandbox Code Playgroud)

……但还是一片空白。所以我解开了一个旧的...

$ gunzip /var/backups/dpkg.status.1.gz
$ head /var/backups/dpkg.status.1
Run Code Online (Sandbox Code Playgroud)

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

$ cp /var/backups/dpkg.status.1 /var/lib/dpkg/status
Run Code Online (Sandbox Code Playgroud)

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

归功于这篇文章。