如何运行 update-grub?

如何运行 update-grub?

我进入 Live CD 并激活终端。然后,我输入gksu nautilus以获得对根目录的临时访问权限。管理器窗口打开后,我单击文件系统并导航到目录/etc/default/grub。然后我双击 Grub 文件以对和进行TIMEOUT更改TIMEOUT_QUIET

修改完成后我保存了文件。然后我回到终端模式并输入:

gksu update-grub

我收到的错误信息是:

找不到 / 的设备(/dev 是否​​已安装?)

我现在不知道该怎么做。我该如何update-grub更新更改?提前感谢您的帮助。请非常详细和具体地回答我的问题,因为我对这个环境完全陌生。

答案1

第 1 阶段 - 注意:不要使用 Live CD。

  • 在你的 Ubuntu 中打开一个终端(同时按下Ctrl+ Alt+ )T
  • 类型gedit admin:///etc/default/grub
    这将运行文本编辑器编辑,如果您使用另一个,只需输入它的名称,而不是gedit
  • 进行您想要的更改并保存。
  • 关闭 gedit。
    您的终端应该仍然处于打开状态。
  • 在终端中输入sudo update-grub,等待更新完成。
  • 重新启动计算机。

第 2 阶段 - 登录系统后

  • 再次打开终端(Ctrl++ AltT
  • 在终端中输入gksu gedit /etc/default/grub
  • 要在启动时查看 grub 菜单,
    请注释或删除以下行:GRUB_HIDDEN_TIMEOUT=0
    • 要注释,请#在此行开头添加,结果将是#GRUB_HIDDEN_TIMEOUT=0
  • 保存文件。
  • 再次在终端运行sudo update-grub

如果您唯一想要的是在启动时看到 grub 菜单,那么您应该撤消对该文件的先前更改。

答案2

您收到该消息是因为 Live CD 没有安装可写入文件系统。它仅用于试用 Ubuntu 或挽救受损系统。执行 仅适用于sudo update-grub已安装的 Ubuntu 版本,在该版本中,您拥有对底层 GRUB 文件的写入权限(而在 Live CD 上,您没有)。

答案3

您可以在已安装的 Ubuntu 发行版上从实时 CD 执行更新 grub(尽管我认为这适用于任何 [基于 debian?] 的 linux 发行版)。如果您克隆驱动器并已在计算机中安装了新驱动器,则它是“必需的”(可能还有其他方法,但知道这个,我根本不关心它们)。我在这里广泛提到克隆,因为从某种意义上说,更新 grub 步骤是它的一个子集,并且这些方法在实时会话期间具有相同的基础。这种方法也是通过在克隆环境中搜索发现的。如果您不进行克隆,您可以从中获取所需的内容,并且您的流程将得到简化。

我应该在这里限定一下;重要的是克隆,而不是仅仅执行 update-grub:我只在 BIOS 系统上执行过此操作。我还没有在 UEFI 系统上尝试过。UEFI 系统需要一个 FAT 分区来进行引导加载,我还没有测试过这个分区是否应该在克隆复制步骤中随波逐流。我预计它确实会影响实时会话期间合成本机 grub 环境所需的 [bind-]mounting...

本页详细说明如下:http://frugaltech.happystoic.com/ssdlinux。我曾多次使用这种方法,你可以用它无限次地更换硬盘。这样更换物理硬盘就变得如此简单,你很容易把它当成自己的爱好和/或尝试修复别人的电脑。

以下内容可能对您在此处找到的内容进行有用的解释:

  1. Ctrl++用于 Bash 终端并在实时会话期间进入超级用户 shell ( Alt) 。Tsudo -s

  2. 挂载完整的安装驱动器分区(即 [或将成为] 您的永久 Linux 文件系统根目录)。

    2a. 如果硬盘上已存在完整安装,请跳至 (2)。如果您正在克隆:[基于您不进行全新安装的假设,因为在这种情况下这一切都是完全自动的] 如果您的完整安装尚未存在于此分区上,现在是时候简单地

    rsync -a /existing/linux/filesystem/live-mount-point/ /new/linux/filesystem/live-mount-point/ 
    

    [这些挂载点纯粹与实时会话环境有关 - 在 Ubuntu 中它们通常采用“/media/ubuntu/???”的形式] 将其挂载到新驱动器 [分区] 上。

    2b. 其他操作系统的完整安装可以在这里以相同的方式处理。我通常使用基于 Windows 的资源提前将 Windows 分区批量复制到新驱动器,但我也使用 rsync,它适用于 Win XP(假设您支持正确的分区格式,例如 ntfs;我认为实时会话媒体通常包含替代格式支持)。 /如果您要完整命名目标,请小心拼写并在源目录中使用尾随。

  3. 将 live /dev/proc/sys目录绑定安装到您要使用的 [已安装] 永久完整安装分区上的相应目录中。上面链接中详述的脚本使用“for”语句非常优雅地完成了此操作。此外,给出的脚本本身不需要作为脚本执行。它可以从 bash 提示符逐行输入。

  4. chroot永久完整安装分区。完成 (3) 和 (4) 后,系统现在“虚拟驻留在”您的“最终文件系统”中,GRUB 将以相同的方式运行。如果没有这些步骤,grub 将假定您的系统只是一个实时会话,我不知道在这种情况下它具体会做什么,但足以说明这不是期望的结果,至于这一点在本线程的上面已经提到过。

  5. 在与永久安装对应的(驱动器,而非挂载点)上运行 grub-install /dev/sdX(如果是多驱动器 [、多引导] 系统,则为将托管 GRUB 的任何驱动器)。此处的灵活性可能取决于您的年份和 BIOS。据我所知,如果没有必要,运行“grub-install”不会造成任何损害,因此如果我使用这种实时会话方法,我总是会这样做。

  6. 运行 update-grub,它就会像正在运行的系统嵌套在未来的永久分区中一样,发现您可能拥有的所有内核和可启动的操作系统。

  7. 如果您没有物理更改硬盘,请跳至 (5)。否则,请编辑或验证您的 /new/linux/filesystem/live-mount-point/etc/fstab文件以确保您的 [新] 环境的文件系统结构正确。如果您处于此级别,您肯定已经知道如何使用 blkid 来收集 fstab 的 UUID。

    恕我直言:您应该始终在 fstab 中使用 UUID(而不是“dev/sdXY”格式),因为在其自身范围内,它不受物理硬盘重新配置的影响,除了需要逐字更新 UUID 值的程度(例如,如果您将来某个时候为 /home 目录安装额外的硬盘等)。这只是最基本、最强大和最不变的方法。

  8. 退出 chroot,退出 supershell,退出 bash,关机,然后启动没有实时媒体的系统。现在您应该已经到达了您想要的位置。

    重要提示:和的参数 mount 是 与实时会话相对应的chroot目录(通常是挂载点,例如/mnt/??/media/??)。在大多数情况下,完整安装位于其自己的分区中,因此术语“目录”和“挂载点”在这里基本上是同义词。grub-install 的参数是物理驱动器(通常是/dev/sdX,其中“X”是与系统中的驱动器、sda、sdb 等相对应的字母,并且它不应依赖于会话)。

现在您应该已经完成​​了。我使用这种方法同时克隆了各种 Windows(XP 和 7)以及 Ubuntu 和 Puppy,它没有让我失望。我认为您可以使用不同发行版的实时介质(不过,我只使用了不同的 Ubuntu 版本和 Mint),只要它们提供您打算使用的 GRUB 版本即可。您可以使用它移动分区、交换驱动器、合并其他操作系统安装以及克隆到 SSD 或从 SSD 克隆。不过,我只能说它在同一台机器上工作。我假设在您之前的完整安装过程中可能跳过了其他机器可能需要的驱动程序。我的经验法则是,在计算机中切换驱动器需要这种方法,但切换带有驱动器的计算机需要完整的 [重新] 安装。

也许有人可以揭穿这个谎言..?

相关内容