最初に、パーティションの開始と終了の割合を指定することにより、partedを使用して、新しいGPTテーブルに適切に配置されたパーティションを作成します。
# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 0% 1%
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB primary
(parted) quit
このディスクはAdvanced Formatを使用していますが、4096B
の物理セクターサイズをPartedに正しく報告していることに注意してください。セクターを単位として使用して、もう一度見てみましょう。
# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 2048s 4095s 2048s primary
(parted) quit
2048s
は最初の可能なセクター ではなく、34s
でパーティションを開始したのはなぜですか?34s
で、論理(Partedで指定したもの)セクターサイズが4096B
の場合、512B
は適切に位置合わせされた開始セクターではありません。適切に配置された開始セクターは、8
で割り切れるセクターです(物理セクターサイズ/論理セクターサイズ= 8
であるため)。しかし、それは40s
が最初に適切に整列された開始セクターであることを意味しますが、まだ使用されていません。どうして?新しいGPTパーティションテーブルに100MiB
で始まる40s
容量の適切に配置されたパーティションを作成しようとする場合:
# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 40s 204839s
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
(parted) unit MiB
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 2861588MiB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 0.02MiB 100MiB 100MiB fat32 primary
(parted)
(parted) unit s
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 40s 204839s 204800s fat32 primary
(parted)
Warning: The resulting partition is not properly aligned for best performance.
と204840s(40s
+ 1)は両方とも204839s
で分割可能ですが、8
警告が引き続き表示されます。どうして?Partedは過度に保守的です。最近の慣例では、1MiB(2048セクター)境界でパーティションをアライメントします。これは、Advanced Formatディスク、アライメントを必要とする特定のタイプのRAIDセットアップ、およびほとんどのSSDで機能するためです。 Advanced Formatディスクの場合、アライメントが8の倍数である限り問題ありません。2048は8の倍数です。失われたディスク容量は小さいです-合計ディスク容量の0.0000336%数学が正しく、タイプミスはありませんでした。心配しないでください。 1MiBアライメントを使用するだけです。
Linuxでは、parted
がoptimalとminimalアライメントチェックを同時に行います。
これは、parted
(少なくともバージョン3.2以降)がlibblkid
に依存しているため、/sys/block/<disk>/queue/minimum_io_size
および/sys/block/<disk>/queue/optimal_io_size
から値を報告するためです( を参照) io-limits.txt )。
そのため、Advanced Formatディスクの場合、前者は4kのようなものである可能性がありますが、後者はいくつかの狂った価値を持つことができます。 65535 * 512 == 33553920
。
ここでソースコードを見ると、「適切な」または「最高のパフォーマンス」のアライメントが parted.c :: partition_align_check() の式で定義されています。
part->geom.start % pa->grain_size == pa->offset,
grain_size
は上記のI/Oブロックサイズに由来し、geom.start
はパーティションオフセットであり、アライメントオフセットpa->offset
は非常に頻繁にゼロです。
デフォルトでは、partedは1 MiBが最適であり、〜4kが最小(かなり単純化ではない)ブロックサイズであると想定するため、これらの値は相関します。ただし、libblkid
が別の方法で決定した場合、parted
はそれを信頼する傾向があり、そのデフォルト値1 MiBを/sys/block/<disk>/queue/optimal_io_size
で見つかった値に置き換えます。 (同時に、/sys/block/<disk>/queue/minimum_io_size
はおそらく同じ4096 Bを与えるでしょう。)
その場合、partedoptimalcheckはneverと同時にminimalチェック、少し混乱するかもしれないもの。
それを念頭に置いて-疑わしい場合は、queue/optimal_io_size
およびqueue/minimum_io_size
を見てください。前者が後者で割り切れない場合は、partedの警告を無視して、 optimalまたはminimalチェックで行きたい。