web-dev-qa-db-ja.com

Partedを使用したAdvanced Format HDDのパーティションの適切なアライメント

最初に、パーティションの開始と終了の割合を指定することにより、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警告が引き続き表示されます。どうして?
15
Deleted

Partedは過度に保守的です。最近の慣例では、1MiB(2048セクター)境界でパーティションをアライメントします。これは、Advanced Formatディスク、アライメントを必要とする特定のタイプのRAIDセットアップ、およびほとんどのSSDで機能するためです。 Advanced Formatディスクの場合、アライメントが8の倍数である限り問題ありません。2048は8の倍数です。失われたディスク容量は小さいです-合計ディスク容量の0.0000336%数学が正しく、タイプミスはありませんでした。心配しないでください。 1MiBアライメントを使用するだけです。

22
Rod Smith

Linuxでは、partedoptimalminimalアライメントチェックを同時に行います。

これは、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チェックで行きたい。

0
ジョージ