为什么我的逻辑分区有一半不可用?

为什么我的逻辑分区有一半不可用?

我正在尝试在 Beaglebone Black 上对 eMMC 进行分区。以下是我对 /dev/mmcblk1 进行分区的方式:

root@beaglebone:~# fdisk -l /dev/mmcblk1
Disk /dev/mmcblk1: 3.6 GiB, 3825205248 bytes, 7471104 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9ccd5613

Device          Boot   Start     End Sectors  Size Id Type
/dev/mmcblk1p1  *       2048  206847  204800  100M  c W95 FAT32 (LBA)
/dev/mmcblk1p2        206848 7112703 6905856  3.3G  5 Extended
/dev/mmcblk1p5        208896  823295  614400  300M 83 Linux
/dev/mmcblk1p6        825344 1849343 1024000  500M 83 Linux
/dev/mmcblk1p7       1851392 2875391 1024000  500M 83 Linux
/dev/mmcblk1p8       2877440 3901439 1024000  500M 83 Linux
/dev/mmcblk1p9       3903488 4927487 1024000  500M 83 Linux
/dev/mmcblk1p10      4929536 7026687 2097152    1G 83 Linux

这正是它应该看起来的样子。分区 1 是主分区,分区 2 是扩展分区,其余分区是逻辑分区。但是,当我列出设备时,我只看到分区 1、2、5、6 和 7。

root@beaglebone:~# ls -l /dev/mmcblk1p*
brw-rw---- 1 root disk 179,  9 Mar  2 23:53 /dev/mmcblk1p1
brw-rw---- 1 root disk 179, 10 Mar  2 23:53 /dev/mmcblk1p2
brw-rw---- 1 root disk 179, 13 Mar  2 23:53 /dev/mmcblk1p5
brw-rw---- 1 root disk 179, 14 Mar  2 23:53 /dev/mmcblk1p6
brw-rw---- 1 root disk 179, 15 Mar  2 23:53 /dev/mmcblk1p7

lsblk 显示相同:

root@beaglebone:~# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0      179:0    0  7.2G  0 disk
└─mmcblk0p1  179:1    0  3.3G  0 part /
mmcblk1      179:8    0  3.6G  0 disk
├─mmcblk1p1  179:9    0  100M  0 part
├─mmcblk1p2  179:10   0    1K  0 part
├─mmcblk1p5  179:13   0  300M  0 part
├─mmcblk1p6  179:14   0  500M  0 part
└─mmcblk1p7  179:15   0  500M  0 part
mmcblk1boot0 179:16   0    4M  1 disk
mmcblk1boot1 179:24   0    4M  1 disk

即使重新启动后也是如此。我正在尝试从运行 debian 9 (Linux beaglebone 4.4.84-ti-r120) 的 SD 卡启动。

有人知道这里会发生什么吗?我是否达到了某种极限?

答案1

至少在内核开发人员看来,MMC 的固定限制为四个分区。 https://elixir.bootlin.com/linux/v3.3/source/drivers/mmc/card/block.c#L1587

编辑:

这个问题已经被问过了超级用户并在 Beaglebone Black 内核维护者 Robert C Nelson 的帮助下做出了回答。答案基本上是一样的伊格纳西奥·巴斯克斯·艾布拉姆斯 已发布但它缺少有关启动参数的信息。

mmcblk: using 16 minors per device阅读源代码,如果mmcblk.perdev_minors=16引导参数正常工作, 内核应该打印。https://elixir.bootlin.com/linux/v4.4.84/source/drivers/mmc/card/block.c#L2694

答案2

下一个 SD/MMC 卡的启动可以使用 CONFIG_MMC_BLOCK_MINORS 进行配置,或者在启动/modprobe 时使用 mmcblk.perdev_minors 选项进行覆盖。这会将每张卡之间的偏移量调整为配置值,而不是默认的 8。

来源

因此,传递mmcblk.perdev_minors=16内核引导行。

答案3

就像戴夫一样,它对我传递内核参数 mmcblk.perdev_minors=16 没有帮助(是的,我的内核配置了 CONFIG_MMC_BLOCK=y)。使用脚本 extract-vmlinux 并在未压缩的二进制文件中搜索字符串,结果发现我的内核需要以下参数:

mmc_block.perdev_minors=16

用 mmc_block 替换 mmcblk 让我可以看到所有分区。我使用的是内核 4.4.75,文档中仍然显示 mmcblk 而不是该源树中的 mmc_block。

我发现这个问题及其答案对于开始调试我的问题非常有用,并希望我的答案能够帮助其他使用较新内核的人。

相关内容