给定一个块设备,如何检测分区名称是否必须包含“p”?

ste*_*nct 4 linux partition block-device linux-kernel

我想用sfdisk. 这可能是 SD 卡、硬盘、SATA 或 NVME 设备。最初我认为这sfdisk需要这些名称,因此我希望正确生成它们,但显然无论如何都可以将它们排除在外。:)

与传统的 ATA 和 SATA 设备的分区名称简单地附加到设备名称(例如,/dev/sda1对于块设备的第一个分区sda)不同,对于基于闪存并使用其他驱动程序的块设备,存在另一种方案。这些p在设备和分区名称之间添加一个(例如,/dev/mmcblk0p1对于 的第一个分区mmcblk0)。不幸的是,我没有找到关于这些细节的任何内核文档。

给定一个块设备(例如,/dev/mmcblk0),我如何决定相应的(但不存在的)分区是否将命名为p或不(例如,/dev/mmcblk0p1/dev/mmcblk01)?

这基本上是这个问题的相反问题,但有一个额外的扭曲,即分区尚不存在(为了这个问题,我不允许答案实际修改分区表,因此尝试它是无效的)。

Joh*_*Doe 9

如果设备名称以数字结尾,则内核添加“p”符号以将分区号与设备名称分开。

/dev/sda -> /dev/sda1
/dev/mmcblk0 -> /dev/mmcblk0p1
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅disk_nameLinux 内核源代码 (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)
Run Code Online (Sandbox Code Playgroud)