ループバックディスクでparted
コマンドをいじり、gptパーツテーブルを使用していくつかのパーティションを作成しようとしましたが、Error: Unable to satisfy all constraints on the partition.
論理パーティションを作成しようとしたとき
$ Sudo parted /dev/loop0
(parted) mktable gpt
(parted) mkpart primary 1MiB 201MiB
(parted) mkpart extended 201MiB -0MiB
(parted) unit MiB print
Model: Loopback device (loop)
Disk /dev/loop0: 102400MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1.00MiB 201MiB 200MiB primary
2 201MiB 102400MiB 102199MiB extended
(parted) mkpart logical 202MiB 1024MiB
Error: Unable to satisfy all constraints on the partition.
ただし、msdosパーツテーブルを使用して同じパーティションを再作成しても、このようなエラーは発生しません。では、何が問題なのか考えてみてください。
% Sudo parted /dev/loop0
GNU Parted 2.3
Using /dev/loop0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable msdos
(parted) mkpart primary 1MiB 201MiB
(parted) mkpart extended 201MiB -0MiB
(parted) mkpart logical 202MiB 1024MiB
(parted) unit MiB print
Model: Loopback device (loop)
Disk /dev/loop0: 102400MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1.00MiB 201MiB 200MiB primary
2 201MiB 102400MiB 102199MiB extended lba
5 202MiB 1024MiB 822MiB logical
拡張パーティションと論理パーティションは、msdosパーティションテーブルでのみ意味があります。唯一の目的は、4つ以上のパーティションを使用できるようにすることです。 GPTでは、「プライマリ」パーティションのみがあり、それらの数は通常128に制限されています(ただし、理論的には、ディスクラベル形式によって示される上限はありません)。 GPTでは、どのパーティションもオーバーラップできないことに注意してください(明らかに、拡張パーティションが含まれているすべての論理パーティションとオーバーラップすると予想されるmsdosと比較してください)。
GPTの次の点は、パーティションに名前を付けることができることです。混乱が生じます。mkpartコマンドは、GPTを使用するかmsdosパーティションテーブルを使用するかによって、セマンティクスが異なります。
Msdosパーティションテーブルでは、mkpartの2番目の引数はパーティションタイプ(プライマリ/論理/拡張)ですが、GPTでは2番目の引数はパーティション名です。あなたの場合、それは「プライマリ」または「プライマリ」です。 「拡張」または「論理的」。そのため、partedは2つのGPTパーティションを作成しました。最初の名前は「primary」で、2番目の名前は「extended」です。作成しようとした3番目のパーティション(「論理」パーティション)は「拡張」とオーバーラップするため、partedはそれを拒否します。
つまり、拡張パーティションと論理パーティションはGPTでは意味がありません。 「通常の」パーティションを好きなだけ作成し、適切な名前を付けます。