#include <linux/hdreg.h> /* for HDIO_GETGEO */ #include <linux/fs.h> /* for BLKGETSIZE and BLKRRPART */
SCSI ディスクはメジャーナンバー 8 を持ち、次のような形式のマイナーナンバー を持つ。(16 * drive_number) + partition_number、 この drive_number は検出された物理ドライブの番号であり、 partition_number は次のようになる:
パーティション 0 はドライブ全体
パーティション 1 〜 4 は DOS の "基本 (primary)" パーティション
パーティション 5 〜 8 は DOS の "拡張 (extended)" (または、"論理
(logical)") パーティション。
例えば、 /dev/sda はメジャーナンバー 8 マイナーナンバー 0 を持ち、システムの最初の SCSI ドライブ全体を参照する。そして、 /dev/sdb3 はメジャーナンバー 8 マイナーナンバー 19 を持ち、システムの二つ目の SCSI ドライブの三番目の DOS "基本" パーティションを参照する。
現在は、ブロックデバイスだけが提供されている。ロー・デバイス (raw device) はまだ実装されていない。
struct hd_geometry { unsigned char heads; unsigned char sectors; unsigned short cylinders; unsigned long start; };
この構造体へのポインタが ioctl(2) へのパラメータとして渡される。
このパラメータに入れられて返される情報は、 DOS によって理解されるような ドライブのジオメトリである。 このジオメトリは、ドライブの物理的なジオメトリ ではない。 この情報はドライブのパーティションテーブルを作成する時に用いられる、 また、 fdisk(1), efdisk(1), lilo(1) の適切な操作に必要である。 もし、ジオメトリの情報が得られなければ、それぞれの値全てにゼロが入れ られて返される。
scsi(4) の ioctl(2) 操作も同様にサポートされる。 ioctl(2) のパラメータが必要で、それが NULL ならば、 ioctl(2) はエラー EINVAL で失敗する。