如何在意外删除所有内核后恢复系统?
我试图删除旧内核,但我必须删除我的Ubuntu 11.04笔记本电脑上的所有内核。 有没有办法通过USB启动或在另一个系统上安装硬盘来解决这个问题?
启动到现场CD(或实时USB),安装一些系统,chroot到它并安装内核。 成功安装内核后,卸载文件系统。
- 开放式终端
- 挂载Ubuntu分区:
sudo mount /dev/sdXY /mnt
-
安装一些特殊分区:
sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys
-
(可选)连接到网络时,请使用Live环境中的DNS服务器(否则可能无法解析主机名):
cp /etc/resolv.conf /mnt/etc/resolv.conf
- Chroot到
/mnt
:sudo chroot /mnt
- 安装Linux内核:
apt-get install linux-image-generic
(不需要sudo,因为你是chroot之后的root用户) -
成功安装内核后,取出chroot并卸载一些文件系统:
exit sudo umount /mnt/sys sudo umount /mnt/proc sudo umount /mnt/dev sudo umount /mnt
- 重新启动并删除CD或USB:
sudo reboot
这个扩展的过程解决了可能发生的大多数复杂问题,包括在chroot
连接到Internet的问题,不知道要安装哪个内核包(在Ubuntu 12.10之前,它不一定是linux-image-generic
),不知道在首先是哪个分区甚至是哪个物理驱动器包含/
filesystem,并且具有单独的/boot
分区。
我没有参考这里的任何其他程序写这个,虽然你会注意到一些相似之处。 我确实把它放在这里的程序上 (尽管这些指令是针对一些完全不同的东西,我已经对它进行了广泛的调整,只复制了一些命令,而不是散文)。
您删除了所有内核包,如果没有安装内核,Ubuntu无法启动。 所以解决方案是从现场CD / DVD / USB启动, chroot
到已安装的系统,并在其中安装内核。
-
从Ubuntu live CD / DVD或实时USB闪存驱动器启动。
-
选择Try Ubuntu (不安装Ubuntu )。
-
桌面启动时,请确保已连接到Internet。 如果不是,请连接到Internet。 查看您是否已连接到Internet的一种方法是打开Web浏览器。 您甚至可以通过在Web浏览器中,在Live CD / DVD / USB系统中提供此Ask Ubuntu答案,来遵循其余的说明。 我强烈建议这样做。
-
使用Ctrl + Alt + T打开终端窗口。
-
在“终端”窗口中,运行此命令以列出分区:
sudo parted -l
你会看到这样的东西(但它不会完全像这样):
Model: VMware, VMware Virtual S (scsi) Disk /dev/sda: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 1049kB 20.4GB 20.4GB primary ext4 boot 2 20.4GB 21.5GB 1072MB extended 5 20.4GB 21.5GB 1072MB logical linux-swap(v1) 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!
-
检查您获得的输出,以确定包含安装在硬盘驱动器(您正在修复)的Ubuntu系统的
/
filesystem的分区的设备名称。-
如果你只有一个
ext4
分区,那就是那个。 -
如果你有多个
ext4
分区,它可能是第一个。 但是,如果第一个非常小 – 小于一千兆字节 – 那么这可能是一个单独的/boot
分区(请记住那个)。请注意,
Flags
下是否列出了boot
,与分区是否为单独的/boot
分区几乎没有关系。 我的系统(上面列出的信息) 没有单独的/boot
分区。 -
分区的设备名称以物理驱动器的设备名称开头,紧跟在第二行中的
Disk
之后。 然后只需添加分区号即可。 因此,包含my/
filesystem的分区的设备名称是/dev/sda1
。 以下是我发现该信息的两行:Disk /dev/sda : 21.5GB
1 1049kB 20.4GB 20.4GB primary ext4 boot
-
如果您有多个物理驱动器,您将获得多个列表,如上所示。 但除非您安装了另一个类Unix系统,否则您可能只有一个包含
ext4
分区的驱动器,至少没有在另一个驱动器上故意创建它们。 如果你有多个带有ext4
分区的驱动器,那么包含/
filesystem的ext4
分区可能位于同时包含linux-swap
分区的驱动器上。 -
您的Ubuntu系统
/
文件系统可能位于ext4
以外的类型的分区上。 当发生这种情况时,它几乎总是ext3
,并且几乎总是在一个相当古老的系统上。 这种情况非常罕见,除非你自己故意以这种方式设置。
记住包含
/
filesystem的分区的设备名称(或将其写下来)。 如果它与/dev/sda1
不同,那么你将在下面的步骤中用它替换/dev/sda1
。(如果看起来你有一个单独的
/boot
分区,请记住它的设备名称。) -
-
将
/
filesystem挂载到/mnt
,并挂载其/dev
文件系统:sudo mount /dev/sda1 /mnt sudo mount --bind /dev /mnt/dev
-
检查您正在修复的损坏的Ubuntu系统是否有单独的
/boot
分区,必须单独安装。 (如果你确定没有,你可以跳过这个。)要检查,请运行:
ls /mnt/boot
如果有输出(如
grub memtest86+.bin memtest86+_multiboot.bin
,但不一定完全相同),那么损坏的系统的/boot
与它的/
在同一分区上,并且您不必安装任何东西来访问它。但是如果没有输出,那么你将不得不挂载
/boot
文件系统:sudo mount BOOT-PARTITION /mnt/boot
将
BOOT-PARTITION
替换为/boot
分区的设备名称(请参阅上面的步骤6)。 -
chroot
进入破碎的系统,挂载剩余的重要虚拟文件系统,并设置一些重要的环境变量:sudo chroot /mnt mount -t proc none /proc mount -t sysfs none /sys mount -t devpts none /dev/pts export HOME=/root export LC_ALL=C
-
通过
ping
一些已知能正常响应ping
可靠主机,确定Internet访问是否在chroot
内工作:ping -c 5 www.google.com
你应该看到这样的东西:
PING www.l.google.com (74.125.131.147) 56(84) bytes of data. 64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=1 ttl=44 time=61.3 ms 64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=2 ttl=44 time=62.3 ms 64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=3 ttl=44 time=61.8 ms 64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=4 ttl=44 time=63.8 ms 64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=5 ttl=44 time=66.6 ms --- www.l.google.com ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4006ms rtt min/avg/max/mdev = 61.367/63.212/66.608/1.897 ms
-
如果它看起来大部分都是这样,并且
% packet loss
之前的数字小于100,那么chroot
的Internet连接正在工作:5 packets transmitted, 5 received, 0% packet loss , time 4006ms
它正在运行,因此您可以跳过第11步 。
-
如果它看起来与此类似,并且
% packet loss
前的数字为100,则连接需要进行故障排除。 确保Live CD系统上的连接(例如,通过Web浏览器,或通过在单独的非chroot
ed终端选项卡/窗口中运行相同的命令)工作。 确保正确输入命令。 如果您还没有,请使用www.google.com
。 -
如果输出看起来不像上面那样,而是说
ping: unknown host www.google.com
,那么网络在chroot
还没有工作。
-
-
在
chroot
设置网络。 除非您在上面的步骤10中遇到unknown host
错误,否则请跳过此步骤。要设置网络,请备份损坏的系统的
hosts
文件,然后复制live CD系统的hosts
和resolv.conf
文件。 (您不必备份损坏的系统版本的resolv.conf
,因为该文件会在运行时自动重新生成。)打开一个新的终端选项卡 ( Ctrl + Shift + T ),或者,如果您愿意,还可以打开一个新的终端窗口 ( Ctrl + Shift + N ,或者只需按Ctrl + Alt + T )。 在其中运行以下命令:
sudo cp /mnt/etc/hosts /mnt/etc/hosts.old sudo cp /etc/hosts /mnt/etc/hosts sudo cp /etc/resolv.conf /mnt/etc/resolv.conf exit
(最后的
exit
命令关闭新的选项卡/窗口。)重复上面的步骤10,确保现在可以从
chroot
访问Internet。 这应该。 -
找出应该安装哪个内核包。 通常,这将是
linux-image-generic
。 但不总是。如果您不确定要安装哪个,则部分取决于您安装的Ubuntu版本,部分取决于其他信息。 如果您不确定已安装哪个Ubuntu版本,请运行此命令(在
chroot
, 而不是在单独的终端窗口/选项卡中):lsb_release -r
-
在Ubuntu 12.10(下一个Ubuntu版本,目前正在开发中)中,它始终是
linux-image-generic
。 (看到这个 , 这个 , 这个 。) -
在Ubuntu 12.04 LTS上,可能的可能性是
linux-image-generic
和linux-image-generic-pae
。 (与以前的版本不同,12.04不再具有单独的服务器和桌面内核。)-
如果安装的Ubuntu系统(您正在修复)是64位版本,请使用
linux-image-generic
。 (linux-image-generic-pae
仅适用于32位系统。)可以在32位或64位计算机上安装32位Ubuntu系统。 此外,您可能正在使用32位或64位Live CD来修复32位已安装的系统。 因此,如果您不知道安装的Ubuntu系统是32位还是64位,请通过运行此命令进行检查(在
chroot
, 而不是在单独的终端窗口/选项卡中):dpkg-architecture -qDEB_HOST_ARCH_BITS
输出将是
32
或64
。(请注意,
uname -m
不是查找此信息的正确方法,因为即使在chroot
运行,也会告诉您正在运行的内核的体系结构,这是Live CD系统的内核而不是已安装(已损坏)系统的内核。) -
如果安装的Ubuntu系统(您正在修复)是32位版本,那么使用的最佳内核将取决于您拥有多少RAM。 我建议:
-
linux-image-generic
如果你的RAM少于3 GB -
linux-image-generic-pae
如果你有3 GB或更多RAM。
(这是Ubuntu的安装程序选择设置哪一个,因为安装程序获得了安装PAE内核的能力。请参阅此错误 的解决方案 。如果您想了解PAE是什么,请参阅此Wikipedia文章 。如果您想要在Ubuntu中了解PAE,请参阅此Ubuntu wiki页面 。)
如果您不知道自己有多少RAM,请运行此命令以查找:
grep MemTotal /proc/meminfo
以千字节为单位列出。 要转换为千兆字节 ,除以1,048,576(1024 2 )。
- 3演出= 3,145,728 kB
-
-
-
在12.04 之前的 Ubuntu版本中,可能的可能性是
linux-image-generic
,linux-image-generic-pae
和linux-image-server
。- 如果您正在运行Ubuntu Server系统,请使用
linux-image-server
。 - 否则,请遵循上述12.04系统的建议。
- 如果您正在运行Ubuntu Server系统,请使用
-
-
这是你等待的那一刻! 在损坏的系统中安装内核。
(与之前一样,除非另有明确说明,否则这些命令在
chroot
中运行,而不是在单独的终端窗口/选项卡中运行。)apt-get update apt-get -y install linux-image-generic
将
linux-image-generic
替换linux-image-generic
您决定在上面的步骤12中安装的任何其他内核包,如果不同的话。 -
如果必须执行步骤11以在
chroot
设置网络,请还原旧的hosts
文件。 如果跳过步骤11,也请跳过此步骤。要恢复它,请运行以下命令:
cp /etc/hosts.old /etc/hosts
-
卸载文件系统,
exit
chroot
:umount /proc || umount -lf /proc umount /sys /dev/pts exit sudo umount /mnt/dev /mnt
-
关闭带电的CD / DVD / USB系统,取出现场CD / DVD或USB闪存盘。 启动到刚修好的硬盘驱动器上安装的系统。 您已在其中安装了内核包(作为安装的一部分,它提供的内核将添加回GRUB2启动菜单)。 如果一切正常,您的系统应该没有问题启动。 (我认为这次启动可能需要比平常更长的时间。)
免责声明:我没有在每个可能的 Ubuntu系统上测试上述程序,因此可能存在我没有发现的错误。
将来,我建议始终尝试保留两个内核。 最好有两个,以防其中一个因任何原因停止工作(您可以在GRUB2启动菜单中选择另一个)。 另外,如果你打算保留两个内核并且意外地卸载了一个内核并重新启动,那么你仍然需要一个内核来启动。
当我删除我的内核时,我在Ubuntu论坛上找到了这个解决方案。 我遵循了每一步,系统得到了恢复。 希望它会对你有所帮助。
chroot可能有效,chroot意味着当你启动系统时你改变了根文件系统。 例如,您从live CD开始,但是将根“/”更改为安装ubuntu的位置。
让我们说你的ubuntu安装在/ dev / sda2上然后你可以尝试以下命令:
码:
sudo mount /dev/sda2 /mnt sudo cp /etc/resolv.conf /mnt/etc/ sudo cp /etc/hosts /mnt/etc/ sudo mount --bind /dev/ /mnt/dev sudo chroot /mnt mount -t proc none /proc mount -t sysfs none /sys mount -t devpts none /dev/pts export HOME=/root export LC_ALL=C dbus-uuidgen > /var/lib/dbus/machine-id dpkg-divert --local --rename --add /sbin/initctl ln -s /bin/true /sbin/initctl
现在你的根目录“/”在/ dev / sda2上,尝试安装内核
apt-get update apt-get install linux-image-2.6.32-26-generic update-initramfs -cv -k all update-grub
我不得不在这里做一些猜测,因为我以前从来没有这么做过,但这应该是关于它的。 不知道你是否得到一些fstab错误警告(比如找不到root)。
现在你需要清理一些东西并卸载已安装的分区:代码:
rm /etc/resolv.conf rm /etc/hosts rm /var/lib/dbus/machine-id rm /sbin/initctl dpkg-divert --rename --remove /sbin/initctl umount /proc # if this doesn't work try umount -lf /proc umount /sys umount /dev/pts exit sudo umount /mnt
你可以重新启动,看看它是否有效。
该主题的URL: http : //art.ubuntuforums.org/showthread.php?t = 1688928
我昨天从Trusty14.04中删除旧内核后(FTR:我没有删除最近的两个内核!)我的系统不再启动了。 GRUB表明
Error: File not found Error: You need to load the kernel first
不知道为什么。
然后我按照Eliah Kagan的优秀指示从live CD安装linux-image-generic
。 它确实安装了150 MB的新内核,但遗憾的是没有解决问题。
幸运的是,我找到了这个页面 。 Boot-Repair
工具正确,我的系统再次运行。
我只是想补充一下今天我升级到威利的经历。 我清理了一下,发现自己只有记忆。 谷歌让我明白我已经删除了内核。 我有一个限制是网络速度慢,所以下载完整的ISO不是选项。 所以我使用了Ubuntu Minimal CD (仅限40MB)并在其上启动。 在检测到硬件选项(帮助我连接到无线)后,我进入了shell选项。 我跟着@Lekensteyn的指示,我成功了。 但是很少的事情:你必须在chroot之前复制resolv.conf
,否则你的DNS将被搞砸,因为登录的用户根本不需要sudo任何地方。
我知道它的陈旧但我认为添加这个答案会增加那些遇到问题的人的价值。