问题描述
我试图删除旧内核,但我必须删除我的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
),一开始就不知道哪个分区甚至哪个物理驱动器包含/
文件系统,并具有单独的/boot
分区。
我没有参考这里的任何其他程序写这个,虽然你会注意到一些相似之处。我确实把它放在了the procedure here上(虽然这些说明是针对一些非常不同的,我已经对它进行了广泛的调整,只复制了一些命令,而不是散文)。
您删除了所有内核包,如果没有安装内核,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系统的
/
文件系统的分区的设备名称。-
如果你只有一个
ext4
分区,那就是那个。 -
如果你有多个
ext4
分区,它可能是第一个。但是,如果第一个非常小 – 小于1千兆字节 – 那么这可能是一个单独的/boot
分区(请记住它也是如此)。请注意,boot
是否列在Flags
下,与分区是否为单独的/boot
分区几乎没有关系。我的系统,其信息如上所列,没有单独的/boot
分区。 -
分区的设备名称以物理驱动器的设备名称开头,在第二行中的
Disk
之后立即说明。然后只需添加分区号即可。因此,包含我的/
文件系统的分区的设备名称是/dev/sda1
。以下是我发现该信息的两行:Disk /dev/sda: 21.5GB
1 1049kB 20.4GB 20.4GB primary ext4 boot
-
如果您有多个物理驱动器,您将获得多个列表,如上所示。但除非您安装了另一个Unix-like系统,否则您可能只有一个包含
ext4
分区的驱动器,至少没有在另一个驱动器上有意创建它们。如果您有多个带有ext4
分区的驱动器,则包含/
文件系统的ext4
分区可能位于同时包含linux-swap
分区的驱动器上。 -
您的Ubuntu系统的
/
文件系统可能位于ext4
以外的其他类型的分区上。当发生这种情况时,它几乎总是ext3
,并且几乎总是在一个相当古老的系统上。这种情况非常罕见,除非你自己故意以这种方式设置。
记住包含
/
文件系统的分区的设备名称(或将其写下来)。如果它与/dev/sda1
不同,那么您将在下面的步骤中用它替换/dev/sda1
。(如果看起来你有一个单独的
/boot
分区,请记住它的设备名称。) -
-
将
/
文件系统挂载到/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
从chroot
中进行Internet访问是否可以正常响应ping: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
,因为该文件会自动重新生成on-the-fly。)打开新的终端标签(
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
。 (参见this,this和this。) -
在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。我建议:
-
如果RAM少于3 GB,则为
linux-image-generic
-
linux-image-generic-pae
如果你有3 GB或更多的RAM。
(这是Ubuntu的安装程序选择设置哪一个,因为安装程序获得了安装PAE内核的能力。请参阅the resolution到this bug。如果您想了解PAE是什么,请参阅this Wikipedia article。如果您想了解PAE in Ubuntu,参见this Ubuntu wiki page。)
如果您不知道自己有多少RAM,请运行此命令以查找:
grep MemTotal /proc/meminfo
它列在kilobytes中。要转换为gigabytes,除以1,048,576(10242)。
-
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系统的建议。
-
-
-
这是你等待的那一刻!在损坏的系统中安装内核。
(与之前一样,除非另有明确说明,否则这些命令在
chroot
中运行,而不是在单独的终端窗口/选项卡中运行。)apt-get update apt-get -y install linux-image-generic
将
linux-image-generic
替换为您决定在上面的步骤12中安装的任何其他内核包,如果不同的话。 -
如果必须执行步骤11以在
chroot
中设置网络,请还原旧的hosts
文件。如果跳过步骤11,也请跳过此步骤。要恢复它,请运行以下命令:
cp /etc/hosts.old /etc/hosts
-
从
chroot
卸载文件系统exit
:umount /proc || umount -lf /proc umount /sys /dev/pts exit sudo umount /mnt/dev /mnt
-
关闭带电的CD /DVD /USB系统,取出现场CD /DVD或USB闪存盘。启动到刚修好的硬盘驱动器上安装的系统。您已在其中安装了内核包(作为安装的一部分,它提供的内核将添加回GRUB2启动菜单)。如果一切正常,您的系统应该没有问题启动。 (我认为这次启动可能需要比平常更长的时间。)
免责声明:我没有在每个可能的Ubuntu系统上测试上述程序,因此可能存在我没有发现的错误。
将来,我建议始终尝试保留两个内核。最好有两个,以防其中一个因任何原因停止工作(您可以在GRUB2启动菜单中选择另一个)。另外,如果你打算保留两个内核并且意外地卸载了一个内核并重新启动,那么你仍然需要一个内核来启动。