ここでは、ディスクドライブに固有の情報を示します。
すべてのダイレクトアクセス SCSI デバイス (訳注: これは「ハードディスク」を 意味する SCSI 用語です) で、ブロックサイズが 256バイトか 512バイト、または 1024バイトのものは使えるはずです。 これ以外のブロックサイズは使えませんが、多くの場合ブロックサイズまたは セクタサイズは SCSI の MODE SELECT コマンドを使って変更できます。
セクタサイズとは、デバイスのセクタに割り当てられたデータバイト数のことです。 例えば、CDROM のセクタサイズは 2048 です。
ブロックサイズとは、デバイスとのインターフェースに使用される論理ブロックの 大きさのことです。これは通常セクタサイズと等しいのですが、複数の小さな 物理セクタ (55M サイクエストドライブの場合には 256バイト) を大きな論理 ブロックにマップしたり、逆にひとつの物理セクタを複数の論理ブロックに 分割する (例えば、SUN コンパチブルの CDROM ドライブのブロックサイズは 512 バイトです) こともあります。
リムーバブルメディアデバイスには、Bernouli、フロプティカル、MO ドライブ、 Syquest などの種類があります。
理論的には、1テラバイトまでのドライブは使えるはずです。 9ギガバイトまでの小さなドライブに関しては、まったく問題はありません。
パーティションを切るときに、「シリンダが 1024 よりも多い」という 警告メッセージが表示される。 あるいは、1024 以降の論理シリンダを含んだパーティションからブート できない。
これは、BIOS の制限によるものです。
詳しい説明は、 ディスクのジオメトリ および パーティションの作成 を参照してください。
/dev/hd*
にパーティションが切れない
/dev/hd*
は SCSI デバイスではありません。
SCSI デバイスは /dev/sd*
です。
正しいデバイス名とパーティションの切り方については、 デバイスファイルや ディスクのジオメトリ、それに パーティションの作成 を参照してください。
Linux は、メディアがマウントされている時にはドライブのドアを ロックします。予期せぬメディアの入れ替えによって ファイルシステムが壊れるのを防ぐためです。
まずディスクをアンマウントしてください。
SCSI ドライバと BIOS との間で、使用すべき BIOS マッピングに関して 情報が食い違っていることがあります。 この場合、ブート時に LILO が「LI」まで表示してハングする などの問題を引き起こすことがあります。
この問題を回避するためには、DOS で使われる BIOS ジオメトリ
マッピングを調べて、これを /etc/lilo/disktab
に書き込む
必要があります。
あるいは、「linear」jfile 設定オプションを使うという方法も あります。
fdisk
が以下のようなメッセージを出力する
You must set heads sectors and cylinders.
You can do this from the extra functions menu.
そして fdisk を再起動すると、変更したはずのディスクジオメトリが 変更されていない。
パーティションの作成 を参照して ください。
Linux は ANSI SCSI リビジョン 1 以前の SCSI デバイスに対しては、
0 以外の LUN を探しに行きません。
0以外の LUN を認識させたければ、drivers/scsi/scsi.c
の
scan_scsis()
関数を変更する必要があります。
この問題はすでに解決されています。 カーネルを 1.1.38 にバージョンアップしてください。
訳注: 現在 Conner は Seagate に買収されています。
これは、先読みとキャッシュに関するマイクロコードのバグのためです。
Soenke Behrens (Conner テクニカルサポート) からのメールより :
過去数週間の間に、Linux オペレーティングシステムを使用していて Conner CFP1060x 1GB SCSI ドライブに深刻な問題が生じたという電話を 何人かのお客様から頂きました。 症状は、ファイルシステムの破壊 (inode の損傷) がシステムブート時にe2fsck
によって報告されるというものです。
CFP1060x (マイクロコードリビジョン 9WA1.62/1.66/1.68) と Linux を 使用されているお客様には、マイクロコードの修正が御利用頂けます。 マイクロコードをバージョンアップするためには、DOS ブートディスクと ハードディスクドライブにアクセスできる ASPI ドライバが必要です。 バージョンアップによって、新しいキューイングと先読みのコードが ドライブの不揮発性 SCSI RAM にダウンロードされます。
マイクロコードリビジョンが 9WA1.60 のディスクで問題が生じた 場合には、最寄りの Conner サービスセンターに連絡して、ディスクを バージョンアップしてもらう必要があります。 マイクロコードのリビジョンは、ドライブ上のラベルと、ドライブの下側の IC のひとつに貼られたラベルに書いてあります。
自分でバージョンアップできる自信のある方は、Conner テクニカルサポートに 連絡して、最新のマイクロコードを入手してください。 ヨーロッパの Conner テクニカルサポートの電話番号は +44-1294-315333 です。 アメリカの Conner テクニカルサポートの電話番号は 1-800-4CONNER です。
敬具
Soenke Behrens
ヨーロッパテクニカルサポート
SCSI ディスクのブロックデバイスメジャー番号は 8 で、BSD のような「ロー」 デバイスは存在しません。
ひとつの SCSI ディスクには、16個のマイナー番号が割り当てられています。 minor % 16 == 0 はディスク全体を表し、1 <= (minor % 16) <= 4 は4つのプライマリパーティションを、5 <= (minor % 16) <= 15 は拡張パーティション (訳注: 正確には「拡張パーティション中の 論理ドライブ」でしょう) を表します。
たとえば、以下のような構成では次のようにデバイス名が割り当てられます。 (ひとつのホストアダプタの場合)
Device Target, Lun SCSI disk 84M Seagate 0 0 /dev/sda SCSI->SMD bridge disk 0 3 0 /dev/sdb SCSI->SMD bridge disk 1 3 1 /dev/sdc Wangtek tape 4 0 none 213M Maxtor 6 0 /dev/sdd
標準的なデバイス名の付け方は、次のようになります。
/dev/sd{letter} ディスクデバイス全体 ((minor % 16) == 0)
/dev/sd{letter}{partition} そのデバイス上のパーティション
(1 <= (minor % 16) <= 15)
たとえば次のように。
/dev/sda block device major 8 minor 0 /dev/sda1 block device major 8 minor 1 /dev/sda2 block device major 8 minor 2 /dev/sdb block device major 8 minor 16
SCSI ディスクにパーティションを切るには、DOS、OS/2、Linux やその他の 標準的なパーティションの作成方法をサポートしている OS 上のパーティション 作成プログラムを使用することができます。
Linux の fdisk
プログラムを起動する場合は、必ずデバイスをコマンド
ラインで指定してください。例えば最初の SCSI ディスクにパーティションを
作成する場合には、以下のように入力します。
fdisk /dev/sda
デバイスを指定しなかった場合には、デフォルトの /dev/hda
が
使われてしまうことがあります。これは SCSI ディスクではありません。
fdisk
が次のようなメッセージを出力することがあります。
You must set heads sectors and cylinders.
You can do this from the extra functions menu.
Command (m for help):
あるいは HDIO_REQ
または HDIO_GETGEO ioctl
が失敗したという
メッセージが出力されることもあります。
こういう場合には、
ディスクのジオメトリ
での説明にしたがって、ディスクのジオメトリを入力しなければなりません。
また LILO
を使ってそのディスクからカーネルをブートするには、
/etc/disktab
にもディスクジオメトリを設定する必要があります。
ディスクジオメトリを入力した場合には、その後 fdisk
を起動しよう
とすると同様のメッセージが表示されます。これは PC がディスクジオメトリ
情報をパーティションテーブルに保存しないためで、異常ではありません。
それ自体は問題とはなりませんし、そのドライブに作成したパーティション
を Linux でアクセスすることにも問題はありません。
しかし、いくつかのメーカーの出来の悪いインストールプログラムの中には、
これをうまく処理できないものもあります。
その場合にはメーカーに連絡し、プログラムを修正するよう要求してください。
場合によっては、シリンダ 1024 以降に食い込んだパーティションに
関する警告メッセージが出力されることがあります。そのような
パーティションを作成した場合、そのパーティションから LILO を
使って Linux カーネルをブートすることはできません。
しかし、一部または全部がシリンダ 1024 以降にあるルートパーティションを
作成できないわけではありません。
シリンダ 1024 以下に小さな /boot
パーティションを
作成するか、既存のパーティションからカーネルをブートすれば
よいからです。
Linux では、ディスクは SCSI ホストアダプタから見える通りに、エラーの ない 0 から N-1 まで番号づけされた N 個のブロックとして認識されます。 一方 DOS や BIOS では賢いディスクにも過去の慣習が適用されてしまい、 このようなリニアなアドレッシングが恣意的にヘッド/シリンダ/セクタに マッピングされてしまいます。
このことは、Linux でドライブにパーティションを切る場合に問題となる
おそれがあります。DOS や BIOS がどのようにジオメトリをマップするかを
知る汎用的な方法がないからです。多くの場合 HDIO_GETGEO ioctl()
が
このマッピングを知るために使えます。
残念ながら、一部のメーカー (Seagate) のように、ひねくれた、標準から
外れた、しかも文書化されていない方法でマッピングを行っている場合、
この方法は使えず、ジオメトリをマニュアルで指定する必要があります。
マニュアル指定には、いくつかの方法があります。
1 <= heads <= 256 1 <= cylinders <= 1024 1 <= sectors <= 63
NU (訳注: Norton Utilities のことでしょう) のようなプログラムを使うこと もできますし、次のプログラムも使えます。
begin 664 dparam.com MBAZ``##_B+^!`+N!`(H'0SP@=/D\,'5:@#]X=`6`/UAU4(!_`3AU2H!_`P!U M1(I7`H#J,(#Z`7<Y@,*`M`C-$PCD=3-14HC()#\PY.@R`.@J`%J(\/[`,.3H M)0#H'0!8AL2Q!M+L0.@7`+K"`;0)S2'#NIP!ZR"ZQ0'K&[K5`>L6N]T!,=*Y M"@#W\8#",$N(%PG`=>^)VK0)S2'#=7-A9V4Z(&1P87)A;2`P>#@P#0H@("!O L<B`@9'!A<F%M(#!X.#$-"B1);G9A;&ED(&1R:79E#0HD("`D```````D``!O ` end
このプログラムを実行すると、コマンドラインで指定した BIOS アドレス (0x80 が最初のディスク、0x81 が 2番目のディスク) のドライブについて、 セクタ数、ヘッダ数、シリンダ数をプリントします。
つまり、dparam 0x80
を実行して以下のように表示された場合、
60 17 1007
C: ドライブのセクタ数が 60、ヘッド数が 17、シリンダ数が 1007 で あることを示しています。