自動パーティションデバイスを使用したいですsfdisk
。これはSDカード、ハードドライブ、SATA、またはNVMEデバイスです。最初はこれらの名前が必要だと思ってsfdisk
正しく生成されたかったのですが、とにかく無視できます。 :)
単に、デバイス名にパーティション名を追加する既存のATAおよびSATAデバイスとは異なり、たとえばブロックデバイスの最初のパーティションなど、フラッシュベースで追加のドライバを使用する/dev/sda1
ブロックsda
デバイスには他のオプションがあります。これはp
、デバイスとパーティション名の間に1を追加します(たとえば、/dev/mmcblk0p1
最初のパーティションの場合mmcblk0
)。残念ながら、これらの詳細のカーネル文書は見つかりませんでした。
ブロックデバイス(たとえば)がある場合は、その(まだ存在する)パーティションの名前を指定するか(または)を決定するには/dev/mmcblk0
どうすればよいですか?p
/dev/mmcblk0p1
/dev/mmcblk01
これは基本的に逆の問題です。これただし、追加のバリエーションのため、パーティションはまだ存在しません。 (この質問については、実際にパーティションテーブルを変更する答えを受け入れないので、試しても役に立ちません。)
答え1
デバイス名が数字で終わると、カーネルは「p」記号を追加してデバイス名とパーティション番号を区別します。
/dev/sda -> /dev/sda1
/dev/mmcblk0 -> /dev/mmcblk0p1
詳細については、disk_name
Linuxカーネルソースコード(linux/block/partition-generic.c)の関数を参照してください。
if (isdigit(hd->disk_name[strlen(hd->disk_name)-1]))
snprintf(buf, BDEVNAME_SIZE, "%sp%d", hd->disk_name, partno);
else
snprintf(buf, BDEVNAME_SIZE, "%s%d", hd->disk_name, partno)
答え2
この努力に役立つかもしれないし、そうでないかもしれないものは次のとおりです。
# Try to figure out if partition names are separated by "p" from the device name or not.
# The following cases imply a "p"
# - If the device name starts with mmcblk (common drivers for SD card readers)
# - If there is no device/type file for the respective device in /sys/class/block (e.g., NVME drives)
# - If the respective device/type indicates "0" (hard disks)
base_dev=$(basename "$sd_dev")
if [[ "$base_dev" =~ mmcblk[0-9]+ || \
! -e "/sys/class/block/${base_dev}/device/type" || \
$(cat "/sys/class/block/${base_dev}/device/type") != 0 \
]]; then
part_sep="p"
else
part_sep=""
fi