matt@crucible:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
所以昨晚我运行“sudo apt-get upgrade”来更新我的系统时,它弹出一个基于键盘终端的输入屏幕,询问我在哪个磁盘分区上安装一些奇怪的 GRUB。这听起来好像我必须选择正确的分区,否则我会把事情搞砸。它说如果我不确定,我应该选择所有分区。列表中有四个条目(这对我来说有点奇怪,因为我认为我在这台特定的机器上只有一个固态硬盘,我不知道为什么我会设置比绝对必要的更多的分区)。我讨厌毫无意义地将 grub 复制到不需要它的分区。
我感觉自己好像突然不情愿地被带入了另一个现实,在那里我成了电影《夺宝奇兵3:圣战奇兵》中无知的纳粹分子,我必须选择正确的圣杯:
https://youtu.be/A0TalLrtZ24?t=45
我发现一些网页(扮演美女的角色)告诉我“sda”对大多数人来说是“正确的”。出于对驱动器中不需要的 grub 副本的渴望,我大胆地只选择了“sda”分区并继续。
我已经使用 ubuntu 多年了,但我唯一一次弄乱 grub 是在设置新机器时。我已经好几年没这样做了。每次安装时,我都必须仔细阅读安装说明,以指导我完成 grub 和分区设置。我已经不记得我是如何在这台机器上设置分区的,也不记得我把 grub 放在哪里了。我对 grub 的了解仅限于它是 BIOS 运行的一些代码,可让您选择是启动 Windows 还是 ubuntu。我的系统只支持 ubuntu。
我还害怕使用 Control-c 退出升级过程,因为担心这可能会使系统处于第二次运行 apt-get upgrade 无法恢复的状态。(有一次我中断了升级,把系统搞糟了,只能在网上搜索如何恢复。)
我的问题是:
1)为什么他们没有添加一种正常退出安装的方法,以便我可以研究正确的答案?
2) 如果我关闭安装,会发生什么情况?
3)我如何才能确定我是否“选择错误”并且我的 ubuntu 系统现在是否正在痛苦地枯萎成一堆灰尘?
4) 如果我确实喝了错误的圣杯,可以恢复吗?
更新:根据要求,以下是相关 apt-get upgrade 的日志(添加了一些换行符)。我看到四行带有字符串“grub”。不确定是哪一行让我进入了表单输入屏幕:
Start-Date: 2018-02-22 05:18:50
Commandline: apt-get upgrade
Requested-By: matt (1000)
Upgrade:
libaudit-common:amd64 (1:2.4.5-1ubuntu2, 1:2.4.5-1ubuntu2.1),
update-manager-core:amd64 (1:16.04.10, 1:16.04.12),
uuid-runtime:amd64 (2.27.1-6ubuntu3.3, 2.27.1-6ubuntu3.4),
libfdisk1:amd64 (2.27.1-6ubuntu3.3, 2.27.1-6ubuntu3.4),
libapt-inst2.0:amd64 (1.2.24, 1.2.25),
libsystemd0:amd64 (229-4ubuntu21, 229-4ubuntu21.1),
grub-common:amd64 (2.02~beta2-36ubuntu3.15, 2.02~beta2-36ubuntu3.16),
apt:amd64 (1.2.24, 1.2.25),
libparted2:amd64 (3.2-15, 3.2-15ubuntu0.1),
libmount1:amd64 (2.27.1-6ubuntu3.3, 2.27.1-6ubuntu3.4),
util-linux:amd64 (2.27.1-6ubuntu3.3, 2.27.1-6ubuntu3.4),
libnuma1:amd64 (2.0.11-1ubuntu1, 2.0.11-1ubuntu1.1),
grub2-common:amd64 (2.02~beta2-36ubuntu3.15, 2.02~beta2-36ubuntu3.16),
udev:amd64 (229-4ubuntu21, 229-4ubuntu21.1),
resolvconf:amd64 (1.78ubuntu5, 1.78ubuntu6),
libapt-pkg5.0:amd64 (1.2.24, 1.2.25),
grub-pc:amd64 (2.02~beta2-36ubuntu3.15, 2.02~beta2-36ubuntu3.16),
libudev1:amd64 (229-4ubuntu21, 229-4ubuntu21.1),
libapparmor1:amd64 (2.10.95-0ubuntu2.7, 2.10.95-0ubuntu2.8),
mount:amd64 (2.27.1-6ubuntu3.3, 2.27.1-6ubuntu3.4),
grub-pc-bin:amd64 (2.02~beta2-36ubuntu3.15, 2.02~beta2-36ubuntu3.16),
gcc-5-base:amd64 (5.4.0-6ubuntu1~16.04.6, 5.4.0-6ubuntu1~16.04.9),
libblkid1:amd64 (2.27.1-6ubuntu3.3, 2.27.1-6ubuntu3.4),
libapparmor-perl:amd64 (2.10.95-0ubuntu2.7, 2.10.95-0ubuntu2.8),
python3-update-manager:amd64 (1:16.04.10, 1:16.04.12),
systemd-sysv:amd64 (229-4ubuntu21, 229-4ubuntu21.1),
libuuid1:amd64 (2.27.1-6ubuntu3.3, 2.27.1-6ubuntu3.4),
libpam-systemd:amd64 (229-4ubuntu21, 229-4ubuntu21.1),
parted:amd64 (3.2-15, 3.2-15ubuntu0.1),
systemd:amd64 (229-4ubuntu21, 229-4ubuntu21.1),
libsmartcols1:amd64 (2.27.1-6ubuntu3.3, 2.27.1-6ubuntu3.4),
apt-utils:amd64 (1.2.24, 1.2.25),
sosreport:amd64 (3.4-1~ubuntu16.04.1, 3.5-1~ubuntu16.04.2),
bsdutils:amd64 (1:2.27.1-6ubuntu3.3, 1:2.27.1-6ubuntu3.4),
apparmor:amd64 (2.10.95-0ubuntu2.7, 2.10.95-0ubuntu2.8),
apt-transport-https:amd64 (1.2.24, 1.2.25),
linux-firmware:amd64 (1.157.15, 1.157.16),
libstdc++6:amd64 (5.4.0-6ubuntu1~16.04.6, 5.4.0-6ubuntu1~16.04.9),
cloud-guest-utils:amd64 (0.27-0ubuntu24, 0.27-0ubuntu25),
libaudit1:amd64 (1:2.4.5-1ubuntu2, 1:2.4.5-1ubuntu2.1)
End-Date: 2018-02-22 05:28:30
以下是 lsblk 的一些输出,可能会有帮助:
matt@crucible:~$ sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
NAME FSTYPE SIZE MOUNTPOINT LABEL
sda 111.8G
├─sda1 ext2 487M /boot
├─sda2 1K
└─sda5 LVM2_member 111.3G
├─charon--vg-root ext4 103.6G /
└─charon--vg-swap_1 swap 7.7G [SWAP]
我非常确定我选择了 grub 窗体中的第一个条目,并且它的标签是“sda”。我还记得第二个条目的标签是“sda1”。但这让我觉得很奇怪,因为在我看来,“sda”是一个驱动器的名称,而“sda1”是该驱动器上一个分区的名称。我搞糊涂了。
答案1
嗯,通常我们更喜欢一次只回答一个问题。但今天对你来说...
1) 确实如此,某种程度上。您可以随时打开新的终端窗口或跳转到不同的 TTY 或打开新的 SSH 会话。如果您知道如何使用命令dpkg-reconfigure
,您可能可以再次找到该屏幕。
2) 如果您按 CTRL+C(中止)安装,系统将只是缠着您明天再升级。系统会一直缠着您,直到您同意,直到您 apt-pin 软件包,或者直到您卸载缠着您的软件包。通常,如您所知,最好的选择是安装升级。
3) 和 4) 看起来基本上是同一个问题。如果您将 GRUB 安装到错误的分区(非启动分区),则可以修复。
在关闭系统测试新 GRUB 之前,请确保备份数据,并确保您手边有 LiveUSB。正如墨菲定律所说,这些基本的预防措施决定了最终结果会是一无所获还是一个非常不愉快的下午。
答案2
sda
是您的情况下引导加载程序安装的正确位置。
您的输出lsblk
表明您的系统是以传统模式(旧的 MBR 分区方案)安装的。
安装引导加载程序意味着sda
将其安装在驱动器的主引导记录中(驱动器的第一个扇区)。您需要它来引导您的系统。
如果您将引导加载程序安装到分区(例如sda1
),则引导加载程序将安装在分区的第一个扇区中,您无法直接从此位置引导。如果您安装了多个操作系统,则将引导加载程序安装到分区是有意义的,因此其中一个操作系统的引导加载程序位于 MBR 中,其他操作系统的引导加载程序位于其 PBR(分区引导记录)中,并且可以链式加载。