无法通过update manager / apt-get upgrade安装任何更新

过去几周我一直在运行Ubuntu 12.04。 我最近尝试通过Update Manager下载并安装一些文件。 它找到了几个文件,下载了它们,但后来无法安装它们。 它给出了错误:

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

我尝试使用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) 

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

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

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

经过大量的谷歌搜索后,我似乎解决了这个问题,因为包经理会再次打开。 当我尝试从Update Manager下载并安装任何更新时,我在本文开头就收到了错误消息。

我用这些说明修复了问题。

所以解决方案如下:

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

    […]

  6. 保存status文件中的更改

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

     sudo apt-get -f install 

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

     sudo apt-get install the_package 
  9. 现在一切都很好,可以更新,升级或安装新包!

应该指出的是,我对那里给出的解决方案有一些区别。 状态文件不容易编辑(因为它是一个重要的文件,从不打算编辑)。 在那里进行的任何编辑都应该小心,并且在进行任何更改之前应该备份文件。

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

可能发生磁盘已被inode损坏。

使用Live CD,运行此命令

 sudo fdisk -l 

注意磁盘和分区,它可能是/dev/dsb1然后修复它:

 sudo fsck -y /dev/sdb1 

重新启动,并返回系统

 sudo apt-get -f install sudo apt-get update sudo apt-get upgrade