web-dev-qa-db-ja.com

EFIのパーティションの最大数はいくつですか?

LinuxでGPTパーティションドライブのパーティションの最大数はいくつですか。

GPTパーティションテーブルには最大128のパーティションを含めることができますが、/dev/sda?のデバイスノード(説明 ここ 、メジャー番号8のブロックデバイス)では、/dev/sda1から/dev/sda15までしか許可されません。

これは、GPTパーティションドライブであっても、ドライブに15を超えるパーティションが存在できないことを意味しますか?

3

すばらしい情報源を読みましょう。

_block/partitions/efi.c_で、gptパーティションを設定する場所は efi_partition() です。ここで、パーティションの最大数を決定します。

_for (i = 0; i < le32_to_cpu(gpt->num_partition_entries) && i < state->limit-1; i++) {
_

_num_partition_entries_はディスクのgptヘッダーから取得されるため、最大数は_state->limit - 1_です。 stateはこの関数の引数であり、この関数は同じファイル内のcheck_part()から、check_partition()から呼び出されます。

_state->limit = disk_max_parts(hd);
_

したがって、制限はdisk_max_parts()

_static inline int disk_max_parts(struct gendisk *disk)
{
        if (disk->flags & GENHD_FL_EXT_DEVT)
                return DISK_MAX_PARTS;
        return disk->minors;
}
_

したがって、ディスクデバイスに_GENHD_FL_EXT_DEVT /* allow extended devt */_(ループデバイス、汎用ATA/ATAPIディスク、SCSIディスク、MD RAID)がある場合、制限は_DISK_MAX_PARTS_(256)です。それ以外の場合は、 minors

結論として、通常、Linuxカーネルがサポートする最大数は255です。

4
Lingzhu Xiang

そうですね、そこでUUIDの使用が重要になると思います。その場合、ブロックデバイスを/ dev/{h、s} dXYとしてアドレス指定するのではなく、デバイスのUUIDによってアドレス指定します。確かにその場合、制限は128を超えることはできません。

2
James T Snell

いいえ、Linuxに問題があることを意味します。 ☺ しかし、私たちはすでにそれを知っていました。

EFIパーティションテーブルに最大 128パーティションが含まれていると誰が言いましたか?その人は仕様を読むことができません。 前に言ったように 、それぞれ128バイトの128エントリは、EFI仕様で必要とされる最小サイズです。 the EFIパーティションテーブルのサイズではなく、maximumサイズでもありません。

(厳密に言えば、EFI仕様のバージョン1.10で最初に言及された最小値は、すべてのパーティションエントリで合計16KiBですが、ヘッダーブロックは含まれません。従来の128バイトのエントリ長では、最小で128エントリです。)

2
JdeBP