システムが起動したデバイス(パーティションではなく物理デバイス)をシェルスクリプトで確認する必要があります。
私はこのスクリプトを使用してディスクイメージを作成し、誰かが誤ってシステムの起動ディスクを消去するのを防ぎたいと思います。
各物理ディスクには/bootおよび/EFIパーティションを含めることができるため、ディスクにこれらのパーティションが含まれていることを確認することはできません。
起動中に実際にどのディスクが使用されているかを知る必要があります。
答え1
方法がありません。安定して確信する始めるディスク。
理由は簡単です。カーネルがこの情報を取得できないからです。
カーネルは、いくつかの手段(通常は匿名のブートローダ)を使用して、カーネルをRAMにロードするFire-and-forget方式でRAMで実行を開始します。
したがって、推測しかできません。カーネルは/がどこにあるかを知っているので(参照ルート=)ブートローダプロファイルの環境に応じて、/proc/cmdline
/がシステム起動デバイスにある可能性に賭けることができます。
x86アーキテクチャでは、次のコマンドを使用してBIOSからこの情報を取得できます。int 13H 割り込み呼び出し。確かに難しい(そして依然として信頼できない)道です。
〜のようにマーフィーいくつかのコメントで提案されているように、実行中のシステムがUEFIブートにのみ依存できると確信している場合は、実行中のこの情報を見つけることができます。ブートマネージャ
さまざまな方法を試してみることもできます。 MBRを操作してみてください。ただし、すべての方法では依然として不確実性が発生します(環境によっては再び減少する可能性があります)。
ネットワークから起動し、カーネルがkexecによって起動され、ディスクがいくつかのRAIDアレイで構成されていると想像してください。この情報はどういう意味ですか?
ところで、ユーザーが誤ってブートパーティションを削除するのを防ぐことが唯一の関心であれば...そうであれば...単にブートパーティションをすべて作成するのはどうですか?読み取り専用? (新しいカーネルをインストールするときに書き込み可能なパーティションしか必要ないからです)