web-dev-qa-db-ja.com

論理パーティションの半分が使用できないのはなぜですか?

BeagleboneBlackで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
Dave

少なくともカーネル開発者は、MMCに対して4つのパーティションの固定制限を想定しているようです。 https://elixir.bootlin.com/linux/v3.3/source/drivers/mmc/card/block.c#L1587

編集:

質問はすでに スーパーユーザー で行われ、BeagleboneBlackカーネルメンテナーのRobertCNelsonの助けを借りて回答されました。答えは基本的に Ignacio Vazquez-Abramsはすでに投稿されています と同じですが、ブート引数に関する情報が欠落しています。

ソースを読み取ると、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

3
thomas

次のSD/MMCカードの開始は、CONFIG_MMC_BLOCK_MINORSで構成するか、mmcblk.perdev_minorsオプションを使用してブート/ modprobe時にオーバーライドできます。これにより、各カード間のオフセットがデフォルトの8ではなく構成値になります。

ソース

したがって、カーネルブートラインでmmcblk.perdev_minors=16を渡します。

Daveと同じように、カーネルパラメーターmmcblk.perdev_minors = 16を渡すことは役に立ちませんでした(はい、私のカーネルはCONFIG_MMC_BLOCK = yで構成されていました)。スクリプトextract-vmlinuxを使用し、圧縮されていないバイナリで文字列を検索すると、カーネルが代わりに次のパラメータを必要としていることがわかりました。

mmc_block.perdev_minors = 16

Mmcblkをmmc_blockに置き換えると、すべてのパーティションを表示できるようになりました。私はカーネル4.4.75を使用していますが、ドキュメントには、そのソースツリーでmmc_blockではなくmmcblkと記載されています。

この質問とその回答は、問題のデバッグを開始するのに非常に役立ち、私の回答が新しいカーネルで他の人に役立つことを願っています。

1