USB驱动器上的GRUB-添加操作系统


9

一些背景:

  • 来自Windows背景(尽管我熟悉Ubuntu等),并使用Windows 7计算机来完成此任务
  • 已成功将GRUB安装到USB驱动器(8 GB FAT32驱动器)的MBR中:
  • 在驱动器上创建了一个基本结构:/ boot / grub,/ boot / img,/ boot / kernel

题:

我有一些基本的,初学者的问题,但是我在通过Google / StackExchange等找到答案时遇到了问题。

  • 我知道/ boot / img / [SystemName]文件夹将为特定系统存储映像,该系统可能使用存储在/ boot / kernel目录中的各种(或相同)版本的Linux内核(至少,这就是我的方式)想要设置)
  • 但是,大多数这些系统在其目录中仅包含一个名为“ linux”的内核(未说明版本)。我可以找出所有这些内核都使用哪个内核,但是将内核本身复制到/ boot / kernel的第一个地方是什么?
  • 获得内核之后,我想剩下的大部分工作就是将设备复制到/ boot / img /并在menu.lst中创建正确的条目,对吗?一旦我可以引用内核,就可以逐个系统地执行此操作。

总体的目标:

我试图创建一个8GB的USB闪存驱动器,该驱动器将允许我从GRUB引导菜单引导多个操作系统。要添加或减少OS,我只需要将适当的文件复制到/ boot / img / [SystemName]和适当的/ boot / kernel文件夹,然后编辑menu.lst文件。因此,第一步是要找到许多这些OS共享的内核,因为我希望减少重复。


添加内核后您想要拥有什么?您是否需要可以从中启动的有效操作系统?
phunehehe

@phunehehe,谢谢!我已经更新了帖子,以包含我的总体目标。
SeanKilleen's

听起来您正在尝试将各种发行版的LiveCD映像转储到USB驱动器上,然后才能启动它们。它是否正确?
Wodin 2011年

@沃丁:从本质上讲,是的。LiveCD(但具有写功能,因为它将存储在可写媒体上),并为我想要的所有发行版/工具提供了一个统一的引导加载程序。
SeanKilleen

Answers:


4

您正在尝试实现的是扩展引导技术:)但是,尽管我不了解完整的演练,但我认为这是可能的。

首先,就像前面所说的,发行版有非常不同的要求。其次,另一方面,还可以找到需要最低要求的发行版。

我建议使用GRUB4DOS作为引导程序。请参阅此链接,了解如何将其与USB一起使用(因为它具有find --set root-命令,如果您拥有USB之类的移动设备,则该命令很重要)。

然后,您必须决定要使用多少个分区。标准的“完全安装”始终位于单个分区中。因此,如果您有一个8 GB的USB记忆棒并带有4 GB的分区(允许最小的安装),则您将只能使用2个不同的“完整安装”主要发行版,例如Debian或Fedora。

但是,有一些小型且专门的Linux发行版。例如,“ Puppy Linux”非常小,并且具有特殊的“节俭安装”模式。它具有多种风格(例如,MacPup尝试实现诸如台式机之类的Apple或64位Linux的Fatdog64)。

在这种“节俭安装”模式下,它仅使用1个目录,并且可以与硬盘(或USB)上的现有Linux或Windows并行安装。我确定还有其他支持类似模式的发行版。

由于Puppy Linux很小(<150 MB),并且假设您为每次安装都保留了一个小的保存文件(512 MB),因此可以轻松地在USB记忆棒上安装10种不同的操作系统。您甚至可以使用更小的Linux(Slitaz,Tinycore)。

例如,我从当前的PC安装中附加menu.lst(GRUB4DOS)文件,前8个条目都是hd0,2上不同的Puppy Linux安装(即,第一个硬键上的第三个分区),然后最小Debian安装在一个小的额外分区中,也安装在原始Windows-XP中。

timeout=10
default=0  

  title Linux Buero (on /dev/sda3)
  root (hd0,2)
  kernel /puppy431-de/vmlinuz psubdir=puppy431-de pkeys=de ro vga=normal
  initrd /puppy431-de/initrd.gz

  title Live CD build (on /dev/sda3)
  root (hd0,2)
  kernel /puppylivecdbuild/vmlinuz psubdir=puppylivecdbuild ro vga=normal
  initrd /puppylivecdbuild/initrd.gz

  title sage developement(on /dev/sda3)
  root (hd0,2)
  kernel /Sage46dev/vmlinuz psubdir=Sage46dev pfix=nocopy ro vga=normal
  initrd /Sage46dev/initrd.gz

  title sage developement test and fun
  root (hd0,2)
  kernel /Sage-test/vmlinuz psubdir=Sage-test pfix=nocopy,noram ro vga=normal
  initrd /Sage-test/initrd.gz

  title Lupq 511
  find --set-root --ignore-floppies /lupq511/initrd.gz
  kernel /lupq511/vmlinuz psubdir="lupq511" pfix=nocopy pkeys=de ro vga=normal
  initrd /lupq511/initrd.gz 

  title Lupu 520 - New kid on the block
  find --set-root --ignore-floppies /lupu-520/initrd.gz
  kernel /lupu-520/vmlinuz psubdir="lupu-520" pfix=nocopy pkeys=de ro vga=normal
  initrd /lupu-520/initrd.gz 

  title wary beta (on /dev/sda3)
  root (hd0,2)
  kernel /wary/vmlinuz psubdir=wary ro vga=normal
  initrd /wary/initrd.gz

  title spup (on /dev/sda3)
  root (hd0,2)
  kernel /spup/vmlinuz psubdir=spup ro vga=normal
  initrd /spup/initrd.gz

  title Debian (on /dev/sda2)
  find --set-root --ignore-floppies /initrd.img
  kernel /vmlinuz root=/dev/sda2 ro
  initrd /initrd.img

  title Windows NT/2K/XP\nStart Windows if installed on HDD
  fallback 7
  find --set-root --ignore-floppies /ntldr
  chainloader /ntldr

boot

USB上的menu.lst看起来类似,find --set-root --ignore-floppies /lupq511/initrd.gz 如果使用USB,GRUB4DOS命令 (在所有驱动器中查找该文件)可能非常有用,因此您不必为驱动器使用固定条目。

通过以上信息,您可以对原始问题发表一些评论:

问:*我知道/ boot / img / [SystemName]文件夹将存储特定系统的映像,该系统可能使用存储在/ boot / kernel目录中的各种(或相同)Linux内核版本(至少,这就是我要设置的方式)

答:我不确定这是否行得通,因为大多数主要发行版都希望拥有其分区的专有权,并为其文件安装特定的目录结构。在我看来,最好遵循默认设置并提供分发期望的内容,即有些需要独占分区,有些只对共享分区上的目录感到满意。我不是说不可能以非默认的方式将多个操作系统安装到1个分区,但是这是麻烦的事,我认为这对Linux新手来说不切实际。我在文章底部提到了一个可能的解决方法(“类似Wubi的安装”)。

问:*但是,大多数这些系统在其目录中只有一个名为“ linux”的内核(没有说明版本)。我可以找出所有这些内核都使用哪个内核,但是让内核自己复制到/ boot / kernel的最佳位置是什么?

答:我认为内核应该准确地放在发行版通常包含它们的地方。无需将它们存储在单独的/ boot / kernel文件夹中,并且我也不建议尝试在发行版之间共享它们。内核的存储空间极小(例如2-3 MB)。确实有很多版本和子版本,有时甚至有特定的补丁应用于发行版的内核。将插件插入另一个/未试用的内核是不需要的实验。

问:*获得内核之后,我想剩下的大部分是将设备复制到/ boot / img /并在menu.lst中创建正确的条目,对吗?一旦我可以引用内核,就可以逐个系统地执行此操作。

答:如前所述,最好为需要它们的发行版创建单独的分区,并在自己的文件夹中混合一些不太贪婪的发行版。将内核,initrd和发行版的其余部分作为一个单元来对待。

最后一个想法。如果您不想使用其他分区,则可以尝试为发行版安装“ WUBI”之类的程序,要求完全安装到其自己的分区。这意味着您可以在USB上创建带有其自己的ext2 / ext3文件系统的大文件,然后将它们挂载为“驱动器”并将OS安装到其中。(我称它为WUBI,因为这是最著名的应用程序)。

以下应该是Grub4dos menu.lst条目,以启动“ Wubi安装”。

# Add the ntfs module - just needed for Installation on a Windows Partition
insmod ntfs
# Set root (normally would be sda1, or hd0,1 Change as necessary
set root=(hd0,1)
loopback loop0 /ubuntu/disks/root.disk
set root=(loop0)
linux /boot/vmlinuz root=/dev/sda1 loop=/ubuntu/disks/root.disk ro
initrd /boot/initrd/initrd.img
boot

这里

您会看到,有2个“ set root”命令,包含Linux的“ root.disk”之后的第二个被挂载为loop0。

我希望我能提出一些想法,尽管这不是完整的演练。


抱歉,由于Wubi错误,我获得了第二个指向Grub条目的链接(因为这是我的第一篇文章,我的第二个链接是“受垃圾邮件保护的”)。正确的链接是:blogold.chinaunix.net/u3/113851/showart_2311251.html
Emil WidmannEmil 2011年

1

这是两个指南:

我认为每个内核都使用单独的分区。

/boot/grub/menu.lst ”中的条目是这样的:

title Unity-2010 -- With Persistence
kernel (hd0,0)/isolinux/vmlinuz vga=788 livecd=livecd fromusb
root=Label=Unity-2010 changes_dev=LABEL=Unity-2010 acpi=on fstab=rw,noauto
initrd (hd0,0)/isolinux/initrd.gz

title Unity-2010 -- No Persistence
kernel (hd0,0)/isolinux/vmlinuz vga=788 livecd=livecd fromusb
root=Label=Unity-2010  acpi=on fstab=rw,noauto
initrd (hd0,0)/isolinux/initrd.gz

0

这实际上取决于您放置的发行版。他们中的一些人在initramfs中做一些令人讨厌的事情,因此变得困难。一些现场发行版会搜索标签,一些会搜索uuid。您无法提供。

解决方案并不容易,您应该为现场发行版构建新的自定义ramdisk。

我希望我没看错:D


0

当然,您将需要某种用户空间来与这些内核一起使用。(程序,配置,工作。)传统上,您将对每个单独的OS 至少使用一个分区,并且GRUB分区本身将作为/ boot挂载(因此,实际上,boot不会作为该目录的子目录)分区;它将是根目录,其中grub /是子目录。)

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.