我正在运行 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,您可以尝试使用引导修复如果这没有帮助或者您只有一个终端,我建议创建一个专注于这个新问题的新线程。