ハードディスクパーティションの単位は何ですか?

ハードディスクパーティションの単位は何ですか?

パーティションテーブルの単位がセクタであることがわかっています。しかし、そのサイズは物理セクタサイズですか、それとも論理セクタサイズですか?

パーティションテーブルの数は常にセクタ数として記録されるため、論理セクタサイズが物理セクタサイズと異なる場合、Linuxカーネルとパーティション化ツールはパーティションサイズをどのように処理しますか?

ベストアンサー1

ご覧のように、例えばウィキペディア、GPTのエントリは論理ブロックアドレス(LBA)です。これは論理セクタサイズに基づくアドレスです。

ハードドライブが異なる(より大きな)物理セクタサイズを持ち始めたとき、ベンダは既存のシステムが新しいハードドライブを使用できるように、既存の物理セクタサイズを論理セクタサイズに保ちました。これは、ハードドライブのファームウェアに論理セクタの読み書きを処理するためのコードが含まれていることを意味します。読み取りの場合は、正しい(より大きな)物理セクターを読み取り、それらの一部のみを返します。書き込みのために、まず(より大きな)物理セクタを読み、次にいくつかを修正してから再度移動します。

これは、物理セクタの始まりに対応し、長さが物理セクタの倍数であるLBAで読み書きが行われない限り、非効率的です。

したがって、カーネルが大規模な物理セクタを処理する方法は、そのような読み取りおよび書き込みのみを使用しようとすることです。そのためには、パーティションは次のようになります。調整正しい(物理セクタ境界で)。通常、パーティショナーはこれが真であることを確認し、誤った方法で使用しようとすると警告を出力します。

カーネルはこれを行う必要はありません。それ以外の場合でも動作しますが、効率は低下します。

編集する

ユーザー領域アプリケーションが/ sysを介して論理セクタサイズを読み取り、パーティションテーブルを読み取り、それを乗算してユーザーにパーティションサイズを知らせますか?

はい、これはユーザーエリアアプリケーションが実行することです(物理的および論理的なセクタサイズがではないとfdisk思いますが、これを探す必要があります)。/proc/sys

カーネルがファイルシステムを運用するときにデフォルトリポジトリのサイズを知る必要はなく、ファイルシステムのメタデータを読んでファイルシステム構造のサイズだけを知ればいいでしょう。

少し難しいです。デフォルトのカーネル単位は「ページ」(MMU単位)ですが、特定のファイルシステムの基本単位は「ブロック」(時には複数ページ)です。カーネルはLBAを計算するために必要なので、これがプライマリストレージの論理ブロックサイズとどのように関連するかを知る必要があります。

ただし、ユーザーモードが/ dev / sda2などのRAWパーティションデバイスにアクセスする場合、カーネルはパーティションの開始位置とサイズを知る必要があります。そうですか?

はい。これが、次のような/dev/sda2エントリを作成する前にパーティションテーブルを読み取る理由です。

カーネルがこれを行うとき、パーティションテーブルに書き込まれた数値単位が物理セクタサイズではなく論理セクタサイズであることを知っておくべきでしょうか?

はい。

おすすめ記事