GRUB na unidade USB - adicionando sistemas operacionais

9

Alguns antecedentes:

  • Vindo de grande parte do background do Windows (embora eu esteja familiarizado com o Ubuntu etc.) e usando uma máquina Windows 7 para concluir esta tarefa
  • O GRUB foi instalado com sucesso no MBR da unidade USB (unidade de 8 GB FAT32):
  • Criaram uma estrutura básica na unidade: / boot / grub, / boot / img, / boot / kernel

Questão:

Tenho algumas perguntas básicas para iniciantes, mas para as quais tive problemas para encontrar respostas através do Google / StackExchange etc.

  • Entendo que a pasta / boot / img / [SystemName] armazenará a imagem para um sistema específico, que pode usar várias versões (ou as mesmas) de kernels do Linux armazenadas no diretório / boot / kernel (pelo menos, é assim que eu gostaria de configurá-lo)
  • No entanto, a maioria desses sistemas apenas possui um kernel em seus diretórios chamado "linux" (não informando a versão). Posso pesquisar qual kernel todos eles usam, mas qual é o melhor lugar para que os próprios kernels copiem para / boot / kernel?
  • Depois de obter os kernels, imagino que o resto esteja copiando o dispositivo para / boot / img / e criando a entrada correta no menu.lst, correto? Eu posso fazer isso sistema por sistema, uma vez que consigo fazer referência aos kernels.

Objetivo geral:

Estou tentando criar uma unidade flash USB de 8 GB que me permitirá inicializar vários sistemas operacionais a partir de um menu de inicialização do GRUB. Para adicionar ou subtrair sistemas operacionais, eu gostaria apenas de copiar os arquivos apropriados para uma pasta / boot / img / [SystemName] e / boot / kernel conforme apropriado e, em seguida, edite o arquivo menu.lst. Portanto, este primeiro passo é encontrar os kernels que muitos desses sistemas operacionais compartilham, pois espero reduzir a duplicação.

SeanKilleen
fonte
E o que você quer ter depois de adicionar o kernel? Você quer um sistema operacional em que possa inicializar?
phunehehe
@phunehehe, obrigado! Atualizei a postagem para incluir minha meta geral.
SeanKilleen
Parece que você está tentando despejar imagens do LiveCD para várias distribuições em uma unidade USB e depois poder inicializá-las. Isso está correto?
Wodin
@ Wodin: Essencialmente, sim. LiveCD (mas com capacidade de gravação, pois será em mídia gravável), com um gerenciador de inicialização unificado para todas as distribuições / ferramentas que eu desejar.
precisa saber é o seguinte

Respostas:

4

O que você está tentando alcançar é ampliar a tecnologia de inicialização :) No entanto, acho que é possível, embora não tenha conhecimento suficiente para dar uma explicação completa.

Primeiro, como dito anteriormente, as distros têm requisitos muito diferentes. Segundo, a coisa boa, por outro lado, você também pode encontrar distros que precisam de requisitos mínimos.

Eu recomendaria usar o GRUB4DOS como carregador de inicialização. Veja este link como usá-lo com USB (porque possui o comando find --set root -, que é importante se você tiver um dispositivo móvel como USB).

Então você tem que decidir quantas partições você usará. A "instalação completa" padrão está sempre em uma única partição. Portanto, se você tiver um pendrive USB de 8 GB e tiver uma partição de 4 GB (o que permite uma instalação mínima), você estará limitado a 2 "Instalações completas" diferentes das principais distros, como Debian ou Fedora.

No entanto, existem algumas distribuições Linux pequenas e especializadas. Por exemplo, "Puppy Linux" é muito pequeno e possui um modo especial "Instalação Frugal". Ele vem em vários sabores (por exemplo, existe o MacPup com tentativas de implementar uma Apple como o Desktop ou o Fatdog64, que é um Linux de 64 bits).

Neste modo de "instalação Frugal", ele usa exatamente 1 diretório e pode ser instalado em paralelo com um Linux ou Windows existente no disco rígido (ou USB). Estou certo de que existem outras distribuições que suportam modos semelhantes.

Como o Puppy Linux é pequeno (<150 MB) e supondo que você reserve um pequeno arquivo de salvamento para cada instalação (512 MB), você pode instalar facilmente 10 sistemas operacionais diferentes no pendrive. Existem Linux ainda menores (Slitaz, Tinycore), que você pode usar.

Como exemplo, eu anexo o arquivo menu.lst (GRUB4DOS) da minha instalação atual do PC. As primeiras 8 entradas são todas diferentes da instalação do Puppy Linux no hd0,2 (ou seja, a 3ª partição no 1º disco rígido), então há um mínimo Instalação do Debian em uma pequena partição extra e também no Windows XP original.

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

O menu.lst no seu USB pode parecer semelhante, o comando GRUB4DOS find --set-root --ignore-floppies /lupq511/initrd.gz (procura esse arquivo em todas as unidades) pode ser muito útil se você usar USB, para que você não precise usar entradas fixas na sua unidade.

Com as informações acima, alguns comentários sobre suas perguntas originais:

P: * Entendo que a pasta / boot / img / [SystemName] armazenará a imagem para um sistema específico, que pode usar várias versões (ou as mesmas) dos kernels do Linux armazenadas no diretório / boot / kernel (pelo menos, é assim que eu gostaria de configurá-lo)

R: Não tenho certeza se isso vai funcionar, pois a maioria das principais distribuições espera ter direito exclusivo de sua partição e instalar uma estrutura de diretórios específica para seus arquivos. Na minha opinião, é melhor respeitar a configuração padrão e fornecer o que a distribuição espera, ou seja, alguns precisam de uma partição exclusiva, outros ficarão satisfeitos com apenas um diretório em uma partição compartilhada. Eu não digo que não é possível instalar vários SOs para 1 partição de uma maneira não padrão, mas está implorando por problemas e, na minha opinião, não é prático para um iniciante no Linux. Uma possível solução alternativa mencionada na parte inferior da minha postagem (instalações "do tipo Wubi").

P: * No entanto, a maioria desses sistemas apenas possui um kernel em seus diretórios chamado "linux" (não informando a versão). Posso pesquisar qual kernel todos eles usam, mas qual é o melhor lugar para fazer com que os próprios kernels copiem para / boot / kernel?

A: Eu acho que os núcleos devem ir exatamente para onde as distribuições normalmente os têm. Não há necessidade de armazená-los em uma pasta separada / boot / kernel, e eu também não recomendaria tentar compartilhá-los entre distribuições. O espaço de armazenamento é mínimo para um kernel (como 2-3 MB). Existem muitas versões e sub-versões e, às vezes, existem até patches específicos aplicados aos kernels das distribuições. Plugin em um kernel diferente / não testado é um experimento desnecessário.

P: * Depois de obter os kernels, imagino que o restante esteja copiando o dispositivo para / boot / img / e criando a entrada correta no menu.lst, correto? Eu posso fazer isso sistema por sistema, uma vez que consigo fazer referência aos kernels.

R: Como mencionado anteriormente, crie melhor partições separadas para as distribuições que precisam delas e misture as distribuições não tão gananciosas em suas próprias pastas. Trate o kernel, o initrd e o restante da distribuição como uma unidade.

Uma última ideia. Se você não quiser usar partições diferentes, tente algo como instalações "WUBI" para as distros que exigem uma instalação completa em sua própria partição. Isso significa que você cria arquivos grandes com seus próprios sistemas de arquivos ext2 / ext3 no USB, depois os monta como "unidades" e instala o sistema operacional nele. (Eu chamo de WUBI, porque esta é a aplicação mais conhecida).

O seguinte deve ser uma entrada do menu.lst do Grub4dos para inicializar uma "instalação do 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

A partir daqui .

Veja bem, existem 2 comandos "set root", o segundo após "root.disk", que contém o Linux, é montado como loop0.

Espero poder dar algumas idéias, embora não seja uma explicação completa.

Emil WidmannEmil
fonte
Desculpe, eu entendi errado o segundo link para a entrada do Grub para o Wubi (porque é meu primeiro post, meu segundo link foi "protegido contra spam"). O link certo é: blogold.chinaunix.net/u3/113851/showart_2311251.html
Emil WidmannEmil
1

Aqui estão dois guias:

  • Um guia no fórum do Unity Linux
  • E outro no PClos

Eu acho que ambos usam partições separadas para cada kernel.

As entradas em " /boot/grub/menu.lst " são assim:

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
oposto
fonte
0

Realmente depende de quais distros você está colocando lá. Alguns deles fazem coisas desagradáveis ​​no initramfs, então fica difícil. Algumas distribuições ao vivo pesquisam um rótulo, outras pesquisam o uuid. Você não pode fornecer isso.

A solução não é fácil, você deve criar novos ramdisks personalizados para suas distribuições ao vivo.

espero não ter entendido errado: D

admiral0
fonte
0

Você certamente precisará de algum tipo de espaço de usuário para acompanhar cada um desses kernels. (Programas, configuração, os trabalhos.) Tradicionalmente, você usaria pelo menos uma partição para cada sistema operacional separado, e a partição GRUB seria montada como / boot (para que você não tivesse a inicialização como um subdiretório deste partição; seria o diretório raiz, com o grub / como um subdiretório.)

SamB
fonte