ディスクのMBRにこの情報が含まれているため、fdiskのようなコマンドを呼び出すと、最終的にカーネルレベルのコードが実行され、MBRの特定の部分から読み取られますか?もしそうなら、それのどの部分ですか?何オフセット?
MBRにない場合、これらのタイプのコマンドはどのようにしてそれを見つけることができますか?パーティションの開始アドレスを計算する必要があり、そのためにセクターサイズが必要であることを考えると、パーティションの最初から読み取ることはできません。
この情報を見つけるためにfdisk
のようなコマンドはどのように実装されていますか?彼らはどこからそれを読みますか?
デバイスのセクターサイズはMBRに保存されません。
fdisk
などのユーザー空間コマンドは、BLKBSZGET
およびBLKSSZGET
ioctl
sを使用して、ディスクからセクターサイズを取得します。これらのioctl
sは、関連する情報をドライブ自体から取得するカーネル内のドライバーによって処理されます。
(関連するioctl
sに関するドキュメントはあまりありません。確認する必要があります カーネルソースコード 。)
ドライブを直接クエリする他のツール(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
[...]
そこにはいくつか質問があります。「fdiskはディスクのセクターサイズをどこで見つけるのですか?」への回答を追跡しようとしました。私が見つけた最高のものは、ioctl
から情報を取得することです。
ioctl
info on Wikipedia and Linux man page 。