USBドライブ上のGRUB — OSの追加


9

いくつかの背景:

  • 主にWindowsのバックグラウンド(私はUbuntuなどに精通しています)から来て、Windows 7マシンを使用してこのタスクを完了します
  • USBドライブ(8 GB FAT32ドライブ)のMBRにGRUBが正常にインストールされました。
  • ドライブに基本構造を作成しました:/ boot / grub、/ boot / img、/ boot / kernel

質問:

基本的な初心者向けの質問がありますが、Google / StackExchangeなどで回答を見つけるのに苦労しました。

  • / boot / img / [SystemName]フォルダーには特定のシステムのイメージが格納され、/ boot / kernelディレクトリに格納されたさまざまな(または同じ)バージョンのLinuxカーネルを使用する可能性があることを理解しています(少なくとも、この方法で設定したい)
  • ただし、これらのシステムのほとんどは、「linux」と呼ばれるディレクトリにカーネルを持っているだけです(バージョンを示していない)。これらすべてが使用するカーネルを検索できますが、カーネル自体を/ boot / kernelにコピーするのに最も適した場所はどこですか?
  • カーネルを入手した後、残りのほとんどはデバイスを/ boot / img /にコピーして、menu.lstに適切なエントリを作成していると思いますか?カーネルが参照できるようになれば、システムごとにそれを行うことができます。

全体的な目標:

GRUBブートメニューから複数のOSを起動できるようにする8GBのUSBフラッシュドライブを作成しようとしています。OSを追加または削除するには、適切なファイルを/ boot / img / [SystemName]および/ boot / kernelフォルダーに適切にコピーし、menu.lstファイルを編集するだけです。したがって、この最初のステップは、重複を減らすことを望んでいるため、これらのOSの多くが共有するカーネルを見つけることです。


そして、カーネルを追加した後に何が欲しいですか?起動可能なOSが必要ですか?
phunehehe 2010年

@phunehehe、ありがとう!私の全体的な目標を含めるように投稿を更新しました。
SeanKilleen、2010年

さまざまなディストリビューションのLiveCDイメージをUSBドライブにダンプして、それらを起動できるようにしようとしているようです。これは正しいです?
Wodin

@Wodin:基本的に、はい。LiveCD(ただし、書き込み可能なメディア上にあるため、書き込み機能を備えています)。必要なすべてのディストリビューション/ツール用に1つの統合されたブートローダーを備えています。
SeanKilleen、2011年

回答:


4

あなたが達成しようとしているのは、ブートテクノロジーを伸ばすことです:)しかし、完全なウォークスルーを行うには十分な知識がありませんが、それは可能だと思います。

まず、前述のように、ディストリビューションには非常に異なる要件があります。第二に、一方で良いことは、最小要件を必要とするディストリビューションを見つけることもできます。

ブートローダーとしてGRUB4DOSを使用することをお勧めします。USBでの使用方法については、このリンクを参照してください(USBのようなモバイルデバイスがある場合に重要なfind --set root-コマンドがあるため)。

次に、使用するパーティションの数を決定する必要があります。標準の「完全インストール」は常に単一のパーティションにあります。したがって、8 GBのUSBスティックがあり、4 GBのパーティション(最小のインストールが可能)を取る場合、DebianやFedoraのようなメインディストリビューションの2つの異なる「フルインストール」に制限されます。

ただし、小規模で特殊なLinuxディストリビューションがいくつかあります。たとえば、「Puppy Linux」は非常に小さく、特別な「質素なインストール」モードがあります。これには多くの種類があります(たとえば、デスクトップのようなAppleを実装しようとするMacPup、または64ビットLinuxであるFatdog64があります)。

この「質素なインストール」モードでは、ディレクトリを1つだけ使用し、ハードディスク(またはUSB)上の既存のLinuxまたはWindowsと並行してインストールできます。同様のモードをサポートする他のディストリビューションがあると確信しています。

パピーリナックスは小さい(150 MB未満)ため、インストールごとに小さい保存ファイル(512 MB)を予約すると想定すると、USBスティックに10種類のオペレーティングシステムのように簡単にインストールできます。さらに小さなLinux(Slitaz、Tinycore)を使用できます。

例として、現在のPCインストールからmenu.lst(GRUB4DOS)ファイルを添付します。最初の8エントリはすべてhd0,2上の異なるPuppy Linuxインストール(つまり、1番目のハードディスクの3番目のパーティション)であり、最小小さな追加パーティションと元のWindows-XPへのDebianインストール。

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は同様に見えるかもしれませんが、GRUB4DOSコマンド find --set-root --ignore-floppies /lupq511/initrd.gz (すべてのドライブでこのファイルを探す)は、USBを使用する場合に非常に役立つため、ドライブに固定エントリを使用する必要はありません。

上記の情報を使用して、元の質問に対するいくつかのコメント:

Q:* / boot / img / [SystemName]フォルダーには、/ boot / kernelディレクトリに保存されているLinuxカーネルのさまざまな(または同じ)バージョンを使用する特定のシステムのイメージが保存されることを理解しています(少なくとも、それが私がそれを設定したい方法です)

A:それがうまくいくかどうかはわかりません。ほとんどの主要なディストリビューションは、それらのパーティションの排他的権利を持ち、それらのファイルに特定のディレクトリ構造をインストールすることを期待しているからです。私の意見では、デフォルトの設定を尊重し、ディストリビューションが期待するものを提供することをお勧めします。つまり、一部には専用パーティションが必要であり、一部は共有パーティション上のディレクトリだけで満足します。デフォルトではない方法で1つのパーティションに複数のOSをインストールすることは不可能だとは言えませんが、問題が発生しやすく、Linuxの初心者には実用的ではないと私は思います。私が投稿の下部で言及している可能な回避策(「Wubiのような」インストール)。

Q:*ただし、これらのシステムのほとんどは、「linux」と呼ばれるディレクトリにカーネルを持っています(バージョンを示していない)。これらすべてが使用するカーネルを検索できますが、カーネル自体を/ boot / kernelにコピーするのに最適な場所はどこですか?

A:カーネルはディストリビューションが通常持っている場所に正確に行くべきだと思います。それらを別の/ boot / kernelフォルダーに保存する必要はありません。また、ディストリビューション間で共有することもお勧めしません。カーネルの記憶域は最小限です(2〜3 MBなど)。本当にたくさんのバージョンとサブバージョンがあり、時にはディストリビューションのカーネルに適用される特定のパッチさえあります。別の/テストされていないカーネルにプラグインすることは、不要な実験です。

Q:*カーネルを入手した後、残りのほとんどはデバイスを/ boot / img /にコピーして、menu.lstに適切なエントリを作成していると思いますか?カーネルが参照できるようになれば、システムごとにそれを行うことができます。

A:前述のように、それらを必要とするディストリビューション用に個別のパーティションを作成し、あまり貪欲ではないディストリビューションを独自のフォルダーに混在させることをお勧めします。カーネル、initrd、および残りのディストリビューションを1つのユニットとして扱います。

最後のアイデア。別のパーティションを使用したくない場合は、独自のパーティションへのフルインストールを要求するディストリビューションに対して「WUBI」インストールなどを試すことができます。これは、USB上に独自のext2 / ext3ファイルシステムで大きなファイルを作成し、それらを「ドライブ」としてマウントして、OSをそれにインストールすることを意味します。(これは最もよく知られているアプリケーションであるため、私はWUBIと呼びます)。

以下は、「Wubiインストール」を起動するためのGrub4dos menu.lstエントリです。

# 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」の2番目がloop0としてマウントされています。

完全なウォークスルーではありませんが、いくつかのアイデアを提供できれば幸いです。


申し訳ありませんが、WubiのGrubエントリへの2番目のリンクが間違っていました(これが私の最初の投稿であるため、2番目のリンクは「スパム保護」されていました)。正しいリンクは次のとおり
Emil WidmannEmil

1

ここに2つのガイドがあります:

どちらもカーネルごとに別々のパーティションを使用していると思います。

/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を検索します。それを提供することはできません。

解決策は簡単ではありません。ライブディストリビューション用に新しいカスタマイズされたRAMディスクを構築する必要があります。

私はそれが間違っていないことを願っています:D


0

これらのカーネルのそれぞれに対応するには、確かにある種のユーザースペースが必要です。(プログラム、構成、動作)従来、個別のOSごとに少なくとも 1つのパーティションを使用し、GRUBパーティション自体が/ bootとしてマウントされていました(そのため、実際には、このサブディレクトリとしてbootを使用しませんパーティション。ルートディレクトリであり、grub /がサブディレクトリになります。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.