USB経由で起動するには、Debian Netinst(作成時の8.2)のgrub.cfgメニュー項目をどのように作成しますか?

USB経由で起動するには、Debian Netinst(作成時の8.2)のgrub.cfgメニュー項目をどのように作成しますか?

私はUSBスティックに複数のLinuxディストリビューションをアーカイブし、ディストリビューションごとにgrub.cfgエントリを作成して管理します。他のディストリビューションはスティックブートを維持し、うまく動作しますが、(他の方もいるようですね)Debian Jessie(8.x)で問題が発生し始めました。 Debian Netinst は debian-installercurses インタフェースで起動しますが、iso パスが grub.cfg のカーネル行に提供されていても、正しい Debian iso ファイルを検索しようとします。

USBスティックから「debian-8.2.0-amd64-i386-netinst.iso」を起動してみましたが、一部成功しました。まず、次のコマンドを使用してUSBスティックを設定しました。ArchWikiでUSBマルチブート手順を見つけることができます。

以下は、USBスティックの簡略化されたファイルとフォルダの構造に関するgrub.cfgエントリです。

USBROOT/
    ----boot/
        ----grub/
            ----grub.cfg
            ----(other grub paraphernalia)

        ----iso/
            ----debian/
                ----debian-8.2.0-amd64-i386-netinst.iso
                ----initrd.gz (special initrd)

isoにinitramfsがありますが、私がよく理解できない理由でDebianを正しく起動することはできません。これまでに提供した2つのリンクでこれについて簡単に説明します。

今grub.cfgエントリがあります。私はこれがi386 / amd64マルチアーキテクチャISOであることを知っていますが、単純化のために64ビット部分に集中します。 64ビット部分を見つけることができれば、i386の別の項目を簡単に作成できます。

probe -u $root --set=rootuuid
set imgdevpath="/dev/disk/by-uuid/$rootuuid"

menuentry 'Debian 8.2 Multiarch' {
    set isoname='debian-8.2.0-amd64-i386-netinst.iso'
    set isopath='/boot/iso/debian'
    set isofile=${isopath}/${isoname}
    set initrdfile=${isopath}/initrd.gz
    loopback loop $isofile
    linux (loop)/install.amd/vmlinuz iso-scan/ask_second_pass=true iso-scan/filename=${imgdevpath}/${isofile} config quiet
    initrd ${initrdfile}/initrd.gz
}

ところで:initrd行を次に変更してください。

initrd ${initrdfile}

grub(私の意見では)にエラーが発生するようにしてください。 Grubはしばらく停止した後、Debianが起動しようとするとすぐにカーネルパニックが発生しました。予想通り initramfs が見つからなかったからです。ただし、ブロックコードの例に示されているパスをそのまま書き留めておくと、これは発生しません。パス全体を手動で作成するのではなく、設定された変数を使用してパスを指定するとエラーが発生するのはなぜですか? しかし、私の主な質問は次のとおりです。

どのカーネルブートパラメータを提供する必要がありますか?このままではないだろう検索の実行isoは私が指定したパスにあります。インストーラは最終的に検索で正しいISOを見つけましたが、なぜ検索するのですか?

私はそれがLinuxファミリに関連しているとほとんど確信しています。

linux (loop)/install.amd/vmlinuz iso-scan/ask_second_pass=true iso-scan/filename=${imgdevpath}/${isofile} config quiet

以下の変更を含め、少なくとも20のテーマバリエーションを試しました。

iso-scan/filename=${isofile}
findiso=${imgdevpath}/${isofile}
findiso=${isofile}

編集:initrdの問題を修正しました。 $initrdfileを定義するときに一重引用符がありました。 findiso/iso-scan/すべての問題が持続します。

ベストアンサー1

netinstを起動しているので、ISOを完全にスキップして起動できます。カーネル+initrdUSBファイルシステムから直接。これはネットワークブートdiで、Debianリポジトリの残りのコンポーネントのみをロードします。

iso 検索に関連するプロセスは次のとおりです。

  • grubはISOをロードし、カーネルとinitrdをメモリに読み込みます(あなたの場合、initrdはUSBドライブに抽出されました)。
  • grub はカーネルに制御を与える
  • カーネルは initrd の init スクリプトに制御を渡します。
  • initスクリプトはdebian-installerに制御を渡します。
  • これiso-scan diモジュールiso-scan/filename利用可能なすべてのドライブをマウントし、付属のドライブを見つけます。
  • ISOが見つかり、ループバックインストールが見つかった場合、Debianインストーラはプロセスを続行します。

(セクション6.3.1.4参照)インストール文書詳しくは)

このようなパスを指定すると、これはブロックデバイスであり、ファイルが常駐できるマウントされたファイルシステムではない/dev/disk/by-uuid/UUID/debian/debian8.isoため意味がありません。/dev/disk/by-uuid/UUID

iso-scanで検索を絞り込むには、iso-scan / filenameを使用する代わりに*shared/ask_device=manualと値を事前設定できますshared/enter_device=/dev/disk/UUID(カーネル行に追加するだけです)。

これは grub.cfg でなければなりません:

set imgdevpath="/dev/disk/by-uuid/UUID"

menuentry 'Debian 8.2 Multiarch' {
    set isofile='/boot/iso/debian/debian-8.2.0-amd64-i386-netinst.iso'
    loopback loop $isofile
    linux (loop)/install.amd/vmlinuz iso-scan/filename=$isofile shared/ask_device=manual shared/enter_device=$imgdevpath no-prompt no-eject
    initrd (loop)/install.amd/initrd.gz
}

実際にこれをテストしておらず、以前のDebianバージョンの同様の設定からコピーして貼り付けています。

これで起動して動作しない場合にのみ、他のinitrdを試してみることをお勧めします。 UUIDプローブを読み取る前に、「手動で」動作していることを確認してください。

*これらは私が先に「ヒント」と呼んだものです。 Ubuntuや他のディストリビューションのヒントを覚えていると思います。

おすすめ記事