sgdisk:最終セクター強制ソート

sgdisk:最終セクター強制ソート

sgdisk1MBでソートされたパーティションを作成しようとしています。

-aサイズを選択すると、開始(中古)区間と終了区間が簡単です。

ただし、終了セクションを選択すると、sgdisk次のように終了します。

Device                                                         Start       End   Sectors   Size Type
/dev/disk/by-id/scsi-36848f690d917dc002587bfae06302a5a-part2    2048   1046527   1044480   510M EFI System
/dev/disk/by-id/scsi-36848f690d917dc002587bfae06302a5a-part3 1048576   5242879   4194304     2G Solaris /usr & Apple Z
/dev/disk/by-id/scsi-36848f690d917dc002587bfae06302a5a-part4 5242880 467660800 462417921 220.5G Linux filesystem

462417921のサイズは、明らかに1MBブロックと整列しません。

私が期待した内容は次のとおりです。

/dev/disk/by-id/scsi-36848f690d917dc002587bfae06302a5a-part4 5242880 466616319 461373440 220G Linux filesystem

-aスタートセクタでのみ機能しているようです。

エンドセクタを残りのディスクパーティションと並べ替えるにはどうすればよいですか?

パーティションテーブルは次のように構成されます。

sgdisk --zap-all $DISK
sgdisk            -n2:1M:+510M    -t2:EF00 $DISK
sgdisk -a 1048576 -n3:0:+2G       -t3:BF01 $DISK
# Use the rest of the disk for the final partition
# and it is here the end sector is not aligned
sgdisk -a 1048576 -n4:0:-0        -t4:BF01 $DISK

ベストアンサー1

これは非常に珍しい要件であり、実際に意図したユースケースには合いません。sgdiskソートオプション:

-a, --set-alignment=value

セクタの配置を複数に設定します。 GPT fdiskは、パーティションの先頭をこの値の倍数のセクタにソートします。この値は、新しくフォーマットされたディスクのデフォルト値は2048です。このアライメント値は、Western Digital Advanced Formatと物理セクタサイズが論理セクタサイズよりも大きい同様のドライブ、特定のタイプのRAIDアレイ、およびSSDデバイスの最適なパフォーマンスに必要です。

パーティションの終了セクタは、開始セクタほどパフォーマンスに影響を与えません。これが-a遷移が最終セクタに影響を与えない理由です。

おそらく最善の方法は、そのオプションを使用して実行するアクションを見つけ-E-nx:x:0、直接ソートを計算することです。

man 8 sgdisk

-E, --end-of-largest ディスクで使用可能な最大セクタブロックの末尾にセクタ番号を表示します。スクリプトはこの値を保存し、-nオプションの一部として返すことでパーティションを作成できます。割り当てられていないセクタが利用できない場合、関数はゼロ値を返します。

したがって、これをスクリプト(bashスクリプトなど)で使用するには、次の手順を実行します。

end_position=$(sgdisk -E $DISK)
sgdisk -a 1048576 -n4:0:$(( $end_position - ($end_position + 1) % 2048 ))   -t4:BF01 $DISK

ここで、スクリプトは明示的に設定されたエンドセクタを持つパーティションを作成します。このパーティションは可能なディスクの終わりに近いですが、1048576バイト(1MiB)でソートされます。

おすすめ記事