/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)")"
)。