近来在研究Grub,发现了一个很好玩的东西。
因为Grub的测试需要不断开关机来测试数据是否正确。
为了保护我那心爱的老爷机,我决定在虚拟机上面测试Grub。
可是,我将Grub都写在U盘上,而VMware , VirtualBox不支持从U盘启动Grub。
折腾了很久后。。。。。。。
我想出了一个办法,因为虚拟机都是划出一块文件,然后在上面做虚拟的硬盘设备。
如果我直接在这个文件上面分区,写MBR等信息,虚拟机不就可以直接启动这上面的Grub吗。
然后,我又继续折腾了很久。。。。
我发现不是所有的虚拟机格式都支持直接将数据写在一个文件上面的。
我测试的格式有vmdk,vhd等格式。
我发现只有vhd这种格式相当直接,它的放置方式为将文件看成是一个硬盘来直接操作,上面根本就没有写上额外的虚拟机信息。
所以,这种格式我们可以直接拿来使用。
首先,我们先将这个文件格式化。
mkfs.msdos mx.vhd
然后,将它挂载成一个硬盘,并挂到/mnt目录下面
mount -o loop mx.vhd /mnt
最后,写入grub引导就可以了
grub-install --boot-directory=/mnt /dev/loop0 --force
然后,开机,哈哈,就这样,看到了我心爱的Grub菜单了。
整个过程中,我根本不需要对文件进行解压等任何操作,就可以对里面进行格式化,增删文件,写MBR等任何操作。
而且,这种办法有个好处就是,你在挂载目录里面进行的任何操作,都能直接与虚拟机内的