GRUBの `ntldr`コマンド(モジュール?)の使用方法に関する詳細はどこで入手できますか?


16

最近、GRUB ntldrモジュールを偶然見つけました。

どうやら使用できるものの1つは、chainloader以下の例のようにWindowsのNTバージョン6.0以降を起動する代わりとして使用できることです。(Windowsパーティションのボリュームブートレコードが破損している場合に非常に便利です。)

menuentry "Windows 7 (bootmgr on /dev/sda1)" --class windows --class os {
    insmod part_msdos
    insmod ntfs
    insmod ntldr
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 1EA0019AA0017A13
    ntldr ($root)/bootmgr
}

このブートディレクティブの使用方法に関する詳細はどこで入手できますか?HTML版GNU GRUBマニュアルを見たときにリストされていませんでした。


ckhanの答えに返信する

どうもありがとうございました!GRUB ntldrコマンド/モジュールの詳細については、ソースコードを掘り下げてみる必要があると判断しました。しかし、あなたは私よりもはるかに良い仕事をしました。

電子メールのアーカイブを見て、コードを書いた人がどのようなデザインの議論をしたかを知ることは私には決してなかったでしょう。この方法は、将来非常に役立つ可能性があります。言及してくれてありがとう。

GRUB ntldrサポートについての私の考え

  1. 区別がどれだけ意味するかはよくわかりntldrませんが、コマンドではなくモジュールです。または、必要に応じて動的にロードされるコマンド。ソースコードのリンク

    たどり、152行目()と159 行目()を見ると、ロードするコードがわかります... ...モジュールをアンロードしています。GRUBは、明らかに「コマンド」と思われる多くの機能をモジュールとして実装しています。私が知っている使用法の唯一の違いは、モジュールを使用する前に、コマンドでロードされていることを確認する必要があることです。余談: GRUBがをサポートしないのはなぜだろうといつも思っていました。コマンドは存在しますが、モジュールです。を返す場合、GRUB_MOD_INITGRUB_MOD_FINI

    insmod ntldr

    rebootrebootunknown commandinsmod rebootGRUBがrebootコマンドを「記憶」できるようにします。

    余談: GRUBがモジュールを「アンロード」するタイミングと理由は、まだわかりません。たぶん「ガベージコレクション」に似た何かの結果でしょうか?システムの電源を切って再起動した後でも、モジュールがロードされると持続するように見えることに気付きました。もちろん、あなたはそれに頼ることはできませんが、それは実際にどのように頻繁に機能するかのようです。
  2. 彼らがベースにntldrしているのはおもしろいですchainloader。私はchainloader.cコードを見ていません。おそらく、Intel 16ビットリアルモードでも再配置の負荷がかかると思いますか?彼らのオプションとして彼らが実装しなかった

    ことむしろうれしいntldrですchainloader。ウラジミールに同意します。カバーの下の類似点が何であれ、使用構文は非常に異なります。現在のアプローチはそれほど気味が悪いです。
  3. また、このコマンドをGRUBに追加することに対する熱意の明らかな欠如を見るのも興味深いです。どうやらGRUB開発者は、Windows パーティションブートレコード(PBR)の損傷は非常に少ないと考えていたようです。ただし、通常の十分なインストール中にそれを行う方法をスケッチすることができます。

    ユーザーのシステムにWindowsがインストールされていると仮定して開始します。彼らは現在、Ubuntu(12.04 LTS)をWindows とともにインストールします。Ubuntuのインストール中のある時点で、GRUBのインストール先を明らかに決定できます。私が推測し始めることができない理由で、彼らの一部はWindowsがインストールされているパーティションにGRUBをインストールすることを決定します。

    インストールが完了し、Ubuntuを正常に起動できます。ただし、GRUBメニューのエントリを選択してWindowsを起動しようとすると、Windowsは起動しませ。代わりに、GRUBでWindowsを起動しようとすると、GRUBメニューが再表示されますか?

    どうして?明らかに、彼らが実際に起こったことの一部をWindowsパーティションにGRUBをインストールすることを選んだとき、WindowsパーティションのPBRはGRUBのPBRで上書きされました。したがってchainloader +1、Windowsブートローダーをチェーンロードするのではなく、GRUBを再ロードします。

    IMOは、その状況でユーザーがWindowsを起動できるようにする最も安全で迅速な方法は、GRUBの新しいを使用することntldrです。これは開発者にとって興味があるのだろうか。彼らはこのシナリオを予期していなかったと思う。

Windows以外のブートローダーntldrbootmgr、GRUB ntldrコマンドがロードできるのはなぜでしょうか?


1
素晴らしいもの!grub-develメーリングリストに一行入れて、この質問を覗いて、未回答の質問をいくつか聞いたり、仮定を修正したりするように頼むべきだと本当に思います。そもそも質問を開いてくれてありがとう!
-ckhan

回答:


14

文書化されていない機能の調査

あなたは正しいntldr文書化されていません(それはないモジュール、コマンドです)コマンド。それで、コード考古学のいくつかの冒険のための素晴らしい言い訳です 。

文書化されていない機能を見つけたときはいつでも、最初にすべきことはソースをチェックすることです。

  • Savannah gitリポジトリのソースは、 2010年8月にメインラインにマージされたことを示しています。

  • ソースブランチはもうないようですが、その年の初め、 2010年4月にそれが存在することがわかります。「Vladimir 'phcoder' Serbinenko」のチェックインコメントは

    ntldr support. (based on information from nyu but no code from him)
    

chainloaderコマンドに非常に密接に基づいているため、ヘッダーコメント内のファイル名はまだ更新されていません。

正確なチェックインと名前ができたので、郵送アーカイブを確認できます。1年前にgrub-develメーリングリストで、この機能の追加について開発者が議論した場所を確認できます 。

そのスレッドからの関連する抜粋:

Robert MillanこのパッチはNTLDRブートセマンティクスのローダーを実装します(BootMGRでも同じであるため、両方がサポートされています)。

Robert Millanこの機能が必要な場合は、スタンドアロンコマンドではなく、チェーンローダーのオプションにする必要があります。実際にはチェーンローダーとほとんど同じですが、唯一の違いは、ntldrがPBRの代わりにPBR自体ではなくGRUBによってロードされることです。

Vladimir Serbinenko ntldrはパーティションを識別するためのスーパーブロックとしてのみこのPBRを使用するため、問題はないと思います。そのため、この読み込みは$ rootを渡す特殊なケースと考えてください。その形式は少し奇妙です

Yves Blusseauコマンドについては、ブートローダーのタイプを検出しようとするチェーンローダー(grub4dosのような)が1つしかない場合、ユーザーにとって簡単になると思います。これは私の個人的な意見です。

ウラジミール・セルビネンコ私はこれに同意しません。chainloaderとntldrは同じ構文を共有しません。chainloaderはブートセクターを期待しますが、ntldrはntldrまたはbootmgrファイルを期待します。GRUB2は、GRUB1の不適切な設計決定を打ち破るために行われます。その1つは「カーネル」コマンドです。GRUB4DOSは、このテーマのGRUB1に従います。

ロバート・ミジャンよし。別のコマンドにしてみましょう。それでも、まだいくつかのifdefを使用してchainloader.cとコードを共有する必要があると思います。

質問に答える

すべてを熟考した後、それがどのように使用されるかについて私たちは何を知っていますか?

  • それはチェーンローダーに基づいています。

  • 単一の引数、つまり開くファイルを取ります。

  • パーティションブートレコードを回避するため、破損を回避できます。彼らがそれをどのようにテストしたかを詳述したこの投稿を参照してください。

  • それはだだけで、コードの160行について、あなたはそこに多くの他にありません見ることができます。

これが役に立てば幸いです!

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