Chapter 20. いろいろな操作

目次
20.1. i386 用の起動フロッピーの作成
20.2. CD-ROM の作成
20.3. システム時計の同期
20.4. ブートマネージャーのインストール
20.5. ディスクラベルの消去
20.6. スピーカー
20.7. ルートのパスワードを忘れてしまいましたが?
20.8. 新しいハードディスクの追加
20.9. Password file is busy?
20.10. /dev デバイスの再構築法

この章では、これまでの章で出てこなかったさまざまな話題を 飛び飛びに扱います。

20.1. i386 用の起動フロッピーの作成

この節 (i386 用の起動フロッピーの作成) は Eric Delcamp による寄稿です

最初に、動作中のカーネルで vnd 擬似デバイスが有効になっている必要があります(これは GENERIC カーネルでは標準でなっています)。

  1. まず、確実なカーネルをフロッピーに作る必要があります。 FLOPPY という名にしましょう。 このカーネルは いくつかの INSTALL モデルの中から持ってきてください すると、確実に動く /sys/arch/i386/compile/FLOPPY/netbsd ファイルができます。

  2. /usr/src/distrib/i386/floppies/ramdisk に行って、

    # make        

    をしてください。これで、そのディレクトリーに ramdisk.fs ファイルができます。

  3. /usr/src/distrib/i386/floppies/fdset に行って、

    # make KERN=/sys/arch/i386/compile/FLOPPY/netbsd

    をします。これで(カーネルのサイズによって)1つか2つ、 boot1.fs および boot2.fsという名前のファイルができます。

  4. これらのファイルを次のコマンドでフロッピーに転送します。

    # dd if=boot1.fs of=/dev/fd0a bs=36b
    # dd if=boot2.fs of=/dev/fd0a bs=36b
          
  5. 最初のフロッピーをドライブに入れて電源を入れてください!

20.2. CD-ROM の作成

CD-ROM を作るには mkisofs および cdrecord プログラムが使え: SCSI および IDE の機器がサポートされています。 IDE/ATAPI ドライブは NetBSD ではエミュレーションレイヤー無しにサポートされています。 ドライバーが ATAPI コマンドを直接受け取ることができ シンプルで美しい解決法です。

CD を作成するには2つのステップが必要で: 最初に mkisofs プログラムによって、ハードディスク上に CD の ISO イメージが作られている必要があります。 次に、 イメージを CD に cdrecord を使って書き込みます。 次の例では、cdrecord にサポートされている IDE/ATAPI CD ライター を使います。 dmesg 出力:

cd1 at atapibus1 drive 0: <HP CD-Writer Plus 8100> type 5 cdrom removable    

註: CD を焼くときのスピードは critical で : CD ライターへのデータ転送は 一定でなければならず途中で途切れてはいけません; cdrecord のデータバッファーは決して空になってはいけないのです。 これは、 CD を焼くときには、システムは使われていない(アイドル)状態か、それに近い 状態の時が良いということです(カーネルのコンパイル作業や MP3 エンコード作業中に はしないということです)。

20.2.1. ISO イメージの作成

ISO イメージは、とかく巨大になりがちなので、 書きこむデータを置く ハードディスクの空き容量が足りるかどうか確認すると良いでしょう。 (700MB.にまでなります。) イメージを作るには、データが CLASS="FILENAME" >mydata ディレクトリーおよび、その下のディレクトリー階層にあるとして、次のコマンドを入力します:

# mkisofs -aflrTv -o cdimage mydata/      

ここで、 cdimage ファイルが作られ、 普通のファイルシステムと同じように検査や閲覧をすることができ、 CD に書きこむ前にエラーがないか確認することができます。 例えば:

# ls -l cdimage
-rw-rw-r--  1 auser     user  284672 Dec  1 11:58 cdimage
# vnconfig -v vnd0 cdimage 512/556/1/1
# mount -r -t cd9660 /dev/vnd0c /mnt
  ... browsing su /mnt ...
# umount /mnt
# vnconfig -u vnd0
      

この 556 という値は、 cdimage ファイルのサイズを 512 で 割った値です。

hybrid CD の作成: mkisofs は Joliet フォーマットの CD を作ることができ、 この CD は Microsoft のプラットフォームで読むことができます。 また、 RockRidge 拡張と Joliet 拡張の両方をつかった ハイブリット CD を作ることもでき、 これは、 Unix と Windows の両方のプラットフォームで読めます。 例えば:

$ mkisofs -l -J -R -o cd.iso mydata/	

利用可能なオプションの詳細については mkisofs のマニュアルページを 見てください。

20.2.2. CD へのイメージの書き込み

次の段階として、 次のコマンドで CD に書き込みます:

# cdrecord -v speed=2 dev=/dev/rcd1d cdimage      

註: a デバイスでは、 ATAPI コマンドを accept しないので、 ATAPI には rcd#d を使うべきです

イメージを書きこむ前に、レーザーを止めた状態で作動試験をすることができ、: これには、単に -dummy および -nofix オプションをコマンドラインに追加するだけです。 例えば:

# cdrecord -v -dummy -nofix speed=2 dev=/dev/rcd1d cdimage      

ハードディスクに(大きな)テンポラリーファイルを作らずに、 イメージ作成と書きこみの2段階を1つのコマンドで兼務させることもできます。 そのコマンドはこのように:

# (nice -18 mkisofs -aflrT mydata/) | cdrecord -v fs=16m speed=2 dev=/dev/rcd1d -      

オプションの fs=16m は cdrecord のバッファーアンダーフロー エラー (つまり、 cdrecord が書くデータを何も持っていないということです) を避けるために fifo バッファーの割り当てを大きくするのに使います。

20.2.3. CD のコピー

CD を直接コピーするには cdrecord-isosize オプションが使えます。 例えば:

# cdrecord -v fs=16m -isosize speed=2 dev=/dev/rcd1d /dev/rcd0d      

註: 2台の IDE/ATAPI CD(-RW) を使うなら、 2台は異なる IDE コントローラー につなぐほうが良いです。 (1台をプライマリーにもう1台をセカンダリーに) そのほうが、データの流れが良いからです。 この例では、コンフィグは:

wd0: hard disk, IDE primary master
cd0: CD reader, IDE primary slave
cd1: CD writer, IDE secondary master      

20.2.4. ブータブル CD の作成

ブータブル CD の作成は、 CD への起動バイナリーの入れ方 だけが問題で:起動ファイルはフロッピーをエミュレートします。 これは mkisofs -b オプションを 使って、 例えば:

# mkisofs -avr -b boot.fs -o cdimage mydata/      

boot.fs は CD の起動バイナリーです。 注として boot.fs のパス は mydata/ ディレクトリーの相対パスです。

20.3. システム時計の同期

システム時計がおかしいのは別に珍しいことではなく、 たびたび、何分も違うでしょう:変な理由でコンピューターの時計は 非常に不正確です。 この問題は、多くのネットワークにつながったホストの時計の 同期を取る作業をやらされたら、すぐに悪夢と化すことでしょう。 この問題を解決するため、 NTP プロトコル (バージョン 3) が手助けに来ました: このプロトコルでネットワーク上の ワークステーションの時計を、1つ、または、いくつかの NTP サーバーに 同期を取ることができます。

NTP プロトコルのおかげで、 1台のワークステーションの時計を あわせることもできますし、 ネットワーク全体で同期を取ることもできます。 NTP プロトコルは非常に複雑で、戦略上、サーバーは マスター - スレーブ階級制をとっています。: 最上階層は、 stratum 1 のサーバーで占められ、このサーバーには、 高い精度を保証するために外部の時計 (例: 電波時計) が つながっています その下に、 stratum 2 サーバーがあり、 stratum 1 サーバーに同期を取っています。 精度は下の階層に行くにつれて下がっていきます。 この階級構造は、 すべてのホストが同一の(数少ない) stratum 1 サーバーに集中することを避けます。 もし、例えば、ネットワークで同期を取りたいならば、 すべてのホストを同一の公開 stratum 1 サーバー に接続してはいけません。. 代わりに、メインサーバーと接続する ローカルサーバーをつくり、残りのホストはローカルサーバーに 同期を取ります。

幸いにも、 NTP ツールを使うのに、 プロトコルおよび実装の詳細を知る必要はなく (興味があれなら、 RFC 1305 を参照してください) 、設定法と いくつかのプログラムの実行法を知る必要があるだけです。 NetBSD の基本システムには、 すでに このプロトコル (およびほかの time 関係のプロトコルも) に利用するのに必要な xntp 実装に由来するツールが入っています。 この節には、システム時刻を常に正確にしておく 簡単な方法を記述します。

最初に、参照に使う公開 NTP サーバーのアドレスを調べることが大切で、 詳しい一覧は http://www.eecis.udel.edu/~mills/ntp/servers.html があります。 例えとして、 for Italy には2つの stratum 1 サーバー、 tempo.cstv.to.cnr.it および time.ien.it が使えます。

つぎに、システム時計を adjust するには、 次のコマンドをルート権限で:

# ntpdate -b tempo.cstv.to.cnr.it time.ien.it      
(例で用いているサーバー名は、あなたが実際に使うサーバーに 置き換えてください。 オプション -b tells ntpdate で adjtime で(時計の針を)まわす(これが標準) 代わりに、 settimeofday システムコールを使って設定します。 このオプションはローカルの時刻と正確な時刻の差がかなりあるときに 使います。

あなたの見る限り、 ntpdate の利用法は難しくないでしょう。 次のステップでは、 いつも時間が正しくなるように、それを自動実行します。 インターネットに 常時接続していれば、 /etc/rc.conf の次の行でブート時にプログラムを開始でき:

ntpdate=YES      ntpdate_hosts="time.ien.it"      
利用する NTP サーバー名を ntpdate_hosts 変数に書きます; もし、この欄が空欄なら、 起動スクリプトは /etc/ntp.conf ファイルから取得しようとします。

もし、インターネットに常時接続されていないなら、 (例 モデムを使って、 ISP にダイアルアップ接続) ip-up スクリプトから ntpdate を実行でき、 as explained in Chapter 10。 この場合、 ip-up スクリプトに次の行を追加し:

/usr/sbin/ntpdate -s -b time.ien.it      
(このパスは必須で、つけないとスクリプトはこのプログラムを 見つけられません。) オプションの -s は、動作記録の出力先を 標準出力 (これが標準) から system syslog(3) facility にかえるということで、 この意味は、 ntpdate からのメッセージは /var/log/messages に、新しい物を上に書き出しておくということです。

ntpdeta に加えて、ほかにも便利な NTP コマンドがあります。 ローカルホストの1つを、ネットワーク上のほかのホストに対する NTP サーバーにすることができます。 ローカルサーバーは公開サーバーに時刻を 同期するでしょう。 この種の設定には xntpd デーモンを使い /etc/ntp.conf 設定ファイルを作ります。 例えば:

server time.ien.it
server tempo.cstv.to.cnr.it      

Xntpd は rc.conf からも、 適切なオプション:

xntpd=YES      
を使って開始することができます。

ネットワークで時刻同期ができるのは NTP だけではなく: 4.3BSD で開発された timed デーモンを使うこともできます。 Timed も、マスター - スレーブ階層制をとっていて: ホストで起動すると、 timed はマスターにネットワーク時刻を尋ね、それに合うように ローカル時計を合わせます。 混合構成、つまり timed および xntpd の両方の利用ができます。 ローカルホストの1つが 公開 NTP サーバー から正しい時刻を手に入れると、ネットワーク上の 他のホストに対して timed のマスターになり、 そのクライアントに対し、 timed を使って、時刻を同期します。 これは、ローカルサーバーは、 NTP と timed の両方が走っている必要が あるということで;互いに通信できないので、仲裁するのです。 (timed は -F hostname オプション をつけて起動する必要があり、それで、ローカル時計の adjust を試みることができません。)

20.4. ブートマネージャーのインストール

NetBSD インストーラー Sysinst によって、 NetBSD ブートマネージャーを ハードディスクにインストールすることができます。 ブートマネージャーは、後からインストールしたり再設定することができ、 これには、 fdisk コマンドを使います。 例えば:

# fdisk -B wd0    

もし、 NetBSD がハードディスクから起動しなければ、 インストールフロッピーから起動して、ハードディスクのカーネルを立ち上げられます。 インストールディスクを入れて、 ブートプロンプトで次のコマンドを入力します:

> boot wd0a:netbsd    

これで、ハードディスクのカーネルが起動します (正しいデバイス名を使ってください。たとえば、 SCSI ハードディスクなら sd0a)

註: 時々 fdisk -B は期待した結果にならないことがあり (少なくても私の場合はそう言うことがありました)、多分 Windows 95 のようなほかの OS をインストールしたり消したりすることに関係します。 この場合、 DOS から fdisk /mbr を試して、それから 再び NetBSD で fdisk を試してみてください。

20.5. ディスクラベルの消去

この操作は、余り頻繁に行われるものではありませんが、 知っていれば、必要になった場合、 重宝します。 この手の操作は、行う前にどう言うことか、 正確に理解する必要があります。 例えば:

# dd if=/dev/zero of=/dev/rwd0c bs=8k count=1    

このコマンドでディスクラベルが消えます ( MBR パーティションテーブルは 消しません) ディスクを完全に消去するには wd0d デバイスを使います。 例えば:

# dd if=/dev/zero of=/dev/rwd0d bs=8k    

20.6.スピーカー

この情報はメーリングリストで見つけました。 (作者は思い出せません) スピーカーからのサウンドの出力には (例として 長いスクリプトの最後で) /dev/speaker デバイスにマップされている、 カーネルの spkr デバイスが使えます。 例えば:

echo 'BPBPBPBPBP' > /dev/speaker    

註: spkr デバイスは generic カーネルでは有効になっておらず; カスタマイズされたカーネルが必要です。

20.7. ルートのパスワードを忘れてしまいましたが?

もしルートのパスワードを忘れてしまっても、全部失ってしまうのではなく、次のようにすると、まだ "回復" することができます。: シングルユーザーでブートし, / をマウントし、ルートのパスワードを変更します。 詳しくは:

  1. シングルユーザーでのブート: ブートプロンプトが出て5秒のカウントダウン が始まったら、次のコマンドを入力します:

    > boot -s	  

  2. 次のプロンプトで

    Enter pathname of shell or RETURN for sh:  
    Enter を押します。

  3. 次のコマンドを打ち:

    # fsck -y /
    # mount -u /
    # fsck -y /usr
    # mount /usr
    	  

  4. passwd でルートのパスワードを変更します。

  5. exit コマンドで マルチユーザーモードに行きます。

20.8. 新しいハードディスクの追加

この節では、現在稼動している NetBSD システムに、新しい ハードディスクを追加する方法が書いてあります。 次の例では、 新しい SCSI コントローラーに 新しいディスクを つないで追加します。 もし、新しいコントローラーを付ける必要がなければ relevant 部分を飛ばし、ハードディスクの設定に行ってください。 IDE ハードディスクの追加も同一で; デバイス名だけが違い (sd# の代わりに wd# にします)。

新しいハードウエアーを買う前にはいつも、 NetBSD のハードウエアー互換性リストを調べ、新しいデバイスが システムにサポートされていることを確認してください。

SCSI コントローラーが機械に物理的に取り付けられ、 新しいハードディスクが接続されたら、 コンピューターに電源を入れて、 dmesg コマンドによって、デバイスが正しく検出されたか確かめましょう。 これは、 NCR-875 コントローラーの出力サンプルです:

ncr0 at pci0 dev 15 function 0: ncr 53c875 fast20 wide scsi
ncr0: interrupting at irq 10
ncr0: minsync=12, maxsync=137, maxoffs=16, 128 dwords burst, large dma fifo
ncr0: single-ended, open drain IRQ driver, using on-chip SRAM
ncr0: restart (scsi reset).
scsibus0 at ncr0: 16 targets, 8 luns per target
sd0(ncr0:2:0): 20.0 MB/s (50 ns, offset 15)
sd0: 2063MB, 8188 cyl, 3 head, 172 sec, 512 bytes/sect x 4226725 sectors      
デバイスが出力に現れなければ、利用しているカーネルによって サポートされているか確認してください。 カスタマイズしたカーネルをコンパイルするときは重要です。 ( Chapter 7 をご覧ください。)

これから fdisk コマンドを使って、新しいパーティションを作ります。最初に ディスクの現在の状態を確かめます:

# fdisk sd0
NetBSD disklabel disk geometry:
cylinders: 8188 heads: 3 sectors/track: 172 (516 sectors/cylinder)
    
BIOS disk geometry:
cylinders: 524 heads: 128 sectors/track: 63 (8064 sectors/cylinder)

Partition table:
0: sysid 6 (Primary 'big' DOS, 16-bit FAT (> 32MB))
    start 63, size 4225473 (2063 MB), flag 0x0
        beg: cylinder    0, head   1, sector  1
        end: cylinder  523, head 127, sector 63
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>    

この例では、ハードディスクにはすでに DOS パーティションがあり、 それを消して、 NetBSD 本来のパーティションに置き換えます。 fdisk -u sd0 コマンドでパーティションの対話式の(interactively)変更ができ、 変更されたデータをディスクに書きこむのは、 exit 前でだけで、 fdisk は確認を要求してくるので、 リラックスして作業してください。

BIOS パーティションを作るには fdisk -u コマンドを使い、; 結果は次のように:

Partition table:
0: sysid 169 (NetBSD)
    start 63, size 4225473 (2063 MB), flag 0x0
        beg: cylinder    0, head   1, sector  1
        end: cylinder  523, head 127, sector 63
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>      

ここで、 NetBSD パーティションのディスクラベルを作ります。 この正しい方法は:

# disklabel sd0 > tempfile
# vi tempfile
# disklabel -R -r sd0 tempfile
      

tempfile をすでに解説したように編集し、いくつかのディスクラベルパーティション(**?**)を作ると 結果は:

#      size   offset   fstype [fsize bsize   cpg]
a:  2048004       63   4.2BSD   1024  8192    16 # (Cyl.  0*- 3969*)
c:  4226662       63   unused      0     0       # (Cyl.  0*- 8191*)
d:  4226725        0   unused      0     0       # (Cyl.  0 - 8191*)
e:  2178658  2048067   4.2BSD   1024  8192    16 # (Cyl.  3969*- 8191*)      

註: ディスクラベルが 作られると、 newfs -n /dev/sd0a コマンドの出力を調査することで最適化でき、 これは、ディスクラベルパーティションの最後にある unallocated セクターを警告します。 この newfs が報告した値 は iterative プロセスでパーティションのサイズの補正をするのに使えます。

最終作業は新しく定義されたファイルシステム (a および e) を作ることです。

# newfs /dev/sd0a
# newfs /dev/sd0e
      
このディスクは使う準備ができました。2つのパーティションをマウントでき、 例えば:
# mount /dev/sd0a /mnt      

20.9. Password file が busy?

パスワードを変更しようとすると奇妙なメッセージ "Password file is busy" が出ることがあり、 それは多分 /etc/ptmp ファイルが システムから削除されていないのです。 このファイルは /etc/master.passwd ファイルの作業用のコピーで: 重要な情報を失わないように確認してから 削除してください。 (ptmp のほうを消すのであって、 master.passwd ではありません。)

註: /etc/ptmp があると、 システム起動時に warning メッセージが出ます。 例えば:

root: password file may be incorrect - /etc/ptmp exists	

20.10. /dev のデバイスの再構築法

この節は Reinoud Koornstra によって 寄稿されました

最初にシングルユーザーにシャットダウンします。パーティションはまだ "rw" (read-write) でマウントされています; これは、マルチユーザーモードに居るうちに shutdown now と打つか、 あるいは -s オプションをつけてリブートし、 / 及び /dev を read-writable でマウントしなおします。

# mount -u /
# mount -u /dev
    

そして:

# mkdir /nudev
# cd /nudev
# cp /dev/MAKEDEV* .
# sh ./MAKEDEV all
# cd /
# mv dev odev
# mv nudev dev
# rm -r odev
    

または、全ソースを取得して /usr/src にあるなら:

# mkdir /nudev
# cd /nudev
# cp /usr/src/etc/MAKEDEV.local .
# cp /usr/src/etc/etc.$arch/MAKEDEV .
# sh ./MAKEDEV all
# cd /
# mv dev odev; mv nudev dev
# rm -r odev
    

$arch は

# uname -m    

または

# sysctl hw.machine_arch    
で調べることができます。

新しい MAKEDEV をソースツリーからコピーする後者の方法では、 少なくても i386 アーキテクチャーでは、いくつかの追加デバイスがあります。 例えば 現在、 8 パーティションの代わりに 16 パーティション を持つことができます。もし /dev にある古い MAKEDEV を使うなら、 追加デバイスは作られません。