Optical disk driver for FreeBSD 3.5-RELEASE =========================================== Sep. 24, 2000 秋山 俊輔 akiyama@FreeBSD.org 概要 ---- 皆さん、大変お待たせしました。od-driver が帰ってきました。 FreeBSD 3.0-RELEASE より、従来の Julian SCSI ドライバが SCSI CAM ド ライバに変更され、これとともに od(4) は da(4) に一本化され、サポート されなくなりました。作者としては、たいへん残念だったのですが、諸々の 事情により、開発を継続することを断念していました。しかしながら、 da(4) と一本化されたことにより、disklabel や newfs の誤操作を繰り返 すこと等を経験することになり、ことここに至って、改めて od(4) の開発 を再開することにしたのでした。 このような経緯を経て開発された本ドライバ・セットは、FreeBSD 3.5-RELEASE において、光ディスクの特性に応じたドライバを用意し、同リ リースにおけるいくつかのバグの修正等を行ったものとなっています。 * 光ディスク・ドライブを od(4) として認識し使用できます。 * DVD-RAM ドライブ (松下 LF-D100, 東芝 SD-W1101/SD-W1111, CREATIVE RAM1216S) が使用できます。また、これらのドライブは、od(4) および cd(4) として使用できます。 * UFS において、旧バージョンのシステムで作成したメディアとの互換性 をとることができます。 * MSDOS ファイル・システムで、1024 バイト/セクタ, 2048 バイト/セ クタのメディアを使用できます。 * 従来の od-driver では、コンパイル・オプションとなっていた動作状 態の変更のいくつかを /sbin/sysctl コマンドで行うことができます。 なお、本ドライバ・セットの一次配布先は、 ftp://daemon.jp.freebsd.org/pub/FreeBSD-jp/OD/ となっています。また、ここには過去のリリースやユーティリティも置いて あります。 変更履歴 -------- od-driver-3.4R からの変更点は、次の通りです。 * MSDOS-FS のパッチが不要になりました。 od-driver-3.3R からの変更点は、次の通りです。 * 富士通の GIGAMO ドライブ(MCD3130SS)の一部で 1.3GB メディアが使 用できなかった点を修正。 * MBR の中のリザーブ領域を使うブート・セレクタを使用していると、カー ネル起動時にルート・ファイル・システムをマウントできない点を修正。 * MSDOS-FS を更新。 * /sbin/newfs_msdos コマンドの不具合を修正。 動作環境 -------- このドライバ・セットは、FreeBSD 3.5-RELEASE 上で動作を確認しています。 2048 バイト/セクタのメディアでの動作も確認済みです。 開発機の環境は、以下の通りです。 CPU : AMD K6-III 450MHz MB : ASUS P5A-B WOA Memory : 256 MB SCSI Adapter : Adaptec AHA-2940UW MO Drive : 富士通 M2512A(3.5 インチ内蔵型) : 富士通 M2513A(3.5 インチ内蔵型) DVD-RAM Drive : 松下 LF-D100 (内蔵型) MO ドライブは、光メモリ・デバイスのモード(FreeBSD ならば、システム 立ち上げ時のデバイス・プローブで、"Removable Optical" デバイスと表示 されるモード)で使用します。 制限事項 -------- βテストを行った過程等で、以下のような不具合が発見されています。 * バッド・セクタに対して書き込みを行うと、カーネルがフリーズする。 カーネル内での書き込み時のエラーに対する処理が不正のようです。 現在のところ、有効な対策をみつけることができていません。 * ports の mei で、メディアの eject を行うことができない。 これは、mei が CAM 対応になっていないためです。メディアの eject を行う場合は、camcontrol コマンドを使用するか、拙作の eject コマ ンドを使用してください。 なお、このコマンドは既に ports 化してあります。 ports/sysutils/eject を参照してください。 * DVD-RAM ドライブにおける動作に関して制限がある。 DVD-RAM ドライブで DVD-ROM ディスクを読み出す場合、ISO-9660 形式 が共に記録されているものは読み出せますが、UDF 形式でのみ記録され ているものは、ファイル・システムが対応していませんので、読み出す ことはできません。 また、DVD-RAM ドライブは、od と cd の各デバイスとしてそれぞれ使 用することができますが、同時にデバイスのアクセスを行った場合の動 作は、保証されません。メディアを、同時に od(4) と cd(4) でマウン トするようなことは行わないでください。 内容 ---- このドライバ・セットには以下の内容のファイルが納められています。 README.od-J このファイル README.od このファイルの英語版 kernel.diff カーネルに当てるパッチ MAKEDEV.diff MAKEDEV に当てるパッチ newfs_msdos.diff newfs_msdos に当てるパッチ release.diff sysinstall 関連パッチ disktab.diff disktab へのパッチ (光ディスク用サンプル disktab エントリ) extract.sh 必要なソース・ファイルを抜き出すシェル・ スクリプト tested.txt βテスタの動作環境リスト alpha/ alpha アーキテクチャ用に追加で当てるパッ チ ドライバ関連部分は、パッチ・ファイルの形で用意されています。使用方法 は後述します。 さらに、伊藤 暢浩(いとう のぶひろ)さん による MO ドライブ動作リストを同封して います。 MO-REPORT/MO-List20000921.txt 動作確認されている光磁気ディスクドライ ブの一覧 MO-REPORT/result-20000921.txt 光磁気ディスクの動作確認報告 パッチの使用方法 ---------------- このドライバ・セットは以下のようにして使用します。 1.パッチを当てるソースを用意する このドライバ・セットを使用するには、カーネル他のソース・ファイルが 必要になります。ディストリビューション・セットの中から、最低限カー ネル(ssys.??)のソースを展開してください。 必要なソース・ファイルは以下の通りとなります。 カーネルのみ再構築する場合: sys/ 以下のファイル (ssys.??) newfs_msdos のバグ修正版をインストールする場合: sbin/Makefile (ssbin.??) sbin/Makefile.inc (ssbin.??) sbin/newfs_msdos/ 以下のファイル (ssbin.??) sysinstall の再構築しインストールを行う場合: release/ 以下のファイル (srelease.??) lib/libdisk/ 以下のファイル (slib.??) gnu/lib/libdialog/ 以下のファイル (sgnu.??) sbin/disklabel/ 以下のファイル (ssbin.??) usr.bin/cksum/ 以下のファイル (subin.??) 添付の extract.sh を使用すると、必要なファイルを CD-ROM 等から抜き 出すことができます。 # sh extract.sh として使用します。スクリプトからの質問に対して、適当なディレクトリ 名を入力します。なお、Enter キーのみ押すと、表示されているデフォル トのディレクトリが使用されます。 なお、このパッチ・セットも適当なディレクトリに展開しておきます。 2.MAKEDEV へのパッチ /dev ディレクトリにある MAKEDEV を od(4) に対応したものにするため、 パッチを当てます。 ex. # cd /dev # patch < /somewhere/od-driver-3.5R/MAKEDEV.diff 3.disktab へのパッチ /etc/disktab にパッチを当てて、光ディスク用の disktab エントリを追 加します。 ex. # cd /etc # patch < /somewhere/od-driver-3.5R/disktab.diff 4.カーネル・ソース・ファイルにパッチを当てる /usr/src ディレクトリの下等で、カーネル用パッチ(kernel.diff)を当 ててください。patch コマンドには、"-p1" オプションが必要です。 ex. # cd /usr/src # patch -p1 < /somewhere/od-driver-3.5R/kernel.diff 5.sysinstall の再作成/インストール sysinstall コマンドを再作成/インストールを行わない方は、次のステッ プ6に進んでください。 (1) リリース関連パッチを当てる ソース・ファイルにリリース関連パッチを当てます。 patch コマンドには、"-p1" オプションが必要です。 ex. # cd /usr/src # patch -p1 < /somewhere/od-driver-3.5R/release.diff (2) ライブラリ(libdisk)の再作成/インストール libdisk を作り直して、これをインストールします。 ex. # cd /usr/src/lib/libdisk # make obj # make depend # make # make install (3) sysinstall コマンドの再作成/インストール sysinstall コマンドを再作成し、これをインストールします。 ex. # cd /usr/src/release/sysinstall # make obj # make depend # make # make install これで、sysinstall コマンドで、od(4) を扱うことができるようにな ります。 6./sbin/newfs_msdos の再作成/インストール このパッチ・セットがリリースされた時点において、全てのブランチの newfs_msdos コマンドは、512 バイト/セクタ以外のメディア上に正しく ファイル・システムを構築することができない、という不具合があります。 本パッチ・セットには、この不具合を修正するためのパッチが含まれてい ますが、newfs_msdos を再作成/インストールしないのであれば、ステッ プ7へ進んでください。 (1) パッチを当てる ソース・ファイルにパッチを当てます。 ex. # cd /usr/src/sbin/newfs_msdos # patch < /somewhere/od-driver-3.5R/newfs_msdos.diff (2) コマンドを再作成し、インストールする パッチ後のソースから newfs_msdos を再作成し、これをインストー ルします。 ex. # make obj # make depend # make # make install 7.光ディスク対応のカーネルを作成/インストール 光ディスクのデバイス名は od です。カーネル・コンフィギュレーショ ン・ファイルの中に、 device od0 を追加して、カーネルを作成してください。(GENERIC にはすでに記述し てあります) なお、本ドライバにてサポートされている DVD-RAM ドライブを cd デバ イスとしても認識させる場合は、さらに、 device cd0 を追加します。(これも GENERIC にはすでに記述してあります) なお、カーネル・コンパイル時に設定可能なオプションに関しては、次の セクションで説明を行います。 新しいカーネルが作成できたら、これをインストールします。 ex. [コンフィグレーション・ファイルを GENERIC からコピーして使う] # cd /usr/src/sys/i386/conf # cp GENERIC ODDRIVER # vi ODDRIVER # config ODDRIVER # cd ../../compile/ODDRIVER # make depend # make # make install 8.デバイス・ファイルを作成する MAKEDEV スクリプトで、必要となる光ディスクのデバイス・ファイルを再 作成します。 この作業は、*** 必ず *** 行ってください。 この作業を行わないと、od(4) は正しく動作しません。 また、スライス対応のデバイス・ファイル(od*s*)も必要ならば、再度 作っておいてください。 ex. [スライス4に対応するデバイス・ファイルを再作成する] # cd /dev # sh MAKEDEV od0 od0s4a なお、光ディスクが da(4) から od(4) として認識されるようになること で、da(4) のデバイス・シーケンスがずれるケースがあると思われます。 この場合は、該当する da(4) のデバイス・ファイルの再作成作業や /etc/fstab の修正等の作業が発生しますので、注意してください。 9.システムをリブートする システムをリブートします。 これで、次にシステムが立ち上がったときから、光ディスクを /dev/od*[a-h] /dev/rod*[a-h] /dev/od* /dev/rod* /dev/od*s[1-4] /dev/od*s[1-4][a-h] /dev/rod*s[1-4] /dev/rod*s[1-4][a-h] として使用することができるようになります。デバイス名が異なる他は ほぼ da(4) デバイスとほとんど同じように使うことができます。 光ディスク・ドライバのカーネル・コンフィグレーション ---------------------------------------------------- 本バージョンのドライバには、カーネル MIB スタイル・パラメータの設定 によりその動作を変更することができます。また、一部は、従来スタイルの カーネル・コンフィギュレーション・ファイルにオプションの形で記述し、 カーネルのコンパイル時に設定を行います。 1.カーネル MIB スタイル・パラメータを使用するもの カーネル MIB スタイル・パラメータは、/sbin/sysctl コマンドを使用し て参照/設定を行います。本ドライバは、この方法によって、以下のパラ メータの設定を行うことで、その動作を変更することができるようになっ ています。 なお、これらのパラメータは、/etc/rc.sysctl 等で設定すると良いでしょ う。 (1) kern.cam.od.auto_turnoff タイプ:integer 初期値:0 0 以外の値をセットすると、光ディスク・メディアをマウントしてい ない場合は、ドライブのスピンドル・モータの動作を停止します。 ただし、このオプションを指定すると、メディアをマウントしていな い場合に、CAM passthrough device (/dev/pass*) を使用しようとし ても、動作しないドライブがあるので注意してください。 (2) kern.cam.od.wait_ready_count タイプ:integer 初期値:0 光ディスク・デバイスをオープンする際に、ドライブがレディ状態に なっているかどうかのチェックを行う回数を設定します。チェックの 間隔は、現在1秒おきとなっています。 ただし、このオプションを指定すると、本当にドライブがレディ状態 でない場合(メディアが入っていないなど)、エラーとなるまでに時 間を要するようになるので注意が必要です。 2.カーネル・コンフィギュレーション・ファイルに記述するもの 以下の設定は、カーネル・コンフィギュレーション・ファイルに、オプショ ンの形で記述します。したがって、設定の変更には、カーネルの再生成/ インストールが必要です。 (1) FFS_COMPAT_XXXXBSD UFS でフォーマットされたメディアにおいて、過去のバージョンとの 互換性を持たせます。また、このオプションを使用することで、 NetBSD/i386 システムで作成したメディアとの互換性もとることがで きます。 このオプションを使用する場合は、カーネル・コンフィギュレーショ ン・ファイルに、 options FFS_COMPAT_XXXXBSD を追加してください。 FreeBSD バージョン2系列から、バージョン3系列へ移行する段階で、 メディアのセクタ長が 512 バイト以外のものをサポートするため、 newfs コマンドに修正が行われました。このため、バージョン3系列 のシステムでは、バージョン2系列で newfs を行ったメディアの読 み書きを行うことができません。 このオプションを指定して作成したカーネルでは、バージョン2系列 で newfs を行ったメディアに対しても読み書きを行うことができる ようになります。また、副次的作用により、NetBSD/i386 システムで 作成したメディアに対しても互換性が生まれます。 光ディスクの使用方法 -------------------- 本ドライバ・セットを使用することで、光ディスクを(少なくとも)以下の ファイル・システムとして使用することが可能になります。 a. MSDOS ファイル・システム(スーパー・フロッピー・フォーマット) b. MSDOS ファイル・システム(HD 互換フォーマット) c. UNIX ファイル・システム(UFS) a. および b. は、mount コマンドで "-t msdos" オプションを指定するか、 /sbin/mount_msdos コマンドを使用することで、利用可能となります。 なお、MSDOS 形式のファイル・システムは、/sbin/newfs_msdos コマンドを 使用して作成することができます。 c. の UFS として使用する場合、ディスク・ラベルの書き込み、および、ファ イル・システムの構築が必要となります。 これには、(パッチを当てて再構成した)/stand/sysinstall を使用して一 連の作業を行うことができます。 これが、光ディスク上にファイル・システムを構築する、最も簡単な方法で しょう。 ここでは、手動で、光ディスク上に UFS を作成して、使用する方法につい て記述します。 現行バージョンの FreeBSD において UFS は、 (1) 全てのディスク領域を使う (2) ディスク上のスライス(いわゆる物理パーティション)の領域を使う 方法で構築することができます。 (1) の場合、ディスク・ラベルの書き込み/ファイル・システムの構築を行 うことで、通常のディスクと同じようにマウントして使用可能となります。 1. disktab エントリの準備 パッチを当てた後の /etc/disktab を参照してください。サンプルでは、 1メディア/1パーティションですが、必要なら、さらに細かくパーティ ションを定義します。 2. ディスク・ラベルの書き込み 用意した disktab エントリを使って、ディスク・ラベルを書き込みま す。 ex. # disklabel -r -w od0 mo128 3. ファイル・システムの構築 newfs コマンドでファイル・システムを作成します。 ex. # newfs /dev/rod0a or # newfs -t 64 -u 32 /dev/rod0a or # newfs -t 0 -u 0 /dev/rod0a (2) の場合は、まずスライスの確保を行ってから、ディスク・ラベルの書き 込み/ファイル・システムの構築を行います。スライスの確保は、fdisk コ マンドを使用します。 1. スライスの確保 fdisk コマンドを使って、FreeBSD 用のスライスを確保します。 ex. # fdisk -i /dev/rod0 or # fdisk -u /dev/rod0 2. disktab エントリの準備 確保した FreeBSD 用スライスのサイズに応じた disktab エントリを作 成します。なお、各 UFS パーティションのオフセットは、FreeBSD 用 スライス内のオフセット値を使用します。 disktab エントリのパラメータは、fdisk コマンドで書き込まれた MBR の内容と矛盾してはいけません。矛盾したパラメータがあると、ディス ク・ラベルが書き込めません。 3. ディスク・ラベルの書き込み 用意した disktab エントリを使って、ディスク・ラベルを書き込みま す。 ex. # disklabel -r -w od0 XXXXX 4. ファイル・システムの構築 newfs コマンドで、ファイル・システムを構築します。 使用するデバイスは、確保したスライスに対応したデバイスを使用しま す。 ex. # newfs /dev/rod0s1a or # newfs -t 64 -u 32 /dev/rod0s1a or # newfs -t 0 -u 0 /dev/rod0s1a デバイス・ファイルと用途 ------------------------ /dev/MAKEDEV スクリプトで作成するデバイス・ファイルには以下のものが あります。 /dev/od*[a-h] /dev/rod*[a-h] /dev/od* /dev/rod* /dev/od*s[1-4] /dev/od*s[1-4][a-h] /dev/rod*s[1-4] /dev/rod*s[1-4][a-h] これらのデバイス・ファイルは、それぞれ用途によって使い分けます。 以下、簡単にまとめておきます。 なお、デバイス名の先頭に r が付くものは、キャラクタ・デバイスです。 (下の表には入れていません。) ┌───────────┬────────────────────┐ │ デバイス・ファイル │ 用 途 │ ┝━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━┥ │/dev/od* │ディスク全体のアクセスに使用します。 │ │ │スーパー・フロッピー・フォーマットの MO │ │ │をマウントする場合などは、このデバイス・│ │ │ファイルを指定します。 │ │ │MBR の書き込みなども、このデバイスを使う│ │ │ようです。 │ ├───────────┼────────────────────┤ │/dev/od*[a-h] │UFS の各パーティションに対応する。 │ │ │ディスクがスライス分割されている場合は、│ │ │最初に現れた FreeBSD スライスにマップさ │ │ │れます。 │ ├───────────┼────────────────────┤ │/dev/od*s[1-4] │各スライス(物理パーティション)に対し │ │ │てのアクセスに使用します。HD 互換フォー │ │ │マットの MO の DOS 領域のマウントには、 │ │ │このデバイス・ファイルを指定します。 │ ├───────────┼────────────────────┤ │/dev/od*s[1-4][a-h]  │スライス内に設けられたパーティションに │ │ │アクセスする場合は、これらのデバイス・ │ │ │ファイルを使用します。 │ └───────────┴────────────────────┘ SPECIAL THANKS ---------------------------- βテスタ用 ML の作成/運用をおこなっていただきました: たかのゆ〜じ さん od-driver パッチセットのβテストを行ってくださいました: 森田 昭夫 さん たかの ゆ〜じ さん YABU (Shigeru Kasahara)/笠原 さん 下川 俊彦 さん SETA -sheta- Takuji さん 井上 敬介 さん 許 勝益 さん Sugiura Takakazu さん 山崎 暢 さん かわぐち ひろみち さん 大橋 健 さん 高宗 和暁 さん 谷口 恭弘 さん 斉藤 哲也 さん FreeBSD(98) に関するテストに協力していただきました: 小金丸 信幸 さん MSDOSFS に関するパッチに関して協力していただきました: 柴田 千春 さん MO-REPORT を頂きました: 伊藤 暢浩 さん 頂いたパッチは、今も生き続けています: 今田 宏司 さん 皆さん、ありがとうございました。 その他 ------ バグ・フィックスや機能拡張などがあれば、ぜひ私の方にフィードバック をお願いします。 なお、他の光ディスクの disktab エントリも募集しています。 $Id: README.od-J,v 3.12 2000/09/24 11:06:42 akiyama Exp $