意外卸载了所有内核

意外卸载了所有内核

我正在运行 Ubuntu 12.04 LTS LAMP 服务器。运行 apt-get dist-upgrade 后,出现错误,提示我的根目录已满,因此按照我在网上找到的说明,我使用 apt-get 卸载了一些旧内核。但是,不知何故,我意外地卸载了所有内核。我的系统现在无法重新启动。

我找到了 2011 年关于解决此问题的帖子 意外删除所有内核后如何恢复系统?

但当我尝试按照说明操作时,它们却不起作用。

当我这样做时:

sudo parted -l

我明白了:

Model: ATA WDC WD20EZRX-00D (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number  Start   End     Size    Type      File system  Flags
 1      1049kB  256MB   255MB   primary   ext2         boot
 2      257MB   2000GB  2000GB  extended
 5      257MB   2000GB  2000GB  logical                lvm


Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0
has been opened read-only.

Error: Can't have a partition outside the disk!

我不明白为什么分区 1 是 ext2,因为这是 12.04 LTS 的全新安装,但我按照指示执行了此命令:

sudo mount /dev/sda1 /mnt

然后我尝试了这个命令:

sudo mount --bind /dev /mnt/dev

它说找不到挂载点。

因此,我这样做了:

mkdir /mnt/dev

然后它就安装好了。

好的,现在我已准备好按照说明进行 chroot:

sudo chroot /mnt

我得到了这个:

chroot: failed to run command '/bin/bash': No such file or directory

我提前道歉,但我对 Linux 了解不够,无法弄清楚这里发生了什么。有人能帮我吗?我需要很长时间才能重新安装服务器上的所有内容。

更新: 谢谢你的回答。当我输入

sudo pvs 

我得到:

PV         VG         Fmt  Attr PSize PFree  
/dev/sda5  HOP-Server lvm2 a-   1.82t 136.00m

然后我输入

sudo lvdisplay /dev/HOP-Server

并得到这个:

  --- Logical volume ---
  LV Name                /dev/HOP-Server/root
  VG Name                HOP-Server
  LV UUID                feUsjU-HFHi-WFre-322J-SlWF-0J1K-zpiTQX
  LV Write Access        read/write
  LV Status              NOT available
  LV Size                1.81 TiB
  Current LE             474993
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto

  --- Logical volume ---
  LV Name                /dev/HOP-Server/swap_1
  VG Name                HOP-Server
  LV UUID                tuJSFw-EKU4-oeLI-A934-srj2-DA2L-VqZtYr
  LV Write Access        read/write
  LV Status              NOT available
  LV Size                7.20 GiB
  Current LE             1843
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto

这与您的示例略有不同,但我认为我应该输入

sudo mount /dev/HOP-Server/root /mnt  **UPDATED**

但当我这样做时,我得到了这个:

mount: special device /dev/HOP-Server/root does not exist

**更新:**我使用这个网页来帮助我挂载文件系统分区:

http://linuxwave.blogspot.com/2007/11/mounting-lvm-disk-using-ubuntu-livecd.html

之后,我能够按照原始说明的其余部分进行操作,没有任何错误。但是,当我重新启动时,唯一的选项是启动两个版本的内存测试实用程序。我再次重新启动 Live CD 并再次按照说明进行操作。当我进入内核的 apt-get 时,它说内核是最新的。

更新:好的,我再次挂载了分区,我可以看到 /root 中有一个名为 initrd.img-3.2.0-56-generic 的文件。如果我没记错的话,这是最新的内核。我运行了 update-grub,但它给出了错误,“找不到 / 的设备”。

更新:经过再次搜索,我发现了这一点:

http://sourceforge.net/apps/mediawiki/bootinfoscript/index.php?title=Boot_Problems:Cannot_Find_A_Device_For_boot/grub

我按照上述步骤操作,没有出现任何错误。但是,现在启动时,出现了以下错误:

error: ELF header smaller than expected
grub rescue> 

答案1

您的 Ubuntu 似乎正在使用 LVM 作为其根目录。您挂载的 ext2 分区包含使系统能够启动和挂载 lvm 的基本必需品,其余部分(包括bash)都存储在那里。

为了找到包含数据的 LVM 卷,您需要lvm2软件包,该软件包未安装在实时系统中。因此,请安装它。

sudo apt-get install lvm2

列出所有卷组来找到包含根分区的卷组。

sudo pvs

输出应该看起来像

PV         VG   Fmt  Attr PSize PFree  
/dev/sda2  vg1  lvm2 a--  1,64t 236,91g

第二列包含卷组的名称,在本例中为vg1。这样,您可以通过发出以下命令获取有关该组中包含的卷的信息

sudo lvdisplay /dev/vg1

输出结果如下

--- Logical volume ---
LV Path                /dev/vg1/lv1
LV Name                lv1
VG Name                vg1
LV UUID                kE8qXE-bI4u-NLzZ-u37A-wZfx-NtaU-57PqRj
LV Write Access        read/write
LV Creation host, time , 
LV Status              available
# open                 1
LV Size                1000,00 GiB
Current LE             256000
Segments               2
Allocation             inherit
Read ahead sectors     auto
- currently set to     256
Block device           254:0

您要查找的是 LV 名称,在本例中为lv1。如果只有一个卷,则该卷应该是您的根驱动器。否则,请将它们全部挂载,然后查看哪一个包含您的系统数据。

安装卷非常简单

sudo mount /dev/vg1/lv1 /mnt

完成此操作后,您就可以继续按照您找到的线程中的说明进行操作。

更新:正如评论中提到的,由于您使用的是单独的启动分区(/dev/sda1),因此您必须将其安装到/mnt/boot/。您找到的帖子中的第二个答案包含有关此问题的更多详细信息。

更新 2:最新的错误通常表示您的 grub 安装有问题。如果您可以访问远程 GUI,您可以尝试使用引导修复如果这没有帮助或者您只有一个终端,我建议创建一个专注于这个新问题的新线程。

相关内容