• Grub2中文指南5---重装或移除Grub2


    重新安装 GRUB 2

    有时使用者可能需要移动或是重新安装 GRUB 2。当用户遇到空白屏幕上只有 GRUB 字样,没有提示符号,也没有办法输入指令的时候,就需要重新安装 GRUB 2。这通常发生在开机装置的 MBR 区被修改的时候,例如在安装 Ubuntu 之后才安装 Windows。此外,若用户完全无法开机进入操作系统,甚至无法使用救援模式,那么也许必须要重新完全安装 GRUB 2

    LiveCD 重新安装

    若您无法从 GRUB 2 开机,请参考开机问题及救援模式小节。若需要重新安装,则依照这些程序进行。这里有提出两个方案;两者皆需要从 LiveCD 开机(Ubuntu 9.10, Karmic Koala 或更新版本)。若第一个方案没有作用,就进行第二方案,这会比较复杂且包含更多选项及指令。

    最简易方案 - LiveCD 复制 GRUB 2 档案

    这是一个从故障的 GRUB 2 系统复原的快速及简单方法。会使用终端机来输入指令,而用户必须知道被安装之系统上的装置名称/分割区(sda1, sdb5 等等)。有问题的分割区将会从 LiveCD 来定位及挂载。相关档案接下来会由 LiveCD 来复制到合适的地点及 MBR 中。跟之后的方法比起来,这样需要最少的步骤和较少的指令输入。

    1.       开机进入 LiveCD 桌面(Ubuntu 9.10 或更新版)。

    2.       从选单中选择应用程序,附属应用程序,终端机来启动终端机。

    3.       确认 Ubuntu 安装之分割区。fdisk 的选项「-l」是一个小写的「L」。

    sudo fdisk -l

    若使用者无法确定分割区,可以找一个拥有合适的大小或是格式的。
    执行 sudo blkid 也许能提供更多的信息来协助找到适合的分割区,特别是若分割区有名称标记。装置/磁盘是由 sdX 来指定,X 即为指定的装置。sda 是第一个装置,sdb 是第二个,依此类推。绝大多数的使用者之 MBR 会被安装在 sda,系统中的第一个磁盘。分割区是由 Y 指定。第一个分割区是 1 ,第二个是 2。注意到装置和分割区的计算法是不同的。

    4.       挂载包含 Ubuntu 安装的分割区。

    sudo mount /dev/sdXY /mnt

    范例:sudo mount /dev/sda1 注意:若使用者有单独的 /boot 分割区,必须要挂载到 /mnt/boot 注意:若使用者有单独的 /home 分割区,必须挂载到 /mnt/home。加密的 home 分割区应能正常作业。

    5.       执行下面所列出的 grub-install 指令。这样将会在挂载的分割区上的适当位置重新安装 GRUB 2 档案,以及指定装置上的 MBR

    sudo grub-install --root-directory=/mnt/ /dev/sdX

    范例:sudo grub-install --root-directory=/mnt/ /dev/sda

    6.       重新启动

    7.       sudo update-grub 指令更新 GRUB 2 选单

    8.       若用户想知道为何系统会失败,参考底下的回复后指令小节。

    方案 2 - 从已安装的分割区复制 GRUB 2 档案

    这是一个快速且简单的方法来回复系统损坏的 GRUB 2 档案。有问题的分割区将会从 LiveCD 来定位及挂载。相关档案接下来会由受损系统的 /boot/grub 目录复制到适当的位置以及 MBR 中。这样需要较少的步骤及较少的指令输入,跟之后的 CHROOT 方案比较起来。拥有分散系统分割区的用户,例如单独的 /boot 分割区,或其他特殊情况,使用 CHROOT 方案应该会有比较好的结果。

    1.       开机进入 LiveCD 桌面(Ubuntu 9.10 或更新版)。

    2.       挂载您 Ubuntu 安装所在的分割区。

    a.       从「位置」选单,点选您的 Ubuntu 安装之分割区来挂载。

    Grub2中文指南5---重装或移除Grub2

    o    若未辨识出分割区,找找看有合适的大小或名称的。

    o    一旦挂载后,用户应该会看到 Ubuntu 系统目录例如 /boot

                从选单中的「应用程序」,「附属应用程序」,「终端机」来启动终端机。

                执行如底下说明的 grub-setup -d 指令。这样会重新安装 GRUB 2 档案到挂载分割区的适当位置以及指定装置的 MBR 中。

                 

     .        参考「位置」中的位置列来决定挂载点。将指令中的 XXXX UUID 取代,若分割区并不是挂载在 /media 之下,则用正确的位置取代 /media/XXXX。选定的位置可能是一个 UUID,或是一个名称标签,若用户有自行建立的话(参考注意事项)。

    a.       若位置窗口的样式和图片里的不一样,按下左边的铅笔图标来更改样式。(译者注:这里的图片是旧版 Ubuntu 的样式,在 10.04 以后请按 Ctrl-L 来更改。)

     Grub2中文指南5---重装或移除Grub2

    b.       以鼠标选取 UUID/位置来复制内容。在终端机中按下鼠标中键来贴上。若使用键盘的话,按 CTRL-C 来复制位置并使用 CTRL-SHIFT-V 来贴上至终端机中。

    c.       装置/磁盘是由 sdX 来指定,X 即是指定的装置。sda 是第一个装置,sdb 是第二个装置,余类推。大部分使用者的 MBR 应该都是安装在 sda 中,即是系统中的第一个装置。

    sudo grub-setup -d /media/XXXX/boot/grub /dev/sda

    范例:
    sudo grub-setup -d /media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub /dev/sda

    d.       若使用者收到一个「error: Cannot open /boot/grub/device.map」讯息,加上一个 -m 选项以及 device.map 的路径至指令中,如下:

    sudo grub-setup -d /media/XXXXX/boot/grub -m /media/XXXXX/boot/grub/device.map /dev/sda

    范例:
    sudo grub-setup -d /media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub -m /media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub/device.map /dev/sda

    e.       使用 grub-setup 尚有其他的选项可使用。在终端机中,输入 grub-setup --help 即可列出一份所有选项的说明文件。

    f.        也许您会重复收到「error: Cannot open /boot/grub/device.map」讯息。如果持续发生,试着重新启动。使用 UUID 方法实际上应该会有作用,但会不正确的丢出一个错误讯息。使用名称卷标似乎不会发生这样重复出现错误讯息的问题。

                重新启动

                使用 sudo update-grub 来更新 GRUB 2 选单

                若用户想要查明为何系统开机失败,参考以下的回复后指令小节。
    Ubuntu 9.10
    引进一个新的应用程序,能够简单的指定标签给现存的分割区。从选单中的「系统」,「管理」中执行磁盘公用程序来使用。

    方案 3 - CHROOT

    此方案安装会使用 chroot 指令来存取受损系统的档案。一旦执行了 chroot 指令,LiveCD 会将损坏系统的 / (根目录)当作是目前自己所使用的。在 chroot 环境中执行的指令会影响受损系统的文件系统,而不是 LiveCD 的。

    1.       开机进入 LiveCD 桌面(Ubuntu 9.10 或更新版)。注意 LiveCD 必须要与您现在欲修复系统的版本相同 - 无论 32-bit 或是 64-bit(否则 chroot 会失败)。

    2.       开启终端机 - 应用程序,附属应用程序,终端机

    3.       确认您的标准系统分割区 - (选项是小写的「L」)
    sudo fdisk -l

    o    若您不确定,执行
    df -Th
    找到正确的磁盘容量及 ext3 ext4 格式。

    4.       挂载您的标准系统分割区

    o    用正确的分割区替换:sda1, sdb5 等等。

    sudo mount /dev/sdXX /mnt #范例:sudo mount /dev/sda1 /mnt

    5.       若您有独立的 /boot 分割区:

    o    sdYY /boot 分割区的位置(例如 sdb3

    o    sudo mount /dev/sdYY /mnt/boot

    6.       挂载重要的虚拟文件系统:
    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /dev/pts /mnt/dev/pts
    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys

    7.       Chroot 至您的标准系统装置:
    sudo chroot /mnt

    8.       若系统中没有 /boot/grub/grub.cfg 或其内容不正确,使用以下指令重建
    update-grub

    9.       重新安装 GRUB 2

    o    以正确装置替换 - sda, sdb, 等等。不要指定分割区号码。

    grub-install /dev/sdX

    10.   验证安装(使用正确的装置,例如 sda不要指定分割区):
    sudo grub-install --recheck /dev/sdX

    11.   退出 chroot:按下键盘之 CTRL-D

    12.   卸除虚拟文件系统:
    sudo umount /mnt/dev/pts
    sudo umount /mnt/dev
    sudo umount /mnt/proc
    sudo umount /mnt/sys

    o    若您有挂载独立的 /boot 分割区:
    sudo umount /mnt/boot

    13.   卸除 LiveCD /usr 目录:
    sudo umount /mnt/usr

    14.   卸除最后的装置:
    sudo umount /mnt

    15.   重新启动。
    sudo reboot

    复原后指令

    一旦用户可以开机至正常作业的系统,可试着查明为何系统之前开机失败。以下指令也许对找到及/或修复问题有所帮助。

    ·         重新整理 /boot/grub/grub.cfg 中可用的装置和设定

    ·          

    o    sudo update-grub

    ·         查询启动加载程序位置。

    ·          

    o    grub-probe -t device /boot/grub

    ·         安装 GRUB 2 sdX 分割区的 MBR 中(sda, sdb 等等。)

    ·          

    o    sudo grub-install /dev/sdX

    ·         重新验证安装。(sda, sdb 等等。)

    ·          

    o    sudo grub-install --recheck /dev/sdX

    更改或移动 GRUB 2

    更改 GRUB 2 安装装置或启动文件的指令的方式是以 root 身份执行 grub-install。此指令允许用户藉由设定根(ROOT)目录、预载模块、执行特定配置文件案或其他方式来修改安装。当执行时,grub-install 可能会执行一或多个其他指令,例如 grub-probegrub-mkimage grub-setup。这里是当执行 grub-install 时一些需要考虑的:

    ·         在一般情况下应该使用 grub-install 指令而不是 grub-setup。当需要的时候 grub-install 会呼叫 grub-setup

    ·         此指令应指定一装置,当执行时将会安装 GRUB 需要的档案至指定的装置上。(例如:sudo grub-install /dev/sda

    ·         若用户试图在执行此指令时指定一个分割区,(例如:sudo grub-install /dev/sda6)会发出一个警告讯息。指定一个分割区是不被建议采用的而被列在阻挡清单(blocklists)中,阻挡清单是开发者认为不可靠的部份。然而还是有复写此建议的选项,若用户依然想要如此做的话。

    ·         grub-install 可用选项列表可在终端机中执行 grub-install --help 来显示。

    ·         grub-install 之联机帮助文件(man page)目前尚不会显示所有可用的选项。

     

    移除 GRUB 2

    回复至传统 GRUB

    若使用者选择回复至传统 GRUB0.97),以下步骤将移除 GRUB 2 并安装 GRUB

    命令行模式提供较清楚干净的移除和重新安装。然而 Synaptic 也可以做到新增和移除套件,某些步骤依然要进入终端机来达成。

    1.       开启终端机:应用程序(Applications),附属应用程序(Accessories),终端机(Terminal)。

    2.       选用:备份 GRUB 2 目录和档案。

    o    sudo cp /etc/default/grub /etc/default/grub.old

    o    sudo cp -R /etc/grub.d /etc/grub.d.old

    o    sudo cp -R /boot/grub /boot/grub.old

    3.       移除 GRUB 2

    o    sudo apt-get purge grub2 grub-pc

    o    此时在其他启动加载程序安装前,系统将无法开机。

    o    当套件移除后,许多档案依然会留在「/boot/grub」下

    4.       安装 GRUB 0.97

    o    sudo apt-get install grub

    5.       grub 安装后,使用者依然需要执行以下两个指令来建立 menu.lst stage1/stage2 档案。

    a.       sudo update-grub

    §  产生 menu.lst

    §  提示时选择「Yes」。

    b.       sudo grub-install /dev/sdX

    §  选择正确的装置(sdasdb 等),一般而言就是 Ubuntu 安装的那个装置

    §  /boot/grub 中建立 stage1/stage2 档案并写入至主启动扇区(MBR)。

                重开机。

    若使用者在重新启动时收到一个「Unrecognized device string Error 11」错误讯息,参考解决 Unrecognized device string Error 11 小节,有关如何编辑选单和使系统可开机的指令。

    外接磁盘安装及「grub-pc」更新

    Launchpad Bug 496435

    安装 Ubuntu 在外接磁盘上可能会导致问题产生,因为 grub-install 某些状况下会使用装置名称(例如 sda, sdb)而不是 UUID。若在连接到其他机器的时候进行 grub-pc 更新,那么可能会将更新写入至错误的装置并使得计算机无法开机。

    有一个暂时解决方案在上面的错误回报连结中有提供。

    外接磁盘安装及 MBR 选择

    Launchpad Bug 414996

    当安装 Ubuntu USB 磁盘中时,GRUB 2 有可能会写入至硬盘的 MBR 中,或是分开至硬盘及 USB 磁盘中(而不是全部在 USB 磁盘中)。这样可能会使得主磁盘无法开机。

    暂时解决方案:在安装过程的最后一个步骤,有一个「进阶(Advanced)」按钮,可以允许用户选择安装的位置。更多细节请参考错误回报。

    开机分割区所在的逻辑卷册(Logical Volume)位于包含一份系统快照(snapshot)的卷册群组内(Volume Group

    Launchpad Bug 563895

    当您的开机分割区(放置 /boot)是 LV,请确认不要有任何的 LVM 快照在包含的 VG 中。在重新启动时会让您的系统无法开机,进入「grub rescue>」环境中并显示以下讯息:「error: no such disk.
    grub-rescue
    接口在这里无法帮助您,因为所有的模块(特别是 lvm)皆无法存取。您必须从其他安装媒体中开机并手动移除与 boot 分割区在同一个 VG 里所有的快照。
    若您的服务器在远程数据中心,这个问题会超级麻烦,因为问题的原因无法简单的查到,且修复系统可能会很困难。
    虽然此问题会在即将到来的 Maverick Meerkat 10.10 版本中修复,然而目前的 Lucid Lynx LTS 10.04 却是有受到影响的。
    一个暂时解决方法是将 Ubuntu /boot 安装在一个分开的非 LVM 分割区中,如果您常常使用 LVM 的快照功能的话。
    讽刺的是如果您是个细心的人,会在更新前(或是可能的重新启动前)制作一份 LVM 快照,反而会引发这个 bug

    由序列式控制台(Serial Console)开机

    若您想要 GRUB 透过序列式连线作业,您需要去掉在 /etc/default/grub 档案中 GRUB_TERMINAL 的批注,并设定为 serial(取代预设的 console)。默认的序列式控制台设定将会作业在第一个串行端口(ttyS0),以 9600 bit/s 传输速率及 8 data bits1 stop bit,无同位检查。

    若您想使用其他串行端口,或是您的控制台使用不同的设定,您必须加入一行 GRUB_SERIAL_COMMAND 来为 serial 指令指定额外的参数。GRUB 2 使用的 serial 指令与传统 GRUB 对应的部份语法相同(文件在这里)。例如,一个 4800 bit/s 序列联机使用 7 data bits1 stop bit 和偶数校验:

    GRUB_SERIAL_COMMAND="serial --unit=0 --speed=4800 --word=7 --parity=even --stop=1"

     

    连结

    以下皆为英文参考文件连结。

    GrubHowTo
    Grub 2 (Ubuntu Wiki)

    外部连结

    GNU GRUB
    GNU GRUB 2 Manual
    Illustrated Dual Boot HomePage
    Mac OS X (XNU) Support
    Mac OS X Boot Snow Leopard
    http://grub.gibbit.com/Theme_format(主题)

  • 相关阅读:
    Arrow-一个最好用的日期时间Python处理库
    悲观锁与乐观锁
    python中super的使用
    jquery的html,text,val
    spring与mybatis三种整合方法
    Android 在线SDK更新 和谐被墙解决
    转【】浅谈sql中的in与not in,exists与not exists的区别_
    tableview 里面的 必须配套使用的方法
    IOS发送Email的两种方法-备
    iOS基本的发短信和打电话调用
  • 原文地址:https://www.cnblogs.com/lixuebin/p/10814596.html
Copyright © 2020-2023  润新知