如何检查grub2实际在哪个驱动器上安装了MBR?


17

我正在使用Debian / Squeeze系统(其历史至少可以追溯到Woody),该系统已作为Squeeze升级的一部分升级到grub2。一切正常,但是我要弄乱磁盘配置。

当前,该机器使用2个80GB驱动器,它们带有RAID1的/,/ home和/ boot分区(还有另外一对具有RAID1的“ / data”和两个交换的驱动器,以防万一有人想知道交换在哪里) ,但我没有碰那些)。

我添加了2个130GB的SSD,将其分区为至少与80GB驱动器上的分区一样大,并打算通过扩展RAID1使其包含新的SSD1,等待同步,然后删除旧的磁盘,来切换到新的SSD驱动器。从阵列驱动器,因此仅保留SSD(然后扩展文件系统)。但是mdadm / ext3争吵不是这个问题。

那将给我留下2个过时的80GB(IDE)驱动器,我想从计算机中删除它们。我担心的是,删除它们将需要一些关键的MBR。如何确保计算机可引导?

进一步来说:

  • 当我进行Squeeze升级时,我记得有一些关于grub2应该安装到哪个驱动器的选择(我选择了默认驱动器,即所有驱动器)。但是,SSD当时不在计算机中。我如何重新运行此程序以将grub安装在SSD MBR上?(我猜这是某些软件包的dpkg-reconfigure)。

  • 如何找到grub2认为安装在哪个驱动器上?可悲的是,这些天/ boot / grub /下几乎有200个文件!在哪里看?另外,/ boot / grub / device.map.auto当前仅列出3个驱动器(80GB中的2个,但其他驱动器对中只有一个,而没有SSD)似乎有点奇怪。我如何获得最新消息?(更新:那是一条红色的鲱鱼; device.map.auto似乎是几年前的遗物;在grub-mkdevicemap的更新中,device.map看起来很明智。我认为这方面的偏执源自于旧的主板的BIOS,重新排序GRUB看到的设备订单)。

结果:一切顺利,现在我可以使用两个旧的80GB IDE驱动器,以及一个运行快速且快速启动的系统,该系统运行在RAID1固态硬盘上,所有文件系统的大小均已调整为新分区大小。我正在寻找的另一个“缺少Grub难题的部分”是dpkg-reconfigure grub-pc哪个提示哪个磁盘保持MBR。Aaron的回答实际上是最能使我确信这正在按预期工作的方法,因此接受了该回答。

Answers:


17

MBR是512字节,因此可以快速查看GRUB是否存在...

dd if=/dev/sda bs=512 count=1 | xxd

这将转储MBR,我在字节0x17F = 383中看到了“ GRUB”。

dd if=/dev/sda bs=1 count=4 skip=383

当我这样做时,它会打印' GRUB',然后dd输出。

您可以将其包装在bash for循环中,或将其包装在更多驱动器上。如果您不想手动操作。


4
只是很小的补充-由于GRUB的位置可能会因版本而异,因此可以使用dd if=/dev/sda bs=1 count=512 | grep -aob GRUB。这将返回标记在引导扇区内的位置。
亚历山德罗·桑蒂尼

16

引导过程中有几个步骤(我在描述传统的PC BIOS):

  1. BIOS读取引导磁盘的第一个扇区(512字节)。
  2. 该第一扇区中的代码通过BIOS接口在固定位置读取更多数据和代码。此BIOS接口仅公开两个硬盘:从中读取第一个扇区的磁盘为0,而磁盘1为另一个磁盘,如果有两个以上,则很难预测。引导扇区包含一个字节,该字节指示其他数据位于哪个硬盘上。这是包含的磁盘/boot/grub
  3. 在上一阶段加载的代码可以理解分区,文件系统和其他高级概念。数据包括一个文件系统位置(即类似的字符串(hd0)/boot/grub),该位置确定在何处查找grub.cfg以及其他Grub模块。
  4. grub.cfg 通常执行以显示菜单并启动操作系统。

引导扇区由生成grub-setup,通常通过调用grub-install。引导扇区结束于您在grub-installor grub-setup命令行上指定的任何磁盘(使用Linux语法)。您可以通过运行来检查磁盘上是否有引导扇区file -s /dev/sda。由于要添加新磁盘并要从中引导,因此需要grub-install在新磁盘上运行。grub-install在同一磁盘上多次运行是无害的。

困难的部分在上面的步骤2中。如果可能的话,将Grub(即/boot/grub目录)放在BIOS引导盘上(或从另一个方向进行操作,告诉BIOS从磁盘所在的位置引导/boot/grub)。这就是device.map发挥作用的地方。确保已将(hd0)其映射到包含的磁盘/boot/grub,然后grub-install在该磁盘上运行。

如果您的两个磁盘处于软件RAID-1配置中,则将具有相同的引导扇区。这是理想的行为:如果一个磁盘(即BIOS引导磁盘)发生故障,则从另一磁盘引导将可以正常工作(因为它们在相同的相关位置包含相同的字节)。如果您仅镜像了某些分区,则安装引导扇区只会影响其中一个磁盘。grub-install更改device.map(hd0)与包含的第二个镜像副本的磁盘关联后,应在第二个磁盘上再次运行/boot/grub

第3步非常复杂,但是通常可以直接使用。在第4步,Grub通过UUID查找文件系统或查找命名文件,因此您不再需要担心指定磁盘的各种方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.