USBドライブのGRUB - オペレーティングシステムの追加

USBドライブのGRUB - オペレーティングシステムの追加

いくつかの背景:

  • 主にWindowsの背景から来て(Ubuntuなどに精通していますが)、Windows 7システムを使用してこれを行います。
  • USBドライブ(8GB 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ブートメニューから複数のオペレーティングシステムを起動できる8GB USBフラッシュドライブを作成しようとしています。オペレーティングシステムを追加または削除するには、適切なファイルを/boot/img/[SystemName]フォルダと/boot/kernelフォルダ(必要に応じて)にコピーし、menu.lstファイルを編集します。したがって、最初のステップは冗長性を減らしたいので、多くのオペレーティングシステムで共有されているカーネルを見つけることです。

ベストアンサー1

あなたが達成したいのは、ブート技術を拡張することです。 :) しかし、完全な練習を提供するには、私の知識が不十分であっても可能だと思います。

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

GRUB4DOSをブートローダとして使用することをお勧めします。これを見て協会USBで使用する方法(find --set root - コマンドがあるため、USBなどのモバイルデバイスを使用する場合は重要です)。

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

しかし、いくつかの小さなプロのLinuxディストリビューションがあります。たとえば、「Puppy Linux」は非常に小さく、特別な「きれいなインストール」モードを持っています。これはさまざまな形で提供されます(たとえば、Appleに似たデスクトップを実装したいMacPupまたは64ビットLinuxであるFatdog64)。

この「堅牢なインストール」モードでは、1つのディレクトリのみを使用し、ハードドライブ(またはUSB)に既存のLinuxまたはWindowsと並列にインストールできます。同様のパターンをサポートする他のディストリビューションがあると確信しています。

Puppy Linuxはサイズが小さいため(< 150 MB)、インストールごとに小さな保存ファイル(512 MB)を保持すると仮定すると、USBスティックに10の異なるオペレーティングシステムを簡単にインストールできます。より小さなLinuxバージョン(Slitaz、Tinycore)も利用できます。

たとえば、現在のPCインストールでmenu.lst(GRUB4DOS)ファイルを添付しましたが、最初の8つの項目がすべて異なります。 Puppy Linuxはhd0,2(つまり、最初のハードドライブの3番目のパーティション)にインストールされ、その後、最小のraw 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は似ている可能性 find --set-root --ignore-floppies /lupq511/initrd.gz があり、USBを使用している場合はGRUB4DOSコマンド(すべてのドライブでこのファイルを見つける)が役に立つ可能性があるため、ドライブに固定されたエントリを使用する必要はありません。

上記の情報に基づいて、元の質問に関するいくつかのコメント:

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

A:ほとんどの主要なディストリビューションでは、パーティションの排他権を持ち、ファイルに特定のディレクトリ構造をインストールしたいので、これが可能かどうかはわかりません。私の考えでは、デフォルトを尊重し、ディストリビューションから期待するものを提供する方が良いです。つまり、一部には専用パーティションが必要で、一部には共有パーティションのディレクトリが必要です。基本ではない方法で1つのパーティションに複数のオペレーティングシステムをインストールすることは不可能であるとは言いませんが、これは面倒で、私の考えではLinux初心者にとっては実用的ではありません。投稿の一番下に考えられる解決策(「Wubiのような」インストール)について言及しました。

Q:*しかし、ほとんどのシステムにはディレクトリに "linux"という名前のカーネル(指定されていないバージョン)しかありません。これらすべてがどのカーネルを使用しているかを見つけることができますが、カーネル自体を/boot/kernelにコピーするのに最適な場所はどこですか?

答え:カーネルは、ディストリビューションが通常持っている場所に正確に配置する必要があると思います。別の/boot/kernelフォルダに保存する必要はなく、ディストリビューション間で共有することはお勧めできません。カーネルには小さな記憶領域(たとえば2〜3 MB)があります。実際には多くのバージョンとサブバージョンがあり、時にはディストリビューションカーネルに適用される特定のパッチもあります。他の/テストされていないコアを接続するのは不要な実験です。

Q:*カーネルを取得した後に残った作業のほとんどは、デバイスを/boot/img/にコピーし、menu.lstに正しいエントリを作成することです。そうですか?参照するカーネルを取得できるようになったら、システムごとにこれを実行できます。

答え:前述のように、必要なディストリビューション用に別々のパーティションを作成し、欲求の少ないディストリビューションを独自のフォルダに混在させることが最善です。カーネル、initrd、および残りのディストリビューションを単一単位で処理します。

最後の考えです。別のパーティションを使用したくない場合は、独自のパーティションにフルインストールが必要な「WUBI」インストールなどのディストリビューションを試してみてください。これは、独自のext2 / ext3ファイルシステムを使用してUSBに大容量ファイルを作成し、それを「ドライブ」としてマウントし、そこに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としてマウントされます。

これは完全な練習ではありませんが、いくつかのアイデアを提供できることを願っています。

おすすめ記事