如何重新创建已删除的“/var/lib/dpkg”目录?

如何重新创建已删除的“/var/lib/dpkg”目录?

昨天我/var/lib/dpkg/lock在更新过程中遇到了一些问题。我知道在这种情况下删除锁定文件可以解决问题。所以我试着这么做,但我错误地删除了所有 DPKG 目录。所以现在我无法进行任何更新、安装、升级等操作。

我尝试通过软件中心、终端、Qapt、Synaptic。这些都不起作用,因为它们都是通过 执行此类操作的dpkg。而且由于我的 dpkg 已损坏,所以我遇到了问题。

我怎样才能完全恢复 DPKG?我已经下载了dpkg_1.16.1.2ubuntu7_amd64.deb(我使用 64 位 Ubuntu 12.04)文件,但如何在终端中使用它?只需双击.deb打开软件中心,您就会知道,它不起作用。

PS 终端出现这样的错误:

dpkg: error: cannot read info directory: No such file or directory
E: Sub-process /usr/bin/dpkg returned an error code (2)

答案1

好的,我还没有尝试过,但我认为它应该有效。

首先从实时 CD 启动。

接下来打开终端并输入

sudo fdisk -l

从这里,您需要确定 Ubuntu 安装所在的分区。如果您只有一个硬盘/dev/sdaX,则X分区号为。

接下来挂载 Ubuntu 安装的分区并替换X正确的分区号。

sudo mount /dev/sdaX /mnt

接下来导航到目录dpkg_1.16.1.2ubuntu7_amd64.deb并使用此命令:

sudo dpkg --root=/mnt -i dpkg_1.16.1.2ubuntu7_amd64.deb

希望这能奏效,您可以重新启动进入 Ubuntu 安装并发现dpkg已重新安装。如果有任何错误,请告诉我,我会尽力帮助您。

编辑:

我已经阅读了dpkg手册页,我认为上面建议的命令可能不起作用。以下是手册页的相关部分,供参考。

   --admindir=dir
          Change default administrative directory,  which  contains
          many   files   that  give  information  about  status  of
          installed or uninstalled  packages,  etc.   (Defaults  to
          /var/lib/dpkg)

   --instdir=dir
          Change default installation directory which refers to the
          directory where packages are to be installed. instdir  is
          also  the  directory  passed  to chroot(2) before running
          package's installation  scripts,  which  means  that  the
          scripts see instdir as a root directory.  (Defaults to /)

   --root=dir
          Changing  root  changes  instdir  to  dir and admindir to
          dir/var/lib/dpkg.

按照我的建议使用--root=dir将管理文件夹设置为/mnt/var/lib/dpkg--您删除的文件夹。

尝试这样做:

sudo dpkg --force-overwrite --instdir=/mnt -i dpkg_1.16.1.2ubuntu7_amd64.deb

这将使用 liveCD 的/var/lib/dpkg文件夹,但--force-overwrite标志应该使其安装,即使它认为包已经安装。

祝你好运!

编辑2

虽然这应该可以重新安装,但dpkg我认为它不会重建中的软件包列表/var/lib/dpkg。按照 izx 的评论中的建议从 liveCD 复制目录/文件并从那里开始可能是最好的选择。

答案2

我最近也遇到了类似的情况。我在网上找到的大多数答案都没有太大帮助。

基本上,您还有另一种选择,那就是从另一个现有的工作安装中复制/var/lib/dpkg。您始终可以在虚拟机(如 VirtualBox)中安装发行版的全新副本,然后从该全新副本中复制目录。

在此之前,我会尝试大多数选项,所以作为最后的手段,请尝试一下。我家里还有另一台运行相同发行版的计算机,所以我将整个目录复制到我的机器上,替换了损坏的/var/lib/dpkg。请务必备份,以便在此方法不起作用时可以返回到您当时的状态。

相关内容