FreeBSD QandA ジャンル別一覧: FreeBSD2.2.xについて
[管理番号 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 が起動するでしょ
う。
- [管理番号 85] Q.`panic: cannot mount root' で FreeBSD が...
- [管理番号 87] Q.セカンダリのマスタに FreeBSD を入れたとき、いつも boot: で1...
- [管理番号 88] Q.1 台のパソコンを家族も使うことがあるので、「FreeBSD を起動する時は...
- [管理番号 514] Q.FreeBSD をインストールしたいんですが、ブートマネージャは HDD に...
- [管理番号 1616] Q.system の状態をみるコマンドでつぎのようなエラーが発生してしまう。 ...
[管理番号 386] (最終更新 2000/06/25 02:30:33)
Q. 一つの HDD に複数の FreeBSD のスライスを作って、最初の FreeBSD スラ
イス以外のところ (2 番目以降のスライス) にルートファイルシステムを置き
ました。しかし、boot のさせ方が分らないのですが?
A. FreeBSD 3.1-RELEASE 以降では問題なくブートできるはずです。それより前の
FreeBSD のブートコードでは、最初に見つかった FreeBSD スライスにルートファ
イルシステムがないといけません。無理せず HDD の構成を見直すか、または
バージョンアップが得策でしょう。もしどうしても頑張ってみたいという人は、
[管理番号 1549] [管理番号 797] を参考にしてください。
[管理番号 468] (最終更新 1999/02/17 23:58:45)
Q. FreeBSD 2.2.5R + XFree86 3.3.1 で ports を用いて jnethack をインス
トールしましたが、以下のようなエラーメッセージが出てうまく日本語が
出てくれません。どうしたら良いのでしょうか?
Warning: Missing charsets in String to FontSet conversion
A. リソースファイル中の NetHack*fontSet: で以下のようなフォントの指定
をしていませんか?
NetHack*fontSet: -*-fixed-medium-r-normal--14-*-iso8859-1,\
-*-fixed-medium-r-normal--14-*-iso8859-1,\
-*-fixed-medium-r-*--14-*-jisx0208.1983-*
XFree86 3.3.1 では X11R6.3 ベースでフォントの扱いが厳密になったため
にWarning が出ています。
以下のようにリソースファイルを書き直してください。
NetHack*fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1,\
-*-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1,\
-*-fixed-medium-r-*--14-*-*-*-*-*-jisx0208.1983-*
[管理番号 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);
[管理番号 579] (最終更新 1999/11/03 04:52:52)
Q. Tekram DC-390U に接続した CD-ROM ドライブや MO ドライブの容量が、
起動時に can't get the size と表示され、うまく認識できません。
A. Tekram は、FreeBSD や Linux 用に自社製品用のデバイスドライバなどを
配布しているので、これを使うとよいようです。
<URL:ftp://ftp.tekram.com/SCSI/390X/FreeBSD/>
に、カーネルソースへのパッチ一式が置いてありますので、それを当てて
カーネルの再構築をして下さい。詳しくは付属のドキュメントを読んで
下さい。
なお、このパッチを適用しなくても、起動時の容量の認識に失敗する
以外は、特に問題なくこれらのデバイスを利用することができます。
[管理番号 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"))
[管理番号 706] (最終更新 1999/02/17 23:58:45)
Q. FreeBSD2.2.5R で netatalk が動きません。
A. ERRATA に書いてあるとおり、バグが見つかって patch が準備されています。
FreeBSD2.2.5R に netatalk1.4b2 をインストールする手順は以下のとおりです。
まず、patch ファイルを準備します。Mac・DOS・Windows マシンで取ってくる
際は、改行コードに注意する必要があります。binary mode で取り寄せましょう。
MacOS の Fetch では raw data モードとなっています。
patch はここで公開されています。
<URL:[BROKEN!] ftp://ftp.FreeBSD.org/pub/FreeBSD/updates/2.2.5-RELEASE/atalk.diff.2.2.gz>
次に、ports または packages にて netatalk1.4b2 をインスト−ルします。
それから、上記の patch を当てます
# cd /usr/src/sys
# zcat atalk.diff.2.2.gz | patch -d /usr/src/sys
patch が正常に当たったら
# make
# make install
とし、その後カーネルコンフィグレーションファイルに
options NETATALK # Appletalk communications protocols
を書き加えカーネルを再構築します。
更に、/etc/services 中の
rtmp 1/ddp
nbp 2/ddp
echo 4/ddp
zip 6/ddp
エントリを確認して、/usr/local/etc/ に
atalkd.conf と papd.conf をコピーし atalkd.conf に NIC のデバイス名を記
入します。例えば intel EtherExpressPro100/B の場合は
fxp0 -phase 2
を書き加えます。
mkdir /usr/local/mac_archive
として server 用のディレクトリを作り、AppleVolumes.default に
/usr/local/mac_archive "atalk"
を書き加えます。
自分のhomeディレクトリに作る場合は
mkdir /home/xxx/mac_archive :xxxは自分のディレクトリ名
とし、AppleVolumes.defaultに
~/mac_archive "atalk"
と書きます。"atalk"が Mac 側に表示される名前です。
最後に /usr/local/etc/rc.d/netatalk.sh が有ることを確認し netatalk.sh を
起動します。
Mac 側で行なう設定は以下のようになります。
コントロールパネルの AppleTalk の設定を EtherNET に変更します。
次にセレクタにて AppleShare をハイライトさせると右側のダイアログにホス
ト名が表示されますので、その中から FreeBSD のホスト名を選ぶと
AppleVolumes.default にて設定した名前がダイアログに現れます。それを選択
するとその volume がデスクトップにマウントされます。
[管理番号 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 (revison 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 の非公式修正バージョンが出ています。
<URL:[BROKEN!] http://www.buslogic.com>
の 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のトラブルに関しては、
<URL:http://www.jp.FreeBSD.org/man-jp/trouble.html> も参照してください。
- [管理番号 39] Q.マニュアルが英語なんですが 日本語のマニュアルはありませんか。A.マニュアル...
- [管理番号 128] Q.質問したら、「chmod(2) を見てください」と言われました。どういうこと...
- [管理番号 284] Q.jp-man-doc(日本語man)をインストールし、jmanコマンドを実行...
- [管理番号 614] Q.オンラインマニュアル (英語/日本語) を綺麗に印刷するにはどうやったらいい...
- [管理番号 629] Q.どのマニュアルが jman 化されているのかを知る方法は無いでしょうか。A....
- [管理番号 765] Q.jman が途中から表示されてしまいます。日本語は正常に表示できています。A...
- [管理番号 1166] Q.kterm 上で jman コマンドを使って日本語マニュアルを読みたいのです...
- [管理番号 1544] Q.man の文書をテキスト化するにはどのようにすれば良いのでしょうか。A.単純...
[管理番号 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:
<UNUSED>
となっています。ここで、スライス 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 <sys/proc.h>
#include <sys/buf.h>
#include <sys/vnode.h>
+
+#ifndef __FreeBSD_version
#include <sys/kernel.h> /* defines "time" */
+#endif
#include <vm/vm.h>
#include <vm/vm_extern.h>
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
というメッセージが出るでしょう。
[管理番号 1213] (最終更新 2000/05/24 20:48:32)
Q. FreeBSD 2.2 系列の lnc ドライバで NetaTalk が動作しません。
atalkd: addmulti: Invalid argument
AppleTalk not up! Child exited with 1.
というエラーが出て、起動してくれません。
A. lnc ドライバが、multicast 対応としてコンパイルされていない、かつ
multicast 対応部分にバグがあるためです。
FreeBSD のアップグレードが無理なら、以下のパッチを当てて、カーネルを
再構築して下さい。以下からパッチを切り出したら、QandA によるインデン
トを除去してファイルにセーブし、patch -l < file としてパッチを適用し
ます。2.2.6R 以外ではいくらか (offset xx lines) などと表示されますが
問題はないです。
なお、[管理番号 706] も参照して下さい。
--- /sys/i386/isa/if_lnc.c.orig Wed Feb 3 12:36:11 1999
+++ /sys/i386/isa/if_lnc.c Wed Feb 3 12:38:10 1999
@@ -32,8 +32,8 @@
*
*/
-/*
#define LNC_MULTICAST
+/*
#define DIAGNOSTIC
#define DEBUG
*
@@ -69,6 +69,11 @@
/* Some defines that should really be in generic locations */
#define FCS_LEN 4
#define MULTICAST_FILTER_LEN 8
+#ifdef LNC_MULTICAST
+#define LNC_IFF_DEFAULT (IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST)
+#else
+#define LNC_IFF_DEFAULT (IFF_BROADCAST | IFF_SIMPLEX)
+#endif
#include <sys/param.h>
#include <sys/systm.h>
@@ -207,19 +212,20 @@
static inline u_long
ether_crc(u_char *ether_addr)
{
-#define POLYNOMIAL 0x04c11db6
- u_long crc = 0xffffffffL;
- int i, j, carry;
+#define POLYNOMIAL 0xEDB88320UL
+ u_long crc = 0xFFFFFFFFUL;
+ int i, j;
u_char b;
+ u_long m;
for (i = ETHER_ADDR_LEN; --i >= 0;) {
b = *ether_addr++;
for (j = 8; --j >= 0;) {
- carry = ((crc & 0x80000000L) ? 1 : 0) ^ (b & 0x01);
- crc <<= 1;
+ m = crc;
+ crc >>= 1;
+ if ((m ^ b) & 1)
+ crc ^= POLYNOMIAL;
b >>= 1;
- if (carry)
- crc = ((crc ^ POLYNOMIAL) | carry);
}
}
return crc;
@@ -1222,7 +1228,7 @@
sc->arpcom.ac_if.if_name = lncdriver.name;
sc->arpcom.ac_if.if_unit = unit;
sc->arpcom.ac_if.if_mtu = ETHERMTU;
- sc->arpcom.ac_if.if_flags = IFF_BROADCAST | IFF_SIMPLEX;
+ sc->arpcom.ac_if.if_flags = LNC_IFF_DEFAULT;
sc->arpcom.ac_if.if_timer = 0;
sc->arpcom.ac_if.if_output = ether_output;
sc->arpcom.ac_if.if_start = lnc_start;
@@ -1312,7 +1318,7 @@
s = splimp();
lnc_stop(sc);
- sc->arpcom.ac_if.if_flags |= IFF_BROADCAST | IFF_SIMPLEX; /* XXX??? */
+ sc->arpcom.ac_if.if_flags |= LNC_IFF_DEFAULT; /* XXX??? */
/*
* This sets up the memory area for the controller. Memory is set up for
@@ -1833,7 +1839,12 @@
ether_delmulti(ifr, &sc->arpcom);
if (error == ENETRESET) {
- lnc_setladrf(sc);
+ /*
+ * Multicast list has changed; set the logical address
+ * filter accordingly.
+ * (not only initialisation block, but also the LANCE)
+ */
+ lnc_init(sc);
error = 0;
}
break;
[管理番号 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 <none> 1200MB DOS
wd0s3e /mnt 500MB UFS Y <---------
wd0s4a <none> 32MB *
wd0s4b swap 199MB SWAP
wd0s4e <none> 30MB *
wd0s4f <none> 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