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

我过去几周一直在使用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

我尝试使用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软件中心无法打开。我发现更新管理器和Synaptic软件包管理器也无法打开。它们都给出了类似的错误提示:
"installArchives() failed: dpkg: error: reading package info file '/var/lib/dpkg/available': Input/output errorError in function:"

经过大量的搜索,我似乎解决了那个问题,因为软件包管理器再次打开了。然后,当我尝试从更新管理器下载和安装任何更新时,我遇到了这篇文章开头提到的错误。

你下载了哪些文件?从哪里下载的?更新管理器与此有什么关系? - mikewhatever
你可以尝试卸载(然后重新安装)消息中的软件包。如果这样还不行,你可以尝试清除缓存。 - John S Gruber
我还在努力修复这个问题,只是还没有机会。等我有机会的时候,我会尝试这里给出的指示:http://goo.gl/oOKqG。 - user64654
为什么你选择安装12.04而不是14.04呢?毕竟,你说你几周前才得到它,而Trusty已经发布了九个月了。 - John Scott
2个回答

我已经修复了问题,按照这些说明操作。
所以解决方案如下:
1. 进入 `/var/lib/dpkg` 目录。 2. 备份 `status` 文件。 3. 编辑 `status` 文件。 4. 搜索导致错误的软件包。 5. 只删除该软件包的相关行(但保留其他软件包的所有行,即使它们的 "Replaces" 或 "Depends" 字段中包含有问题的软件包)。 6. 保存对 `status` 文件的更改。 7. 运行命令:`sudo dpkg --configure -a`。 8. 强制重新安装缺失的依赖项(因为现在有一些): ``` sudo apt-get -f install ``` 如果有问题的软件包不依赖于任何其他软件包(可能很少见),只需重新安装它: ``` sudo apt-get install the_package ``` 9. 现在可以正常更新、升级或安装新的软件包了!

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

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


你是如何找到导致错误的软件包的? - Seanny123
@Seanny123 先前尝试使用apt-get install可能会显示错误。例如,在我的情况下,我在提示符返回之前遇到了"reading files list for package 'manpages-dev': Input/output error"的错误。在状态文件中,我搜索了"Package: manpages-dev"并删除了直到下一个"Package:"行的内容。之后,我需要手动执行"apt-get install manpages-dev",然后之前失败的"apt-get dist-upgrade"就能顺利完成了,没有出现错误。(感谢user64654!) - Peter Hansen

可能会发生磁盘的inode损坏的情况。
使用一张启动光盘,运行以下命令。
sudo fdisk -l

请注意磁盘和分区,可能是/dev/dsb1,然后进行修复。
sudo fsck -y /dev/sdb1

重启系统,然后重新登录。
sudo apt-get -f install
sudo apt-get update
sudo apt-get upgrade

我通过sudo shutdown -rF now命令进行了fsck检查,一切都恢复正常了,没有出现任何问题。 - Klaws