Linux:与えられたブロックデバイスの3番目のパーティションのデバイス名を取得する方法

Linux:与えられたブロックデバイスの3番目のパーティションのデバイス名を取得する方法

ブロックデバイスとパーティション番号を知り、パーティションデバイス名を(安定的に)取得する方法は?

たとえば、

_get_part_dev_from_disk_dev /dev/ccis0 3 => /dev/ccis0p3. #Note p

_get_part_dev_from_disk_dev /dev/sde 2 => /dev/sde2

現在私が使用する方法は次のとおりですが、最初のディスクを除いてマイナー番号をパーティション番号と仮定するため、バグがあります。これは完全に間違っています。マイナー計算は可能ですが、限界が多いです。まず最大値に達した後、devを動的に割り当てます。

_get_part_dev_from_disk_dev() {
        if test -b "$1"
        then
                DEV_MAJOR=$(printf "%d" "0x$(stat -c '%t' $1)")
        else
                shellout "[$1] is no a block device"
        fi

        test -n "${2//[0-9]/}" && shellout "[$2] is not a partition number"

        if test ! -r /sys/dev/block/$DEV_MAJOR:$2/uevent
        then
                logerror "Can't read /sys/dev/block/$DEV_MAJOR:$2/uevent"
                shellout "Can't gather $1 partition $2 informations"
        fi

        . /sys/dev/block/$DEV_MAJOR:$2/uevent
        test "$DEVTYPE" != "partition" && shellout "/sys/dev/block/$DEV_MAJOR:$2 TYPE=$DEVTYPE is not a partition."

        # echo $(udevadm info --query=name --path=/sys/dev/block/$DEV_MAJOR:$2)
        echo "/dev/$DEVNAME"
}

これは、ブロックデバイス名とパーティション番号を知っているパーティションを作成するスクリプトの一部です。後でファイルシステムを作成する必要がありますが、パーティション名はブロックデバイス名の後にパーティション番号が続くと仮定することはできません。時には文字pがあります(ドライバによって異なります)。

たぶんudevはこれを知っていますか?

答え1

時には文字pがあります(ドライバによって異なります)。

pディスクが数字で終わると、常に文字が追加されます。したがって、ディスク名とパーティション番号がある場合は、常にパーティション名が次のようになると想定できます。ディスク名+数字またはディスク名+ p+数字。このために専攻/不専攻を確認する必要はありません。

難しい部分は、「3番目のパーティションが何であるか」に答えることです。ディスクの3番目または3番目のパーティションですか?sda1場所によっては、ディスクの3番目のパーティションにすることができます。

ディスク上のパーティションがどこにあるかを知りたい場合は、パーティションテーブルを理解するツールを使用する必要がpartedありますfdisksfdiskスクリプトでより簡単に解析できるように、JSON出力オプションがあります。

3番目のパーティションのみが必要な場合は、ディスク名/パスに単に追加3(または上記を参照)してパーティション名/パスを取得できます。p3

答え2

解決策を見つけたようですが、信頼できるかどうかはわかりません。誰でも確認できますか?開発シンボリックリンクを照会し、最初のシンボリックリンクを選択します。それらはすべて同等ですか?最初は信じるか?もしそうなら、次の行が正しく動作すると思います(ディスク/ dev / sdaの2番目のパーティションのデバイス名を取得します)。

readlink -f /dev/$(udevadm info -q symlink /dev/sda|cut -d' ' -f1)-part2

=> /dev/sda2

関連情報