パーティションデバイス名からブロックデバイス名を取得するには?

パーティションデバイス名からブロックデバイス名を取得するには?

/dev/sda指定されたパーティションデバイス名(例:)の親ブロックデバイス名(例:)を取得するための移植可能な方法を探しています/dev/sda1。最後の文字を削除できることを知っていますが、場合によってはこれは機能しません。

  • MMCリーダーは通常同じ名前を持ち、/dev/mmcblk0そのパーティションの名前も似ています/dev/mmcblk0p1(追加情報を参照p)。
  • オプション:一部のブロックデバイスにはパーティションテーブルがまったくなく、単一のパーティションとしてフォーマットされています。この場合、パーティションデバイスと上位ブロックデバイスは同じです。

LVMボリュームはまったく異なる話です。今はサポートする必要はありませんが、追加の努力は必要ありませんと考えると大丈夫です。

答え1

Linuxを使用している場合は、次のものを使用できますlsblk(これはLinuxの一部ですutil-linux)。

lsblk -no pkname /dev/sda1

答え2

あるデバイスが別のデバイスのパーティションの場合、名前付きファイル(その内容はパーティション番号)が/sys/class/block/$dev含まれます。partition

この場合、次のようにして親デバイスの名前を取得できます。

basename "$(readlink -f "/sys/class/block/$dev/..")"

または以下を使用してzsh

echo /sys/class/block/$dev(:A:h:t)

例:

$ dev=sda1
$ basename "$(readlink -f "/sys/class/block/$dev/..")"
sda
$ dev=nbd0p1
$ basename "$(readlink -f "/sys/class/block/$dev/..")"
nbd0

LVMボリュームはまったく異なります。分割linear特別な場合を除き、物理PVの連続マッピングです。

このような状況が発生した場合は、次のようにPV名を取得できます。

ls "/sys/class/block/$dev/slaves"

$dev似たようなものはどこにありますかdm-2? (から入手できます"$(basename "$(readlink -f /dev/VG/LV)")")。

関連情報