プログラムでルートパーティションのデバイス名/基本名を確認するにはどうすればよいですか?

プログラムでルートパーティションのデバイス名/基本名を確認するにはどうすればよいですか?

注:次の質問 ドライブ名? 「/dev/sda」の「sda」部分の正しい用語は何ですか?

一方:

  1. 私はシステムを持っています(この場合はRaspberry Piですが、これはすべてのnixシステムに関連付けることができます)。
  2. Linuxバージョンを実行しており、すべての一般的なLinuxコマンドが機能しているとします。
  3. ブートデバイスはSDカードまたはUSB接続ストレージデバイスです。
  4. 接続されたストレージデバイスから起動する場合、デバイス「basename」はsd(x)です。
  5. SDカードから起動すると、デバイス「basename」は「mm(xxxx)」のように変わります。

私がやりたいこと:プログラムで(可能であればシェルスクリプトで)デバイスタイプでそれを実行し、実行されたデバイスに応じて特定の属性を変更できるようにしたいです。

簡単な例:

Boot device = "mmxxxxx"
   Print "Booted from SD card!"
Boot device = "sda"
   Print "Booted from Attached Storage!"

私が望むのは、ルートパーティションが起動されたデフォルトのデバイスタイプ(より良い用語で)を抽出することです(つまりルートパーティションとしてマウントされたデバイスに応じて、「sd」、「mm​​」、またはその他の名前。 )

ルートディレクトリにマウントされたデバイスを何らかの方法で一覧表示できるようです。すべてがリストされているわけではありません。mountを選択し、最後のスラッシュの後の最初の2文字を抽出します。 。 。

ベストアンサー1

マウントポイントは systemd によって制御されます。

以下では、システムマウントユニットファイルを一覧表示できます。

systemctl list-units --type=mount --all

出力例:

  -.mount                       loaded    active   mounted Root Mount                                   
  boot-efi.mount                loaded    active   mounted /boot/efi
...

ルートパーティションはによって制御されます-.mount

systemctl status -- -.mount

● -.mount - Root Mount
     Loaded: loaded (/etc/fstab; generated)
     Active: active (mounted) since Wed 2024-02-07 
      Where: /
       What: /dev/sdaX
       Docs: man:fstab(5)
             man:systemd-fstab-generator(8)

デバイス名を抽出するには:

systemctl status -- -.mount |grep -oP '(?<=What: ).*' |xargs basename

指摘したように良い@スチールドライバこれにコメント:

systemctl show --value --property=What -- -.mount |xargs basename

男性systemd.mount

What:マウントするデバイスノード、ファイル、またはその他のリソースへの絶対パスを取得します。

おすすめ記事