更新管理器卸载了 GRUB - 如何返回 Ubuntu?

更新管理器卸载了 GRUB - 如何返回 Ubuntu?

我运行的是 Ubuntu 14.04,并且总是定期更新(几乎每天都更新)。今天(7 月 8 日),Ubuntu 更新的行为与平时不同。它显示“并非所有更新都可以安装”,并建议“部分更新”。从未尝试过,但我相信 Ubuntu。我在更新列表中注意到的一件事是引导加载程序 GRUB,但嘿,我相信 Ubuntu。

完成后,它要求我重新启动,当我重新启动后,它直接启动到 Windows。也就是说,GRUB 实际上被卸载了,我现在无法选择是否要启动到 Ubuntu。我既不擅长 Linux 也不擅长 Windows,但我觉得 Windows 8 更不方便(它只是捆绑销售)。

笔记本电脑上还装有 Ubuntu 吗?如果是,我该如何尽快恢复?(我周末要做一个演讲,设置新系统和获取备份数据很慢)。


按照 Christian Benke 的回答,无法进行 grub 安装


我现在正在使用 ubuntu usb 棒探测系统。

ubuntu@ubuntu:~$ sudo parted -l
Model: ATA TOSHIBA THNSNJ25 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name                  Flags
 1      1049kB  1075MB  1074MB  ntfs            Basic data partition  hidden, diag
 2      1075MB  1180MB  105MB   fat32           Basic data partition  boot
 3      1180MB  1314MB  134MB   ntfs            Basic data partition  msftres
 4      1314MB  44.7GB  43.4GB  ntfs            Basic data partition  msftdata
 6      44.7GB  46.7GB  2000MB  linux-swap(v1)
 7      46.7GB  244GB   197GB   ext4
 5      244GB   256GB   12.1GB  ntfs            Basic data partition  hidden, diag

快速执行“sudo mkdir /media/[mountpoint]”然后执行“sudo mount /dev/sda[X] /media/[mountpoint]”可以检查分区:

/dev/sda1  Windows boot files
/dev/sda2  EFI files
/dev/sda3  Empty
/dev/sda4  Windows system
/dev/sda5  Toshiba recovery
/dev/sda6  Ubuntu swap partition (not mountable)
/dev/sda7  Ubuntu system

显然,/dev/sda7 是我想要继续的。

ubuntu@ubuntu:~$ sudo mkdir /media/oldroot
ubuntu@ubuntu:~$ sudo mount /dev/sda7 /media/oldroot
ubuntu@ubuntu:~$ sudo mount --bind /dev /media/oldroot/dev
ubuntu@ubuntu:~$ sudo mount --bind /proc /media/oldroot/proc
ubuntu@ubuntu:~$ sudo mount --bind /sys /media/oldroot/sys
ubuntu@ubuntu:~$ sudo chroot /media/oldroot /bin/sh 
# lsb_release -d
Description:    Ubuntu 14.04.2 LTS
# grub-install /dev/sda
Installing for x86_64-efi platform.
grub-install: error: cannot find EFI directory.
# exit

显然,grub-install 没有在 /dev/sda2 找到 EFI 文件,但事先将其挂载在 /media/oldroot/boot/efi 似乎工作正常:

ubuntu@ubuntu:~$ sudo mount /dev/sda2 /media/oldroot/boot/efi
ubuntu@ubuntu:~$ sudo chroot /media/oldroot /bin/sh 
# lsb_release -d
Description:    Ubuntu 14.04.2 LTS
# grub-install /dev/sda
Installing for x86_64-efi platform.
Installation finished. No error reported.
# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.16.0-43-generic
Found initrd image: /boot/initrd.img-3.16.0-43-generic
Found linux image: /boot/vmlinuz-3.16.0-41-generic
Found initrd image: /boot/initrd.img-3.16.0-41-generic
Found linux image: /boot/vmlinuz-3.16.0-40-generic
Found initrd image: /boot/initrd.img-3.16.0-40-generic
Found linux image: /boot/vmlinuz-3.16.0-39-generic
Found initrd image: /boot/initrd.img-3.16.0-39-generic
Found linux image: /boot/vmlinuz-3.16.0-38-generic
Found initrd image: /boot/initrd.img-3.16.0-38-generic
Found linux image: /boot/vmlinuz-3.16.0-37-generic
Found initrd image: /boot/initrd.img-3.16.0-37-generic
Found linux image: /boot/vmlinuz-3.16.0-36-generic
Found initrd image: /boot/initrd.img-3.16.0-36-generic
Found linux image: /boot/vmlinuz-3.16.0-34-generic
Found initrd image: /boot/initrd.img-3.16.0-34-generic
Found linux image: /boot/vmlinuz-3.16.0-33-generic
Found initrd image: /boot/initrd.img-3.16.0-33-generic
Adding boot menu entry for EFI firmware configuration
done
# exit    

但这并没有解决问题。重启后,GRUB 没有出现,而是直接再次进入 Windows?到目前为止,谢谢你,这次似乎出了什么问题?


无法重新安装受影响的软件包


根据建议,我查看了 apt/history.log 文件,以查看“部分更新”期间发生了什么,导致 GRUB 停止工作。不幸的是,它不包含 7 月 8 日更新的条目:

ubuntu@ubuntu:~$ cat /media/summer7/var/log/apt/history.log

Start-Date: 2015-07-03  09:32:40
Commandline: aptdaemon role='role-commit-packages' sender=':1.79'
Upgrade: lightdm:amd64 (1.10.5-0ubuntu1, 1.10.5-0ubuntu1.1), liblightdm-gobject-1-0:amd64 (1.10.5-0ubuntu1, 1.10.5-0ubuntu1.1)
End-Date: 2015-07-03  09:32:42

Start-Date: 2015-07-05  20:02:01
Commandline: aptdaemon role='role-commit-packages' sender=':1.85'
Upgrade: libxcomp3:amd64 (3.5.0.31-0~605~ubuntu14.04.1, 3.5.0.32-0~668~ubuntu14.04.1), nxproxy:amd64 (3.5.0.31-0~605~ubuntu14.04.1, 3.5.0.32-0~668~ubuntu14.04.1), irqbalance:amd64 (1.0.6-2ubuntu0.14.04.1, 1.0.6-2ubuntu0.14.04.2)
End-Date: 2015-07-05  20:02:04

Start-Date: 2015-07-07  20:00:24
Commandline: aptdaemon role='role-commit-packages' sender=':1.81'
Install: linux-image-3.16.0-43-generic:amd64 (3.16.0-43.58~14.04.1), linux-headers-3.16.0-43:amd64 (3.16.0-43.58~14.04.1), linux-headers-3.16.0-43-generic:amd64 (3.16.0-43.58~14.04.1), linux-image-extra-3.16.0-43-generic:amd64 (3.16.0-43.58~14.04.1), linux-signed-image-3.16.0-43-generic:amd64 (3.16.0-43.58~14.04.1)
Upgrade: linux-signed-image-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), libfontembed1:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5), linux-image-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), cups-browsed:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5), linux-signed-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), cups-filters-core-drivers:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5), cups-filters:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5), libgtksourceview2.0-0:amd64 (2.10.5-1ubuntu2, 2.10.5-1ubuntu2.14.04.1), linux-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), linux-libc-dev:amd64 (3.13.0-55.94, 3.13.0-57.95), libgtksourceview2.0-common:amd64 (2.10.5-1ubuntu2, 2.10.5-1ubuntu2.14.04.1), linux-headers-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), libcupsfilters1:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5)
End-Date: 2015-07-07  20:01:11

事实上,它的长度似乎有点短,不是吗?此外,与文件上次被触碰的时间相比,最后一条记录是 2 小时后:

ubuntu@ubuntu:~$ ls -l /media/summer7/var/log/apt/history.log
-rw-r--r-- 1 root root 1925 Jul  7 18:01 /media/summer7/var/log/apt/history.log

所以也许我们在这里看到的是文件损坏?哦,好吧,我尝试了 apt-get update,但没有用:

ubuntu@ubuntu:~$ sudo mount --bind /dev /media/oldroot/dev
ubuntu@ubuntu:~$ sudo mount --bind /proc /media/oldroot/proc
ubuntu@ubuntu:~$ sudo mount --bind /sys /media/oldroot/sys
ubuntu@ubuntu:~$ sudo chroot /media/oldroot apt-get update

一切都无法获取,并出现“无法解析”错误,就像这个问题. 以下失败

ubuntu@ubuntu:~$ sudo chroot /media/oldroot ping dk.archive.ubuntu.com
ping: unknown host dk.archive.ubuntu.com

并且 /media/oldroot/etc/resolv.conf 文件完全为空。这是一个不好的迹象吗?

答案1

我也和你遇到过同样的问题。当时我正在处理一些事情,ubuntu 建议进行部分更新,我照做了,然后昨天花了大部分时间尝试重新安装 grub(但无济于事)。

我的安装是 Windows 8.1 的双启动,因此除了 Windows 分区之外,我还有三个 Linux 分区:一个用于系统(“/”),一个用于主分区(“/home”),一个用于交换。我无法使用启动修复重新安装 grub,因此我使用 ubuntu 拇指驱动器启动,然后启动安装程序。

当它询问我想要做什么时,我选择了其他内容。然后我将原始系统目录“/”设置为根分区并告诉安装程序对其进行格式化,我将交换设置为交换,将我的主目录设置为“/home”,但我告诉安装程序不要格式化主目录。

我还告诉安装程序将引导加载程序安装在磁盘上(在我的情况下是 /dev/sda),而不是分区上。安装完成后,重新启动时出现 grub,我能够重新启动进入 ubuntu 和 windows 8.1。

我的主目录完全完好无损,我的桌面背景和.bashrc 自动加载,一旦我开始重新安装程序,我就会自动重新登录到teamviewer、chrome 等。

如果您有单独的 /home 和系统分区,这可能是最好的解决方案。不会丢失数据,而且重新安装也不会花费太长时间。

答案2

你可以使用一个小型的可启动实时系统,例如格鲁姆和命令chroot回到旧系统来修复损坏的引导加载程序。

从 Live-cd 启动后,您需要访问已安装 Linux 系统的文件系统。因此,您要做的第一件事是挂载已安装 Linux 的根分区(以 Live-cd 环境中的根用户身份):

# mkdir /media/oldroot
# mount /dev/sda1 /media/oldroot

如果您不确定您的 Linux 分区是哪一个,请挂载所有可用的分区并检查哪一个是您的根分区。

获得功能齐全的 chroot 环境的下一步是挂载伪文件系统 (/dev/进程/系统)从我们刚刚挂载的根分区内的 live-cd-environment 中:

# mount --bind /dev /media/oldroot/dev
# mount --bind /proc /media/oldroot/proc
# mount --bind /sys /media/oldroot/sys

现在我们的系统已准备好进行 chroot,这意味着你用已安装的系统“替换”你的 live-cd 的环境(我们还告诉它使用/bin/sh作为安装环境中的命令提示符:

# chroot /media/oldroot /bin/sh
# 

验证您是否处于旧安装的 Linux 中:

# lsb_release -d
Description:    Ubuntu 14.04.2 LTS

从 chroot 尝试运行

# grub-install /dev/sda

在硬盘的主引导记录中重新安装 grub-bootloader。

如果 grub2 确实已被卸载,并且 grub-install 不存在,您可以通过将 grub2-package 复制到 USB 驱动器来重新安装它:

从以下位置下载 deb 文件http://packages.ubuntu.com/trusty/grub2并将其复制到 USB 棒上。将 USB 棒挂载到 chroot 中(使用 Alt-F2 在 live-cd 环境中获取第二个 tty 来挂载 USB 棒,然后使用 Alt-F1 切换回 chroot 环境):

-- Press <Alt-F2> to get to the second tty of the live-cd-env
# mkdir /media/oldroot/media/<yourusername>/usb_stick
# mount /dev/sdb1 /media/oldroot/media/<youruser>/usb_stick

-- Press <Alt-F1> to get back to the first tty to our chroot
# cd /media/<yourusername>/usb_stick
# ls
dpkg -i grub2_2.02~beta2-9_amd64.de
# dpkg -i grub2_2.02~beta2-9_amd64.deb

之后,继续grub 安装

相关内容