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


15

最初に、パーティションの開始と終了の割合を指定することにより、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物理セクターサイズが4096Bで、論理(Partedで指定したもの)セクターサイズがの場合、は適切に調整された開始セクターではありません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)
  • 204840s(+ 1)は両方ともで割り切れWarning: The resulting partition is not properly aligned for best performance.ますが、まだ警告が表示されます。どうして?40s204839s8

回答:


23

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


はい、失われたディスク容量は私には関係ありません。私は物事を正しく理解していることを知りたかっただけです。現在、Partedのソースコードをチェックしていますが、時間よりも少し時間がかかります。そこで、先に進み、1MiBアライメントを使用します。再び手伝ってくれてありがとう!
削除

1
これは、単にpartedの保守性ではなく、Linuxブロックレイヤーの制限であることに言及する価値があります。ATAドライブはoptimal_io_sizeヒントを提供しません。したがって、「レガシー」ATAデバイスを提供せずalignment_offsetalignment_offsetデフォルトで0にしたデバイスと、持っているデバイスを区別する方法はありませんalignment_offset=0。fdisk / parted 、そのようなドライブに1MBのパーティションアライメント使用します。
roolebo

1
そして、番号自体-1MBのパーティションアライメントは、partedコミットで参照されているように、Windows Vistaの動作に由来するようです。
roolebo

1

Linuxではparted最適なアライメントチェックと最小のアライメントチェックを同時にパスできない状況になる可能性があると付け加えます。

これの理由は、parted(少なくともバージョン3.2の時点で)に依存しておりlibblkid、から/sys/block/<disk>/queue/minimum_io_size、そして/sys/block/<disk>/queue/optimal_io_sizeio-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を与える可能性が非常に高くなります。)

その場合、分割された最適チェックは最小チェックと同時にパスすることはありません。これは少し混乱する可能性があります。

疑問がある場合は、見ている-ことを念頭に置いてqueue/optimal_io_sizequeue/minimum_io_size、前者が後者で割り切れない場合は、単に別れ」警告を無視し、自分で決めるかどうか、あなたが一緒に行きたいです最適なまたは最小限のチェック。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.