partedを使用して整列されたパーティションを作成する


68

GPTパーティションテーブルが必要なため、partedで非SSDハードディスクをパーティション分割しています。

parted /dev/sda mklabel gpt

今、私は正しく整列されたパーティションを作成しようとしているので、次のコマンドを使用して最初のセクターがどこから始まるかを知ります:

parted /dev/sda unit s p free

Disk /dev/sda: 488397168s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End         Size        File system  Name      Flags
        34s    488397134s  488397101s  Free Space

セクター34で始まることがわかります(このパーティションテーブルが使用されるときのデフォルトです)。

だから、私が試した最初のパーティションを作成するために:

parted /dev/sda mkpart primary 63s 127s

8の倍数であるため、セクター64に位置合わせしますが、次のように表示されます。

警告:結果のパーティションは、最高のパフォーマンスを得るために適切に調整されていません。

ハードディスクの論理的および物理的セクターサイズは両方とも512バイトです。

cat /sys/block/sda/queue/physical_block_size
512

cat /sys/block/sda/queue/logical_block_size 
512

正しく配置されたパーティションを作成するにはどうすればよいですか?何が間違っていますか?


セクター番号はゼロから始まりますか?
バートンサモグラード

1
私も試しましたparted /dev/sda mkpart primary 64s 128s(1で始まる場合)が、同じ警告を返します。
マーク

値が揃っているかどうかを確認するためのコマンドがありますように見えます:gnu.org/software/parted/manual/html_node/align_002dcheck.html。たぶん、forループを使用してさまざまな値でそれを試して、大丈夫な値を吐き出しますか?
バートンサモグラード

バートン、私はそのコマンドについては知りませんでしたが、パーティションを持つまで使用できません。
マーク

申し訳ありませんが、説明を十分に注意深く読みませんでした。
バートンサモグラード

回答:


68

パーティションを揃えるために、オプションpartedを使用--alignできます。有効なアライメントタイプは次のとおりです。

  • none- ディスクタイプで許可されている最小のアライメントを使用します。
  • シリンダー -パーティションをシリンダーに揃えます。
  • minimal-ディスクトポロジ情報で指定された最小アライメントを使用します。これとopt値は、ディスクによって提供されるレイアウト情報を使用して、論理パーティションテーブルアドレスをディスク上の実際の物理ブロックに合わせます。最小値は、パーティションを物理ブロックに適切にアライメントするために必要な最小アライメントであり、パフォーマンスの低下を防ぎます。
  • 最適ディスクトポロジ情報で指定された最適なアライメントを使用します。これにより、最適なパフォーマンスを保証する方法で、物理ブロックサイズの倍数に調整されます。

その他の便利なヒントは、サイズをパーセンテージで設定して、サイズを揃えることです。0%で始まり、100%で終わります。例えば:

parted -a optimal /dev/sda mkpart primary 0% 4096MB


5
コマンドは終了しません0% 100%か?どこ4096MBから来たの?
njahnke

4
値4096メガバイトは、%と特定のサイズの番号を混合する能力を示すために、ここで一例に使用される
LIK

3
ただ注意してください'0%'。コマンドを適切に実行するには、シェルを引用符で囲む必要がありました。
アダムエベリン

@likあなたがこのポストのための提案を持っているunix.stackexchange.com/questions/248939/...
AnkurTank

1
上記を気にせず、parted printがkBを1000バイトとして使用していることに気付きました
...-jiggunjer

9

私の解決策は、デフォルトで2048セクター(1024KiB)でパーティションのアライメントを自動的に実行できるgdiskを使用することでしたが、エキスパートメニューで変更できます。


7

Arch Wikiから:

パーティションを作成する際、partedはパーティションの不適切なアライメントについて警告する場合がありますが、適切なアライメントについては示唆しません。例えば:

(parted) mkpart primary fat16 0 32M
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?                                                     

警告は、パーティションstartがアライメントされていないことを意味します。

Enter Ignoreを押して続行し、パーティションテーブルをセクターで印刷して開始位置を確認し、警告が停止するまで開始セクターを2の累乗に切り上げたパーティションを削除/再作成します。一例として、512Bセクターのフラッシュドライブでは、Partedは2048の倍数であるセクター(1MBアライメント)でパーティションを開始することを望んでいました。

さらに、このセクションのすぐ上で、KiB、MiB、GiBなどのより正確なIECバイナリユニットは、ユニットと同様に精度の低いKB、MB、GBなどにも受け入れられると述べています。

個人的に、これを解決した正確なコマンドは次のとおりです。

mkpart hd ext4 1024KiB 8470MB

文句は言いませんでしたが、1MBのアライメントが必要だったと思います。


いいえ、1048576KiBを試しましたが、サイコロは使いません。
20:23のBehrooz

5

マイナーな修正。私が理解しているように、GPTディスクにはパーティションタイプはもうありません。それらはすべて「プライマリ」です。コマンド 'mkpart primary'は、msdosディスクの場合のようにプライマリパーティションを作成しません。プライマリと呼ばれるパーティションを作成するだけです。コマンドを使用することもできます

(parted) mkpart Parted-FUN! 21476MB 4000787MB
(parted) print
Model: ATA ST4000DM000-1F21 (scsi)
Disk /dev/sdf: 4000787MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start    End        Size       File system  Name         Flags
 1      1.05MB   17181MB    17180MB    ext4         raid-var
 2      17181MB  21476MB    4295MB                  raid-swap
 3      21476MB  4000786MB  3979310MB               Parted-FUN!

論理パーティションを作成しようとすると混乱が生じる可能性があります。

(parted) mkpart extended 21476MB 4000787MB
(parted) mkpart logical 21476MB 1000787MB
Warning: You requested a partition from 21476MB to 1000787MB.
The closest location we can manage is 4000786MB to 4000786MB.
Is this still acceptable to you?
Yes/No? Yes
(parted) print
Model: ATA ST4000DM000-1F21 (scsi)
Disk /dev/sdf: 4000787MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start      End        Size       File system  Name       Flags
 1      1.05MB     17181MB    17180MB    ext4         raid-var
 2      17181MB    21476MB    4295MB                  raid-swap
 3      21476MB    4000786MB  3979310MB               extended
 4      4000786MB  4000786MB  0.00MB                  logical

「拡張」と呼ばれるパーティション内に「論理」と呼ばれるパーティションを作成することはできません。


ありがとう、私はこのツールの悪いcliのおかげでかなりの時間を無駄にしただけで、あなたは私に何が起こっているのかを理解させました。
フローリアンハイグル

5

@likによって受け入れられた答えは、あなたが優先配置を指定することができる方法を示しています。ただし、partedは結果のパーティションをチェックするために常にそのアライメントを使用しますが、常にそのアライメントでパーティションを作成するわけではありません。

TL; DR:1MiBが最適なアライメントである場合、200MiB以上のディスクに対して0%を指定すると機能します。小さいディスクまたは大きいアライメントの場合、0%が機能しない場合に0Gを指定すると機能します。理由については以下をご覧ください。

Partedはパーティションを作成するときにアライメントの制約を満たそうとしますが、要求された値から大きく逸脱することもありません。「多すぎる」と見なされるものは、位置をどのように指定したかによって異なります。

mkpartコマンドに開始(または終了)位置を指定すると、許容範囲の値が内部的に生成されます。この範囲は、指定した値を中心に、そしてあなたが使用さ半分ユニットサイズ(それは私が何によって両側で均等に伸びているコードから読み取るコメントが言う両端に完全な一個の単位のサイズ)。

たとえば、「10M」を指定すると、9.5M〜10.5Mの間の位置を使用しようとします。パーセンテージについても同様です。したがって、0%を指定すると、0%から0.5%の間の値が使用されます(明らかに負にはなりません)。

1つの例外は、2の累乗単位(1000のKではなく1024のKiBなど)を使用する場合、partedは正確な位置を指定しようとしていると想定し、指定した正確な値のみを考慮することです。

通常、最適なアライメントは1MiBアライメントであるように見えるため、KユニットとMユニットには最適なアライメントに達するための十分なスペースがないことがよくあります。Gでの位置の指定には十分なスペースが必要ですが、通常は%でも問題ありません。

そのため、0%が通常は機能しますが、それでも制限があります。


あなたの答えの実用的なTLDRを要約してもらえますか:受け入れられた答えと比較して、異なる方法で正確に何をすべきか正確に?
ユルケニス

良い提案、TL; DRを追加しました。実際には、0%は非常に小さなディスク以外のすべてで機能すると思いますが、私の答えは、それが正確に機能する方法について少し背景を追加します。
Matthijs Kooijman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.