web-dev-qa-db-ja.com

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

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

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

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

  • Systemdをチェックしていますjournalctlログ。
  • チェックdmesgログ。
  • devおよびdevadmユーティリティで可能なインターフェース。
  • Busybox rdevhttp://free-electrons.com/blog/find-root-device/ で提案されているように。 stat /をmajor:minorデバイス番号/ dev/sr0の手順と比較する手順が一致していないようです。

GRUB2もチェックインしました http://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/kern/i386/pc/init.c where GRUB環境変数rootおよびprefixが設定されます。たとえば、CDから起動されたGRUB2シェルで、echo $ rootと入力すると、hd31になります。 CDの場合は/ dev/sr、ペンドライブの場合は/ dev/sdb1のようなLinuxブロックデバイスパスにこれをマッピングするにはどうすればよいですか?また、 Linux:現在のブートディスクのデバイス名を取得 および https://stackoverflow.com/questions/6787819/how-to-determine-the-booting-device も確認しましたしかし、どちらも役に立たないようです。

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

2
1337ninja

私は以下を見つけましたが、何がそれを設定するのかわかりません。たぶんカーネル/ grub、その場合は設定する必要があります。

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

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

1
Harrison

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

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

だからあなたが試すことができるいくつかのこと。

  • cat /proc/cmdlineは、おそらくルートファイルシステムがロードされた場所を示します-root=カーネルコマンドラインパラメータは、カーネルがロードされたときにルートファイルシステムを見つけるように指示された場所を示します。

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

1
LawrenceC