--- [管理番号 87] (最終更新 2001/08/12 02:51:17) Q. セカンダリのマスタに FreeBSD を入れたとき、いつも boot: で 1:wd(2,a)/kernel を入力するのは面倒なんですが。 A. セカンダリのマスタに FreeBSD を入れると、起動時は wd2 として認識されて しまうので、最初は "boot:1:wd(2,a)/kernel" というようにオプションをつけ なければ FreeBSD は起動してくれません。 もし boot でオプションをつけずに直接 FreeBSD を起動させようとするな ら、方法は 2 つあります。ひとつ目は [管理番号 85] を参照してくださ い。もう一つの方法としてカーネルの再構築をして FreeBSD の入っている wd2 のドライブを wd1 として認識させる方法があります。 必要な作業は 1. カーネルコンフィグレーションファイルの変更 2. カーネルの再構築 3. デバイスファイルの作成 4. /etc/fstab の変更 5. 再構築したカーネルのインストール です。 FreeBSD 2.2.x-RELEASE では IDE のみのシステムの場合 1台目のディスク(wd0) - プライマリ マスタ (wdc0 drive0) 2台目のディスク(wd1) - プライマリ スレーブ (wdc0 drive1) 3台目のディスク(wd2) - セカンダリ マスタ (wdc1 drive0) 4台目のディスク(wd3) - セカンダリ スレーブ (wdc1 drive1) という対応を前提としています。この対応はカーネルのコンフィグレーション ファイルで変更できます。 例えば セカンダリのマスタに接続されている2台目のハードディスクを 起動ディスクとする ような場合は wd1 に セカンダリマスタ (wdc1 drive0) を対応させる必要があ ります。 注意: 既にインストール済みの場合、デバイスファイルや /etc/fstab の内容は wd2 として作成されていますから、そのまま作り直したカーネルをインス トールして再ブートするとファイルシステムがマウントできなくなって何 もできない状態になってしまうので気をつけて下さい。 1. カーネルコンフィグレーションファイルの変更 コンフィグレーションファイルの controller wdc のセクションを 次のように変更します そのためにはまず (/usr/src)/sys/i386/conf/GENERIC のファイルを 適当な名前でコピーして以下のように一部変更します。 変更箇所は 2,3 箇所。 ------------------------------------------------------------------------- ident MYMACHINE ← 新しく作ったファイル名 ..... config kernel root on wd1 ← "wd0" から "wd1" に変更 .... controller wdc0 at isa? port "IO_WD1" bio irq 14 vector wdintr disk wd0 at wdc0 drive 0 controller wdc1 at isa? port "IO_WD2" bio irq 15 vector wdintr # disk wd2 at wdc1 drive 0 行頭に # を書いて無効化 disk wd1 at wdc1 drive 0 ↑ FreeBSD の入っている wd2 を wd1 に変更 2. カーネルの再構築 このような設定を行なって カーネルの再構築を行ないます。コンフィグレー ションファイルの名前を MYMACHINE とした場合、 # config MYMACHINE # cd ../../compile/MYMACHINE/ # make depend # make ここではまだ再起動をしないで、そのまま次の操作に入ってください。 3. デバイスファイルの作成 wd1 で足りないデバイスファイルを作ります。2 台目のディスクの場合 # cd /dev/dev # sh MAKEDEV wd1s1a 4. /etc/fstab の変更 /etc/fstab の変更を行ないます。 FreeBSD が wd2 としてインストールしたときの /etc/fstab -------------------------------------------------------------------------- /dev/wd2s1b none swap sw 0 0 /dev/wd2a / ufs rw 1 1 /dev/wd2s1f /usr ufs rw 1 1 /dev/wd2s1e /var ufs rw 1 1 proc /proc procfs rw 0 0 /dev/wcd0c /cdrom cd9660 ro,noauto 0 0 -------------------------------------------------------------------------- このファイルの "wd2*" をすべて "wd1*" に変更。 5. 再構築したカーネルのインストール 最後に再構築したカーネルをインストールします。 # cd /usr/src/sys/compile/MYMACHINE # make install 以上の作業を行なった後、再ブートすれば自動的に FreeBSD が起動するでしょ う。 --- [管理番号 99] (最終更新 2004/04/09 05:05:40) Q. PS/2マウスが使えません。 A. 確認する手順です。 0. kernel の構成に psm0 があるか、psm0 が認識されているか確認。 起動中のメッセージ(これは起動後 dmesg コマンドでも見ることが できます)の中に psm0 at 0x60-0x64 irq 12 on motherboard という表示があれば psm0 が認識されています。 1. 認識されていない場合、 起動時の Boot: で -c を入力し ls とやると kernelに入っているデバ イスの一覧が表示されます。('visual' と入力すると ビジュアルモード になりますので 見やすくなります。psm0 は visual 時には Input の menu の中にあります。) ここで disable となっているモノは検出しません。 enable psm0 を入 力して検出するようにしましょう。 また FreeBSD 2.2.6 or 2.2.7 RELEASE ではマウスとの相性がある場合 があります。 マウスを交換すると認識されたという報告もあるので、 マウスを交換してみてください。 (psm0 と、sc0 は、conflict しますが、同じ LSI を使用しているので、 正常な状態です。問題ありません。) 2. 上の 1.で、psm0 が、どこにも見つからない場合、その kernel は、 psm0 を、使用できません。psm0 を含んだ kernel を使用するか、 つくり直して下さい。(kernel のつくり直し方は Handbook参照。) 3. ここまでは kernel の話。XFree86 で PS/2 マウスを使うには XF86Config の Section "Pointer" に、 Protocol "ps/2" Device "/dev/psm0" を記述します。 4. 2.2.6R 以降では moused を利用するとコンソール画面でもマウスが 使えますし、XF86Setupでも最初からマウスが利用できて便利です。 インストーラや /stand/sysinstall の「マウス」の設定で マウスデーモンを有効にします。日本語インストーラの場合は 「有効化」を選んでもマウスカーソルはあらわれないので注意してくだ さい。直接 rc.conf を編集する場合は次のようにします。 moused_enable="YES" moused_type="auto" moused_port="/dev/psm0" moused_flags="" X では XF86Config の設定は次のようになります。 Protocol "SysMouse" Device "/dev/sysmouse" --- [管理番号 386] (最終更新 2000/06/25 02:30:33) Q. 一つの HDD に複数の FreeBSD のスライスを作って、最初の FreeBSD スラ イス以外のところ (2 番目以降のスライス) にルートファイルシステムを置き ました。しかし、boot のさせ方が分らないのですが? A. FreeBSD 3.1-RELEASE 以降では問題なくブートできるはずです。それより前の FreeBSD のブートコードでは、最初に見つかった FreeBSD スライスにルートファ イルシステムがないといけません。無理せず HDD の構成を見直すか、または バージョンアップが得策でしょう。もしどうしても頑張ってみたいという人は、 [管理番号 1549] [管理番号 797] を参考にしてください。 --- [管理番号 521] (最終更新 1999/02/17 23:58:45) Q. FreeBSD 2.2.5-RELEASE を使っているのですが、ブート時に cannot alloc 5519969 bytes for typemap /dev/rccd0e: CAN'T CHECK FILE SYSTEM. /dev/rccd0e: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY. と出て、シングルユーザモードになってしまいます。どうしてでしょうか? A. /etc/rc から起動されるプロセスは、login class が daemon になるので すが、FreeBSD 2.2.5 の /etc/login.conf は、daemon の datasize が 32M しかないので、大容量のディスクを fsck しようとすると、malloc に失敗す る事があります (12GB の HDD でそうなりました)。 daemon の datasize を infinity にするか、2.2-STABLE の /etc/login.conf に置き換えると解決するでしょう。 --- [管理番号 527] (最終更新 2001/10/19 21:29:33) Q. DMA を使用する ISA サウンドカードやフロッピードライブなどを BOUNCE_BUFFERS オプションを外したカーネルで使用することはできますか? A. できます。 BOUNCE_BUFFERS オプションは実装メモリ 16MB 以上のマシンでISA バスマス タな SCSI カードを使用する場合に限り必要なものです。それ以外の DMA デ バイスは別のバウンス・バッファ機構を利用しているため、BOUNCE_BUFFERS オプションを外したカーネルでも ISA サウンドカードやフロッピーの使用に は何の問題もありません。 --- [管理番号 530] (最終更新 1999/02/17 23:58:45) Q. メモリを 16MB 以上実装しています。カーネルに BOUNCE_BUFFERS オプショ ンを指定しておく必要がありますか? A. ISA バスマスタな SCSI カードを使用しないのであれば、BOUNCE_BUFFERS オプションを指定する必要はありません。必要もないのに BOUNCE_BUFFERS オ プションを指定していると、実装メモリ 64MB あたり 1MB を無駄にすること になりますので、できれば外しておいた方がよいでしょう。 --- [管理番号 558] (最終更新 1999/02/17 23:58:45) Q. FreeBSD 2.2.5-RELEASEにおいてリモートプリンタに印刷しようとすると、 印刷が途中で止まってしまい、lpqコマンドで調べると `Warning: no daemon present' と言われてしまいます。何故でしょう? A. 2.2.5-RELEASEでは、リモートプリンタへの出力中に/etc/printcapの`ct'の 項目に指定している時間(デフォルトでは120秒)が経過すると実際にデータを 転送している子プロセスをlpdデーモンが殺してしまうそうです。 回避策としては、/etc/printcapのリモートプリンタの項に`ct#0'(0はこ の場合無限大を意味する)という記述を加える、あるいは、lpdを2.2-stable のものと入れ替えるといった方法があります。以下のパッチを当ててもよ いでしょう。 Index: src/usr.sbin/lpr/common_source/displayq.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/lpr/common_source/displayq.c,v retrieving revision 1.4.2.5 retrieving revision 1.4.2.6 diff -u -u -r1.4.2.5 -r1.4.2.6 --- displayq.c 1997/10/15 12:25:35 1.4.2.5 +++ displayq.c 1997/11/07 13:20:29 1.4.2.6 @@ -242,6 +242,7 @@ savealrm = signal(SIGALRM, alarmhandler); alarm(CT); fd = getport(RM, 0); + alarm(0); (void)signal(SIGALRM, savealrm); if (fd < 0) { if (from != host) Index: src/usr.sbin/lpr/lpd/printjob.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/lpr/lpd/printjob.c,v retrieving revision 1.11.2.3 retrieving revision 1.11.2.4 diff -u -u -r1.11.2.3 -r1.11.2.4 --- printjob.c 1997/10/15 09:56:00 1.11.2.3 +++ printjob.c 1997/11/07 13:20:37 1.11.2.4 @@ -1474,6 +1474,7 @@ savealrm = signal(SIGALRM, alarmhandler); alarm(CT); pfd = getport(cp, port); + alarm(0); (void)signal(SIGALRM, savealrm); if (pfd < 0 && errno == ECONNREFUSED) resp = 1; @@ -1541,6 +1542,7 @@ savealrm = signal(SIGALRM, alarmhandler); alarm(CT); pfd = getport(RM, 0); + alarm(0); (void)signal(SIGALRM, savealrm); if (pfd >= 0) { (void) snprintf(line, sizeof(line), "\2%s\n", RP); --- [管理番号 601] (最終更新 1999/02/17 23:58:45) Q. 2.2.6-RELEASE になったら、mule の ange-ftp が使えなくなりました。 A. 2.2.6-RELEASE になって、ftp が変わったのが原因です。ftp の -e オプ ションを使用して、コマンドライン編集機能を無効として下さい。 また、転送状況表示 (transfer progress bar) も不具合の原因となるので無 効とするのがよいです。無効とするには、環境変数 TERM を dumb にします。 以上を実現するには、具体的には .emacs に以下の記述を追加します。 (setq ange-ftp-ftp-program-name "env") (setq ange-ftp-ftp-program-args '("TERM=dumb" "ftp" "-i" "-n" "-g" "-v" "-e")) --- [管理番号 750] (最終更新 1999/02/17 23:58:45) Q. FreeBSD 2.2.7-RELEASE の machine に ~/.rhosts を設定して、 その設定をした別の machine から以下を実行すると、 % rsh host ls 次のようなメッセージがでて Broken pipe 実行できません。~/.rhosts の記述は正しく行っていると思うのですが、 なぜでしょうか? また、正しく動作させるには、どうしたらいいのでしょうか? A. FreeBSD 2.2.7-RELEASE の /usr/libexec/rshd には、Bug があります。 ERRATA.TXT (revision 1.1.2.5)に、次のように書かれています。 --------------< ERRATA.TXT revision 1.1.2.5 の一部 >----------------------- o rshd was broken during -Wall cleanup, as noted in PR#7500 Fix: This was fixed in the 2.2-stable branch as of 1998/07/24 04:32:21 in revision 1.9.2.9 of /usr/src/libexec/rshd/rshd.c. Obtain the fixed version via CVSup (see instructions in handbook or simply ``pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/CVSup/cvsupit.tgz'' and follow the instructions) or get it from FTP at: ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-stable/src/libexec/rshd/rshd.c --------------< ERRATA.TXT revision 1.1.2.5 の一部 >----------------------- 正しく動作させるようにするには、上に書かれているように source file を とってきて、 rshd を作り直して、差し換えましょう。なお、上記ファイルは ftp.jp.FreeBSD.org 等のミラーサイトにもあります。 source file が /usr/src の下に展開されている場合、次のような手順で差し換える ことができます。 ここでは、ftp で /tmp に rshd.c (revision 1.9.2.9) をとってきているとします。 # cd /usr/src/libexec/rshd # cp rshd.c rshd.c.orig # cp /tmp/rshd.c rshd.c # make # make install これで、/usr/libexec/rshd の差し換えができていますので、~/.rhosts 等を設定して rsh の動作を確認してみてください。 --- [管理番号 764] (最終更新 1999/02/17 23:58:45) Q. SCSI の CD-ROM からインストールすると途中で読み出しエラーになる。 (FreeBSD 2.2.5) A. バージョン 2.2.5R , Adaptec 2940U を使っている場合、一部の SCSI CD-ROM でこの現象が報告されています。その他の場合でも以下のような現象 が発生します。 1) CD-ROMからのインストール時に途中で読み出しエラー。 2) packages のインストール中にエラーコード1でエラー。 3) 一度エラーが出るとCD-ROMや、場合によってはディスクへのアクセスが不 能になる。 もしもインストール後にこのようなエラーが発生したら、/var/log/messages を見てください。下記のようなエラーメッセージが出ていればこの現象だとい えます。 Mar 4 23:45:32 myname /kernel: ahc0: Issued Channel A Bus Reset. 3 SCBs aborted Mar 4 23:45:33 myname /kernel: cd0(ahc0:6:0): UNIT ATTENTION asc:29,0 Mar 4 23:45:33 myname /kernel: cd0(ahc0:6:0): Power on, reset, or bus device reset occurred 原因ははっきりしていませんが、高速のCD-ROMを使うとこの現象が発生する場 合があります。対策は以下の方法があります。 1) バスを確認する。 ケーブルの長さを確認する。10MB/Secより速い設定ならば、1.5m以内、 5MB/Secより速い設定(FASTオプション)なら、3m以内になっているかを確認す る。ケーブルもハイインピーダンスの、良質ものを使っているか確認する。 2) ターミネータを確認する。 きちんと付いているか、PassiveタイプならActiveタイプに取り換えてみる。 3) SCSIカードの設定を以下のように変更する。 2940UBIOSの、SCSIデバイスの設定で CD-ROM の Enable disconnectionを no に設定する。 4) 遅いCD-ROMに交換してみる。 12倍速、16倍速、20倍速で誤動作が報告されています。しかし、4倍速、8倍速 タイプのものでは正常動作が報告されています。旧型のCD-ROMがあるならばそ れに替えてみてください。 5) ディスクが quantum の場合、Firmware をアップデートしてみる。 Firmware の非公式修正バージョンが出ています。 の config で OS に Linuxを選択して、行った先の quantum のリンクをたどった 所にあります。ただし、最近のディスクは既に修正されています。 6) SCSIカードを取り換えてみる。 DC-390に交換したら正常になったという報告があります。 --- [管理番号 765] (最終更新 1999/02/17 23:58:45) Q. jman が途中から表示されてしまいます。日本語は正常に表示できています。 A. [FreeBSD 2.2.2 以前] % jman ls とすると、途中から表示され、冒頭が表示されないなら、 /usr/local/share/groff/tmac の設定の不具合が原因です。 この問題は FreeBSD 2.2.5 Release よりも前の ports/ packages を 用いている場合に生じます。2.2.5 Release 以後の ports/packages では修正されています。 FreeBSD 2.2.5-Release 以降のバージョンでそれ以前の バージョンの jp-man-doc-*, jp-man-1.1, jp-groff-0.99 を 使用している場合にはこれらを pkg_delete して、 ja-groff-0.99, ja-man-1.1*, ja-man-doc-* を現在使用している バージョンの packages または ports から インストールして下さい。 2.2.5 よりも前の Release を 使用している場合には OS ごと upgrade を行うか、(あまりお奨めしませんが) 2.2-stable への アップグレードキットを を用いて/etc/make.conf および /usr/share/mk 以下の ファイルをアップグレードした上で ports-current の ja-groff-0.99 および ja-man-1.1* を インストールして下さい。 また、jmanのトラブルに関しては、 も参照してください。 --- [管理番号 793] (最終更新 1999/02/17 23:58:45) Q. カーネルを再構築する時、IRQ や I/O ポートの設定を間違えてしまいまし た。どうしたらいいですか? A. このまま起動すると、デバイスによっては正しい値を取得できない場合が あり、ハングアップしたり、リブートしたりすることがあります。起動時に、 Boot: と表示された時に、 kernel -c と入力して下さい。すると、 config> と表示されます。ここで、 visual と入力すると、デバイス設定画面が表示されますので、正しく設定し直して下 さい。すべての設定が終ったら、`q' キーを入力すると、FreeBSD が起動する はずです。 --- [管理番号 797] (最終更新 1999/02/17 23:58:45) Q. 2.2.x と 3.0 を、一台のディスクに共存させてインストールできますか? A. 基本的にはできません。しかし、以下のようなテクニックを使えば不可能 ではありません。このテクニックは、非常に危険な操作ですので、以下の 操作が何をしているか、ちゃんと理解できる人「のみ」が行ってください。 また、fdisk の関連する部分のマニュアルを読んでからにしてください。 この設定を少しでも間違えれば、ディスクに入っている内容を「完全に失 わせる」可能性があります。潜在的な危険性を理解した上で、この手法を 使用してください。 基本ポリシとして、3.0 の /, /var, /usr の基本部分のみを別パーティショ ンに起き、基本は 2.2.x を入れる例を示します (/usr/local や /usr/home は共有します)。 以下に示すのは、あるラップトップでの例であり、FDISK スライス 1 がハ イバネーション用のスライスになっています。そこで、スライス 1 に関し ては気にしないようにしてください。 まずは、2.2.x をスライス 3 (スライス 1 がハイバネーションエリアなど で使われていなければスライス 2) にインストールします。この際、スラ イス 2 (前記の場合ならスライス 1、以下略) を、3.0 を入れる分だけ確 保しておきます。とりあえず FAT パーティションにでもしておけばよいで しょう。サイズは 200MB 程度で足りるようです。 このインストールが終わったら、次は 3.0 をインストールします。この際、 スワップパーティションは、スライス 3 にある 2.2.x のスワップパーティ ションがそのまま使用できるので、スライス 2 に確保する必要はありませ ん。面倒なので、スライス 2 には一つだけパーティションを作れば良いで しょう。配布ファイルは bin だけをインストールします。 ブートブロックは booteasy でも標準ブートブロックでも良いのですが、 安定稼働するまでは booteasy が良いかもしれません。 ここで、/etc/fstab を書き換えて、2.2.x のディスクが /22 に見えるよ うにします (3.0 のインストール時に、ついでにディスクラベルエディタ から行ってもかまいません)。 # rmdir /usr/local # ln -s /22/usr/local /usr # ln -s /22/usr/home /usr # mkdir /22/usr/src30 # rmdir /usr/src # ln -s /22/usr/src30 /usr/src とでもすればよいでしょう。 この状態で fdisk を実行すると、 # fdisk ******* Working on device /dev/rwd0 ******* parameters extracted from in-core disklabel are: cylinders=788 heads=128 sectors/track=63 (8064 blks/cyl) parameters to be used for BIOS calculations are: cylinders=788 heads=128 sectors/track=63 (8064 blks/cyl) Media sector size is 512 Warning: BIOS sector numbering starts with sector 1 Information from DOS bootblock is: The data for partition 1 is: sysid 132,(unknown) start 6144768, size 201600 (98 Meg), flag 0 beg: cyl 762/ sector 1/ head 0; end: cyl 786/ sector 63/ head 127 The data for partition 2 is: sysid 165,(FreeBSD/NetBSD/386BSD) start 63, size 403137 (196 Meg), flag 0 beg: cyl 0/ sector 1/ head 1; end: cyl 49/ sector 63/ head 127 The data for partition 3 is: sysid 165,(FreeBSD/NetBSD/386BSD) start 403200, size 5741568 (2803 Meg), flag 80 (active) beg: cyl 50/ sector 1/ head 0; end: cyl 761/ sector 63/ head 127 The data for partition 4 is: となっています。ここで、スライス 2 を FreeBSD 以外の適当な ID を持 つスライスに見せかけて、スライス 3 のブートブロックを呼び出せば、 2.2.x が起動することになります。 この作業を行うために、まずスライス 2 に関するデータを調べます。上の 表示からスライス 2 は開始が 63 ブロックで、サイズが 403137 ブロック であることがわかります。そこで、以下のファイルを作ります。 3.0 のルートディレクトリ (この例だと wd0s1a) に、22.fdisk というファ イル名で、 p 2 65 63 403137 a 3 (一行目の 65 は 165 以外ならどんな適当な数字でも良いのですが、fat を示す 6 や、unused に対応した 0 などにするのはあまりお勧めできませ ん。また、ラップトップなどでハイバネーションにパーティションを使用 するタイプの BIOS では、そのパーティション ID にしてもいけません。 上の例では、132 がそれにあたります) というファイルを、また 22sw と いうファイル名で、 #!/bin/sh fdisk -f /22.fdisk wd0 というファイルを作ります。そして、/22sw に実行ビットを立てます。 そして、3.0 から見たディレクトリ /22 (つまり 2.2.x のルートディレク トリ) に、30.fdisk というファイル名で、 p 2 165 63 403137 a 2 (一行目の 165 は、先ほどの例とは異なり、絶対に 165 でなければなりま せん) というファイルを、また 30sw というファイル名で #!/bin/sh fdisk -f /30.fdisk wd0 というファイルをつくります。そして /22/30sw に実行ビットを立てます。 これで、3.0 が起動しているときに # /22sw と実行して再起動すると、2.2.x が起動してきます。また、2.2.x が起動 しているときに # /30sw と実行して再起動すると、3.0 が起動してきます。実際には、一発でうま くこの設定ができるとは限らず、かつ失敗すると二度と起動しないという 可能性がありますので、とりあえず fdisk には -t オプションを同時につ けて、デバッグを十分に行ってから実行してください。また、重要なデー タがあれば、必ずバックアップを取ってからこの設定を行ってください。 --- [管理番号 817] (最終更新 1999/02/17 23:58:45) Q. msdosfs としてマウントしてある FAT, VFAT, FAT32 パーティションのマ ウント状態をアンマウントせずに変更する (ex: mount -u -r /msdos) と、 `panic: msdosfs_sync: rofs mod' または `panic: vflush: not busy' と言っ て reboot してしまいます。 A. その FreeBSD が FreeBSD 2.2.7-RELEASE または FreeBSD(98) 2.2.7R-Rev01 であれば msdosfs の不具合です。 以下のパッチをあてて、カーネルを再構築してください。 ---------------- BEGIN ---------------- Index: msdosfs_denode.c =================================================================== RCS file: /usr/tmp/cvsup/cvs/PAO/sys/msdosfs/msdosfs_denode.c,v retrieving revision 1.1.1.2 diff -u -r1.1.1.2 msdosfs_denode.c --- msdosfs_denode.c 1998/07/24 10:22:22 1.1.1.2 +++ msdosfs_denode.c 1998/10/17 06:07:00 @@ -55,7 +55,10 @@ #include #include #include + +#ifndef __FreeBSD_version #include /* defines "time" */ +#endif #include #include Index: msdosfs_lookup.c =================================================================== RCS file: /usr/tmp/cvsup/cvs/PAO/sys/msdosfs/msdosfs_lookup.c,v retrieving revision 1.1.1.2 diff -u -r1.1.1.2 msdosfs_lookup.c --- msdosfs_lookup.c 1998/07/24 10:22:25 1.1.1.2 +++ msdosfs_lookup.c 1998/10/17 05:25:25 @@ -942,9 +942,7 @@ int error; daddr_t bn; int blsize; - u_long boff; - boff = diroffset & ~pmp->pm_crbomask; blsize = pmp->pm_bpcluster; if (dirclust == MSDOSFSROOT && de_blk(pmp, diroffset + blsize) > pmp->pm_rootdirsize) Index: msdosfs_vfsops.c =================================================================== RCS file: /usr/tmp/cvsup/cvs/PAO/sys/msdosfs/msdosfs_vfsops.c,v retrieving revision 1.1.1.3 diff -u -r1.1.1.3 msdosfs_vfsops.c --- msdosfs_vfsops.c 1998/07/24 10:22:29 1.1.1.3 +++ msdosfs_vfsops.c 1998/10/17 05:44:47 @@ -259,7 +259,14 @@ flags = WRITECLOSE; if (mp->mnt_flag & MNT_FORCE) flags |= FORCECLOSE; +#ifndef __FreeBSD_version + if (vfs_busy(mp)) + return EBUSY; +#endif error = vflush(mp, NULLVP, flags); +#ifndef __FreeBSD_version + vfs_unbusy(mp); +#endif } if (!error && (mp->mnt_flag & MNT_RELOAD)) /* not yet implemented */ @@ -269,7 +276,7 @@ #ifdef __FreeBSD_version if ((pmp->pm_flags & MSDOSFSMNT_RONLY) && (mp->mnt_kern_flag & MNTK_WANTRDWR)) { #else - if ((pmp->pm_flags & MSDOSFSMNT_RONLY) && (mp->mnt_flag & MNT_RDONLY) == 0) { + if ((pmp->pm_flags & MSDOSFSMNT_RONLY) && (mp->mnt_flag & MNT_WANTRDWR)) { #endif /* * If upgrade to read-write by non-root, then verify @@ -1134,4 +1141,8 @@ msdosfs_init }; +#ifdef __FreeBSD_version +VFS_SET(msdosfs_vfsops, msdos, 0); +#else VFS_SET(msdosfs_vfsops, msdos, MOUNT_MSDOS, 0); +#endif Index: msdosfs_vnops.c =================================================================== RCS file: /usr/tmp/cvsup/cvs/PAO/sys/msdosfs/msdosfs_vnops.c,v retrieving revision 1.1.1.2 diff -u -r1.1.1.2 msdosfs_vnops.c --- msdosfs_vnops.c 1998/07/24 10:22:31 1.1.1.2 +++ msdosfs_vnops.c 1998/10/17 05:50:11 @@ -1521,7 +1523,9 @@ #endif goto bad; } - if (ip->de_dirclust != MSDOSFSROOT) + if (ip->de_dirclust == MSDOSFSROOT) + ip->de_diroffset = to_diroffset; + else ip->de_diroffset = to_diroffset & pmp->pm_crbomask; } reinsert(ip); @@ -2150,6 +2154,9 @@ static int msdosfs_strategy(ap) struct vop_strategy_args /* { +#ifdef __FreeBSD_version + struct vnode *a_vp; +#endif struct buf *a_bp; } */ *ap; { @@ -2187,7 +2194,11 @@ */ vp = dep->de_devvp; bp->b_dev = vp->v_rdev; +#ifdef __FreeBSD_version + VOP_STRATEGY(vp, bp); +#else VOCALL(vp->v_op, VOFFSET(vop_strategy), ap); +#endif return (0); } @@ -2200,7 +2211,7 @@ struct denode *dep = VTODE(ap->a_vp); printf( - "tag VT_MSDOSFS, startcluster %d, dircluster %ld, diroffset %ld ", + "tag VT_MSDOSFS, startcluster %lu, dircluster %lu, diroffset %lu ", dep->de_StartCluster, dep->de_dirclust, dep->de_diroffset); printf(" dev %d, %d", major(dep->de_dev), minor(dep->de_dev)); #ifdef __FreeBSD_version ---------------- END ---------------- --- [管理番号 932] (最終更新 1999/11/03 04:48:04) Q. Dell の 440BXチップセットを使った PC に FreeBSD 2.2.7-RELEASE (以前) をインストールしたところ、PS/2マウスを認識してくれません。 A. キーボードコントローラの互換性に問題があります。 src/sys/i386/isa/psm.c の ver. 1.55 (3.0-RELEASE) と ver. 1.25.2.13 (2.2.8-RELEASE) で修正されています。 src/sys/i386/isa/psm.c を入れ換えるか、もっと新しい RELEASE に upgrade しましょう。 この問題に当てはまる場合、FreeBSD 起動時に Boot: プロンプトに対して -v オプションを与えると、 psm0: current command byte:0047 kbdio: TEST_AUX_PORT status:00fa kbdio: DIAGNOSE status:0055 kbdio: TEST_KBD_PORT status:00fa psm: keyboard port failed. psm0: the aux port is not functioning (250). psm0 not found at 0x60 というメッセージが出るでしょう。 --- [管理番号 1145] (最終更新 2003/01/22 21:13:31) Q. FreeBSD(98)2.2.6R-Rev02 で LINE30 を指定し、module.h も修正してから カーネルを再構築したのですが、vidcontrol 80x30 を実行しても画面サイズ が変わらず、26 行目以降が画面の外にでていってしまいます。 A. FreeBSD(98) の古いものでは LINE30 の動作や、9821Note での動作に問題 がありますので、可能な限り最新リリースをインストールしてください。 4.1R-Rev01 から、9821Note での 30 行表示や、水平同期 31KHz での動作 をサポートしています。 --- [管理番号 1235] (最終更新 1999/03/10 02:00:29) Q. packageをインストールしたのですが、実行すると ELF interpreter /usr/libexec/ld-elf.so.1 not found Abort で止まってしまいます。 A. それは 3.X系のバイナリです。 FreeBSD 2.X系では 普通は 3.X 系のバイナリは動きません。 2.X系には 2.X系のpackageをインストールしましょう。 どうしても、3.X のバイナリを動作させたい場合には、2.2以降(?)であれば、 3.X系から、ld-elf.so.1 や必要とされる ELF の libc.so.?? を、 持ち込めば不可能ではありません。が、library の version 管理等考えると お勧めできません。 --- [管理番号 1505] (最終更新 2001/05/07 03:21:08) Q. FreeBSD 2.2.x-RELEASE を使用しています。一般ユーザでも mount(8) コマンドが使用できるように chmod 4555 /sbin/mount としたところ、次回起動時からはシングルユーザモードでしか 立ち上がらなくなりました。 A. 2.2.x-RELEASE の場合、 ls -l /sbin/mount などとしてみると、デフォルトでは -r-xr-xr-x 1 bin bin 69632 Mar 25 /sbin/mount となっていると思います。これを chmod(1) コマンドなどで SUID すると、たとえ root が実行しても、ユーザ bin の権限でしか 実行されなくなり、ファイルシステムが mount 出来なくなってしまいます。 対策としては、fixit.flp からシステムを起動して Fixit# mount /dev/wd0a /mnt (もし /mnt が無ければつくる。) Fixit# chmod 555 /mnt/sbin/mount と元に戻して reboot(8) してください。fixit.flp については [管理番号 483] に説明があります。 なお、mount(8) コマンドを SUID するのは薦められません。 [管理番号 666] などを参考にして amd(8) の使用を検討してください。 --- [管理番号 1549] (最終更新 2000/05/24 20:54:39) Q. 既存の FreeBSD 領域の前 (HDD の中に存在するスライスの順番でいう前) に FreeBSD 領域を作ったら起動しなくなった。 A. FreeBSD 2.2 系のブートブロックは、HDD のスライステーブル (PC/AT 用語で 言う fdisk(8) パーティション) から、最初に見つけた FreeBSD 領域から /kernel を読み込もうとするため、同一の HDD の既存の FreeBSD 領域の前に 新たな FreeBSD 領域を作成すると、間違えて新規に作った領域から /kernel を読み込もうとして FreeBSD が起動できなくなります。 逆に言うと、後ろにスライスを作成する分には問題になりませんし、新しく作っ た領域に / (ルート)パーティション (BSD パーティション) を移動すれば動 作します。または、3.1R 以降ならこの問題は修正されていますので、可能な ら 3.4R 以降へのアップグレードをお薦めします。 どうしても新領域にルートパーティションを入れずに解決したい場合、ブート ブロックに新しい領域を FreeBSD 以外のスライスと思い込ませておくことに より、この領域をスキップして FreeBSD が既存領域から立ち上がるようにで きます。一旦システムが起動してしまえば、マウントして使用する事には影響 しません。この発展形として [管理番号 797] があります。 <解決法の一例> 1) root 権限で /stand/sysinstall を起動します。 2) メニューから「設定」->「パーティション」(Configure -> Partition) を 選び、目的のディスクを選択して新規スライスを作成します。 開始位置 大きさ 終了位置 名称 タイプ 種別 副タイプ フラグ 0 63 62 - 6 unused 0 63 2459457 2459519 wd0s2 2 fat 6 2459520 1024128 3483647 wd0s3 3 freebsd 165 C <---- 3483648 2661120 6144767 wd0s4 3 freebsd 165 6144768 201600 6346367 wd0s1 1 unknown 132 6346368 8064 6354431 - 6 unused 0 矢印のように領域を作成したら「Q」でこの画面を終了します。 3) 続いて「ディスクラベル」(Label) をメニューから選択します。ディスク ラベルを書き込み、ファイルシステムを作ります。 「C」で新たな FreeBSD のパーティションを作成します。最初にパーティショ ンのサイズを聞かれますが、デフォルトで使用可能な全ブロックサイズが指定 されますから、ディスク全体を一つのパーティションで使用する場合はこのま まで良いでしょう。次にパーティションのタイプを聞かれますから、ファイル システムを選択します。さらにそのパーティションをマウントする位置を聞か れます。/mnt などのパスを指定します。このとき、指定したディレクトリが なければ、自動的に作成されます。 ディスク: wd0 区画名: wd0s3 空き領域: 0 ブロック (0MB) ディスク: wd0 区画名: wd0s4 空き領域: 0 ブロック (0MB) 区画 マウント位置 容量 Newfs 区画 マウント位置 容量 Newfs ---- ------------ ---- ----- ---- ------------ ---- ----- wd0s2 1200MB DOS wd0s3e /mnt 500MB UFS Y <--------- wd0s4a 32MB * wd0s4b swap 199MB SWAP wd0s4e 30MB * wd0s4f 1037MB * 「W」で書き込むと disklabel(8), newfs(8), mount(8) まで行なわれますの で、「Q」でこの画面を終了し、一旦 sysinstall を終了します。 4) df で調べると無事 newfs が済み、/dev/wd0s3e がマウントされています ので、umount /mnt でディスクを切り離しておきます。 5) 再度 /stand/sysinstall を起動して、「設定」->「パーティション」 (Configure -> Partition) を選んで、スライス情報を書き変えます。 ディスク名: wd0 FDISK パーティションエディタ ジオメトリ: 788 シリンダ/128 ヘッド/63 セクタ (計 6354432 セクタ) 開始位置 大きさ 終了位置 名称 タイプ 種別 副タイプ フラグ 0 63 62 - 6 unused 0 63 2459457 2459519 wd0s2 2 fat 6 2459520 1024128 3483647 wd0s3 1 OpenBSD FFS 166 <------ 3483648 2661120 6144767 wd0s4 3 freebsd 165 C 6144768 201600 6346367 wd0s1 1 unknown 132 6346368 8064 6354431 - 6 unused 0 上記のようにスライス種別 (Desc) を 'freebsd' 以外の ID (ここでは 166 を利用します) に変更して、「W」で書き込みます。この ID は 165 以外な らなんでも良いですが、6 (FAT) や 132 (ハイバネーション用) など特定の 目的にリザーブされたものは避けてください。スライス種別を変更したら、 それ以外の値をいじらないようにして「Q」でこの画面を抜けて sysinstall を終了します。 6) 起動時に自動的にマウントさせるには、以下の行を /etc/fstab に追加 します。 /dev/wd0s3e /mnt ufs rw 1 2 動作確認に使用した version: FreeBSD 2.2.6-RELEASE