LinuxライブOSは、同じメディアにあるカーネルとルートファイルシステムを起動するために使用される現在のブートメディア(CD / USB)を決定します。

LinuxライブOSは、同じメディアにあるカーネルとルートファイルシステムを起動するために使用される現在のブートメディア(CD / USB)を決定します。

検出する方法はありますか?現在のブートメディア起動するために使用Linux ライブ OS? ライブOSシステムで、現在のブートメディアを一意に特定したい(CD/USB)ディスクを起動するために使用されました。これをブートローダレベルではなく OS レベルで決定します。

現在のブートメディア私の場合はメディアを意味しますOS の起動に使用されたブートローダーが存在する場所。

以下を調べましたが、現在のブート メディアの開発パスの情報がないようです (たとえば、現在のブート パスが cd であることを示す /dev/sr0 など)

  • systemd の確認ジャーナルctlログ。
  • チェック中dmesgログ。
  • 可能なインターフェースユーデブそしてウデバドユーティリティ。
  • ビジーボックス rdev提案されているようにhttp://free-electrons.com/blog/find-root-device/. stat / と /dev/sr0 のメジャー:マイナーデバイス番号を比較する手順が一致していないようです。

GRUB2でも確認しましたが、http://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/kern/i386/pc/init.cGRUB環境変数そして接頭辞設定されています。例えば、CDから起動したGRUB2シェルで、次のように入力すると、$rootをエコーする、私は得る31 文字では、これをLinuxブロックデバイスパスにマッピングするにはどうすればよいでしょうか。/dev/sr0CDや何か/dev/sdb1ペンドライブ?私もチェックしましたLinux: 現在のブートディスクのデバイス名を取得するそしてhttps://stackoverflow.com/questions/6787819/how-to-determine-the-booting-deviceしかし、どちらも役に立たないようです。

理想的には私はマウントを避けるすべての CD/USB (/dev/sr0 または /dev/sdb1 など) で、initrd およびカーネル ファイルの存在を手動で確認します。この方法は絶対確実ではありません。これを行う簡単な方法はありますか?

答え1

次のものを見つけましたが、何が設定するのかわかりません。おそらくカーネル/grub で、その場合は設定されているはずです。

「これは、別のLiveOSファイルシステムのマウントポイントのデバイスノード参照である可能性もあります。現在実行中のもの(起動したLive CD/DVD/USBなど、/run/initramfs/livedevが起動したLiveOSデバイスにリンクしているもの)も含む)"

から https://www.mankier.com/8/livecd-iso-to-disk

答え2

Linux カーネル自体は、どこからロードされるかを気にしません。それはブートローダの仕事だと考えています。理想的には、ブートローダはこの情報をカーネルが後で取得できる場所に記録します。これは U-Boot ブートローダでは簡単ですが、x86 BIOS/UEFI ではそうではありません。

結果として、Linux 自体からこの情報を取得できるとは思いませんが、ルート ファイルシステムが存在する場所は、ほとんどの場合 Linux がロードされる場所であると考えられます。カーネルを 1 つの場所からロードし、ルート ファイルシステムを別の場所からロードすることは 100% 可能であり、これは組み込みプラットフォームでは一般的です。

それで、試してみることができるいくつかのことがあります。

  • cat /proc/cmdlineルート ファイル システムがロードされた場所がわかるはずです。root=カーネル コマンド ライン パラメータは、ロード時にカーネルがルート ファイル システムを検索するように指示された場所を示します。

  • mountコマンドを発行してファイルシステムを見つけ/、そのデバイスを確認すること もできます。

関連情報