无法通过更新管理器/apt-get upgrade 安装任何更新

use*_*654 12 package-management 12.04 software-installation

过去几周我一直在运行 Ubuntu 12.04。我最近尝试通过更新管理器下载并安装一些文件。它找到了几个文件,下载了它们,但安装失败。它给出了错误:

installArchives() failed: (Reading database ... 
(Reading database ... 80%
dpkg: unrecoverable fatal error, aborting:
 reading files list for package 'libasn1-8-heimdal': Input/output error
Run Code Online (Sandbox Code Playgroud)

我尝试使用apt-get upgrade但产生了类似的错误:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  icedtea-6-jre-cacao icedtea-6-jre-jamvm openjdk-6-jre openjdk-6-jre-headless
  openjdk-6-jre-lib
5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/34.6 MB of archives.
After this operation, 1,024 B of additional disk space will be used.
Do you want to continue [Y/n]? y
(Reading database ... 80%
dpkg: unrecoverable fatal error, aborting:
 reading files list for package 'libasn1-8-heimdal': Input/output error
E: Sub-process /usr/bin/dpkg returned an error code (2)
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。提前致谢。

编辑:这里有一些可能有用的额外信息。我最初的问题是 Ubuntu 软件中心无法打开。我发现 Update Manager 和 Synaptic Package Manager 也无法打开。他们都给出了以下错误:

"installArchives() failed: dpkg: error: reading package info file '/var/lib/dpkg/available': Input/output errorError in function:"
Run Code Online (Sandbox Code Playgroud)

经过多次谷歌搜索后,我似乎解决了这个问题,因为包管理器会再次打开。当我尝试从更新管理器下载并安装任何更新时,我在这篇文章的开头遇到了错误。

use*_*654 17

我已经用这些说明解决了这个问题。

所以解决方案如下:

  1. 进入/var/lib/dpkg目录
  2. 备份status文件
  3. 编辑status文件
  4. 搜索出错的包
  5. 只需从此包中删除行(但让所有其他与其他包相关的行,即使它们在“替换”或“依赖”字段中包含损坏的包)

    […]

  6. 保存status文件中的更改

  7. 跑: sudo dpkg --configure -a
  8. 强制重新安装缺少的依赖项(因为现在有一些):

    sudo apt-get -f install
    
    Run Code Online (Sandbox Code Playgroud)

    我认为如果损坏的包不依赖于任何其他包(可能很少见),只需重新安装它:

    sudo apt-get install the_package
    
    Run Code Online (Sandbox Code Playgroud)
  9. 现在一切都很好,可以更新、升级或安装新软件包!

应该注意的是,我对那里给出的解决方案有一些不同之处。状态文件不容易编辑(因为它是一个重要的文件,永远不会被编辑)。在那里进行的任何编辑都应该小心完成,并且在进行任何更改之前应该备份文件。

我不得不重复步骤 4-8 三次(每次错误都会与不同的包相同)。最后,当所有软件包都被删除后,我能够重新安装它们,并解决了我的问题。