当前位置: 首页>>技术教程>>正文


如何在意外删除所有内核后恢复系统?

,

问题描述

我试图删除旧内核,但我必须删除我的Ubuntu 11.04笔记本电脑上的所有内核。有没有办法通过USB启动或在另一个系统上安装硬盘来解决这个问题?

最佳解决思路

启动到现场CD(或实时USB),安装一些系统,chroot到它并安装内核。成功安装内核后,卸载文件系统。

  1. 开放式终端

  2. 挂载Ubuntu分区:sudo mount /dev/sdXY /mnt

  3. 安装一些特殊分区:

    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys
    
  4. (可选)连接到网络时,请使用Live环境中的DNS服务器(否则可能无法解析主机名):

    cp /etc/resolv.conf /mnt/etc/resolv.conf
    
  5. Chroot到/mntsudo chroot /mnt

  6. 安装Linux内核:apt-get install linux-image-generic(不需要sudo,因为你是chroot之后的root用户)

  7. 成功安装内核后,取出chroot并卸载一些文件系统:

    exit
    sudo umount /mnt/sys
    sudo umount /mnt/proc
    sudo umount /mnt/dev
    sudo umount /mnt
    
  8. 重新启动并删除CD或USB:sudo reboot

次佳解决思路

这个扩展的过程解决了可能发生的大多数复杂问题,包括在chroot中连接到Internet的问题,不知道要安装哪个内核包(在Ubuntu 12.10之前,它不会总是linux-image-generic),一开始就不知道哪个分区甚至哪个物理驱动器包含/文件系统,并具有单独的/boot分区。

我没有参考这里的任何其他程序写这个,虽然你会注意到一些相似之处。我确实把它放在了the procedure here上(虽然这些说明是针对一些非常不同的,我已经对它进行了广泛的调整,只复制了一些命令,而不是散文)。

您删除了所有内核包,如果没有安装内核,Ubuntu无法启动。所以解决方案是从现场CD /DVD /USB,chroot启动到已安装的系统,并在其中安装内核。

  1. 从Ubuntu live CD /DVD或实时USB闪存驱动器启动。

  2. 选择Try Ubuntu(不安装Ubuntu)。

  3. 桌面启动时,请确保已连接到Internet。如果不是,请连接到Internet。查看您是否已连接到Internet的一种方法是打开Web浏览器。您甚至可以通过在Web浏览器中,在Live CD /DVD /USB系统中提供此Ask Ubuntu答案,来遵循其余的说明。我强烈建议这样做。

  4. 使用Ctrl + Alt + T打开终端窗口。

  5. 在“终端”窗口中,运行此命令以列出分区:

     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!
    
  6. 检查您获得的输出,以确定包含安装在硬盘驱动器(您正在修复)的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分区,请记住它的设备名称。)

  7. /文件系统挂载到/mnt,并挂载其/dev文件系统:

    sudo mount /dev/sda1 /mnt
    sudo mount --bind /dev /mnt/dev
  8. 检查您正在修复的损坏的Ubuntu系统是否有单独的/boot分区,必须单独安装。 (如果你确定没有,你可以跳过这个。)

    要检查,请运行:

    ls /mnt/boot
    

    如果有输出(如grub memtest86+.bin memtest86+_multiboot.bin,但不一定完全相同),则损坏的系统的/boot与其/位于同一分区上,您无需安装任何内容即可访问它。

    但是如果没有输出,那么你将不得不挂载/boot文件系统:

    sudo mount BOOT-PARTITION /mnt/boot

    BOOT-PARTITION替换为/boot分区的设备名称(参见上面的步骤6)。

  9. 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
    
  10. 通过ping确定是否可以通过pingchroot中进行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中的网络还没有工作。

  11. chroot中设置网络。除非您在上面的步骤10中遇到unknown host错误,否则请跳过此步骤。

    要设置网络,请备份损坏的系统的hosts文件,然后复制Live CD系统的hostsresolv.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。这应该。

  12. 找出应该安装哪个内核包。通常,这将是linux-image-generic。但不总是。如果您不确定要安装哪个,则部分取决于您安装的Ubuntu版本,部分取决于其他信息。如果您不确定已安装哪个Ubuntu版本,请通过运行此命令查找(在chroot中,而不是在单独的终端窗口/选项卡中):lsb_release -r

    • 在Ubuntu 12.10(下一个Ubuntu版本,目前正在开发中),它始终是linux-image-generic。 (参见thisthisthis。)

    • 在Ubuntu 12.04 LTS上,可能的可能性是linux-image-genericlinux-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
        

        输出将是3264

        (请注意,uname -m不是查找此信息的正确方法,因为即使在chroot中运行,也会告诉您正在运行的内核的体系结构,它是Live CD系统的内核,而不是已安装(损坏)系统的内核。)

      • 如果安装的Ubuntu系统(您正在修复)是32位版本,那么使用的最佳内核将取决于您拥有多少RAM。我建议:

        • 如果RAM少于3 GB,则为linux-image-generic

        • linux-image-generic-pae如果你有3 GB或更多的RAM。

        (这是Ubuntu的安装程序选择设置哪一个,因为安装程序获得了安装PAE内核的能力。请参阅the resolutionthis 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-genericlinux-image-generic-paelinux-image-server

      • 如果您正在运行Ubuntu Server系统,请使用linux-image-server

      • 否则,请遵循上述12.04系统的建议。

  13. 这是你等待的那一刻!在损坏的系统中安装内核。

    (与之前一样,除非另有明确说明,否则这些命令在chroot中运行,而不是在单独的终端窗口/选项卡中运行。)

    apt-get update
    apt-get -y install linux-image-generic

    linux-image-generic替换为您决定在上面的步骤12中安装的任何其他内核包,如果不同的话。

  14. 如果必须执行步骤11以在chroot中设置网络,请还原旧的hosts文件。如果跳过步骤11,也请跳过此步骤。

    要恢复它,请运行以下命令:

    cp /etc/hosts.old /etc/hosts
    
  15. chroot卸载文件系统exit

    umount /proc || umount -lf /proc
    umount /sys /dev/pts
    exit
    sudo umount /mnt/dev /mnt
    
  16. 关闭带电的CD /DVD /USB系统,取出现场CD /DVD或USB闪存盘。启动到刚修好的硬盘驱动器上安装的系统。您已在其中安装了内核包(作为安装的一部分,它提供的内核将添加回GRUB2启动菜单)。如果一切正常,您的系统应该没有问题启动。 (我认为这次启动可能需要比平常更长的时间。)

免责声明:我没有在每个可能的Ubuntu系统上测试上述程序,因此可能存在我没有发现的错误。

将来,我建议始终尝试保留两个内核。最好有两个,以防其中一个因任何原因停止工作(您可以在GRUB2启动菜单中选择另一个)。另外,如果你打算保留两个内核并且意外地卸载了一个内核并重新启动,那么你仍然需要一个内核来启动。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1140.html,未经允许,请勿转载。