LinuxでGPTパーティションドライブのパーティションの最大数はいくつですか。
GPTパーティションテーブルには最大128のパーティションを含めることができますが、/dev/sda?
のデバイスノード(説明 ここ 、メジャー番号8のブロックデバイス)では、/dev/sda1
から/dev/sda15
までしか許可されません。
これは、GPTパーティションドライブであっても、ドライブに15を超えるパーティションが存在できないことを意味しますか?
すばらしい情報源を読みましょう。
_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です。
そうですね、そこでUUIDの使用が重要になると思います。その場合、ブロックデバイスを/ dev/{h、s} dXYとしてアドレス指定するのではなく、デバイスのUUIDによってアドレス指定します。確かにその場合、制限は128を超えることはできません。
いいえ、Linuxに問題があることを意味します。 ☺ しかし、私たちはすでにそれを知っていました。
EFIパーティションテーブルに最大 128パーティションが含まれていると誰が言いましたか?その人は仕様を読むことができません。 前に言ったように 、それぞれ128バイトの128エントリは、EFI仕様で必要とされる最小サイズです。 the EFIパーティションテーブルのサイズではなく、maximumサイズでもありません。
(厳密に言えば、EFI仕様のバージョン1.10で最初に言及された最小値は、すべてのパーティションエントリで合計16KiBですが、ヘッダーブロックは含まれません。従来の128バイトのエントリ長では、最小で128エントリです。)