web-dev-qa-db-ja.com

fdisk -lのようなコマンドはどのようにセクターサイズを見つけますか?

ディスクのMBRにこの情報が含まれているため、fdiskのようなコマンドを呼び出すと、最終的にカーネルレベルのコードが実行され、MBRの特定の部分から読み取られますか?もしそうなら、それのどの部分ですか?何オフセット?

MBRにない場合、これらのタイプのコマンドはどのようにしてそれを見つけることができますか?パーティションの開始アドレスを計算する必要があり、そのためにセクターサイズが必要であることを考えると、パーティションの最初から読み取ることはできません。

この情報を見つけるためにfdiskのようなコマンドはどのように実装されていますか?彼らはどこからそれを読みますか?

6
John P

デバイスのセクターサイズはMBRに保存されません。

fdiskなどのユーザー空間コマンドは、BLKBSZGETおよびBLKSSZGETioctl sを使用して、ディスクからセクターサイズを取得します。これらのioctlsは、関連する情報をドライブ自体から取得するカーネル内のドライバーによって処理されます。

(関連するioctlsに関するドキュメントはあまりありません。確認する必要があります カーネルソースコード 。)

ドライブを直接クエリする他のツール(hdparmなど)を使用して、関連情報を表示できます。小さなSSDでは、hdparm -I教えて

[...]
Logical  Sector size:                   512 bytes
Physical Sector size:                   512 bytes
Logical Sector-0 offset:                  0 bytes
[...]
cache/buffer size  = unknown
Form Factor: 2.5 inch
Nominal Media Rotation Rate: Solid State Device
[...]

4Kセクターの大きな回転ディスクでは、代わりに

[...]
Logical  Sector size:                   512 bytes
Physical Sector size:                  4096 bytes
Logical Sector-0 offset:                  0 bytes
[...]
cache/buffer size  = unknown
Form Factor: 3.5 inch
Nominal Media Rotation Rate: 5400
[...]
8
Stephen Kitt

そこにはいくつか質問があります。「fdiskはディスクのセクターサイズをどこで見つけるのですか?」への回答を追跡しようとしました。私が見つけた最高のものは、ioctlから情報を取得することです。

ioctl info on Wikipedia and Linux man page

fdiskソースコードリンク

2
mjb2kmn