Linux&FreeBSD ハードウェア設定

YAMAMORI Takenori ●yamamori

関連ページ:
Solaris/Linux/FreeBSDでCD-Rを焼こう

■CD-ROM, CD-R, MO を使う

●CD-ROM

CD-ROMの増設は,ハードディスクの場合と同様,接続すればOKです. デバイスファイル名については,前章の 図(IDEのデバイスファイル), 図(SCSIのデバイスファイル) を参照して下さい.

・Linuxの場合

Linuxでは,インストール時に存在していたCD-ROMに対して, /dev/cdromというシンボリックリンクが張られていて, /etc/fstabのエントリは,通常/dev/cdromで書かれています. このため,増設・交換などによってデバイスファイル名が変わった場合は, このシンボリックリンクを張り直します.

また,たとえば,インストール時に,SCSI ID=6にCD-ROMを接続していた場合, このCD-ROMは/dev/scd0となりますが, そこにあとでCD-RをSCSI ID=4で増設すると, CD-Rの方が/dev/scd0となり,元のCD-ROMは /dev/scd1と変わってしまいますので,注意が必要です.

CD-ROMにアクセスできることを確認するために, マウントする前に以下のようにして,直接頭のデータを読んでみることを お奨めします.

# od -c /dev/hdc | head   (IDEのセカンダリ・マスタの場合)
# od -c /dev/scd0 | head  (SCSIの1台目の場合)

マウントする場合のコマンドは,以下のようになります.

# mount -r -t iso9660 /dev/cdrom /mnt/cdrom   ← /etc/fstabに記述前
# mount /dev/cdrom                         ← /etc/fstabにエントリがある場合
  または
# mount /mnt/cdrom                         ← /etc/fstabにエントリがある場合

また,/etc/fstabuserオプションが付いて記述されている場合は, 一般ユーザもCD-ROMをマウントできるようになります. userオプションを付ける場合は,exec も付けて,CD-ROM内のバイナリを直接実行できるようにした方が便利でしょう.

$ mount /mnt/cdrom    ← /etc/fstabにuserオプションがある場合,一般ユーザOK

/etc/fstabの例:
/dev/cdrom  /mnt/cdrom  iso9660  noauto,user,exec,ro  0 0

・FreeBSDの場合

FreeBSDの場合は,SCSIだけでなくIDEも,認識された順にデバイスファイルが 割り当てられます.しかし現実的には, IDEに2台以上のCD-ROMを付けるようなことはないと思います.

SCSIに2台目のCD-ROM(CD-Rを含む)を増設した場合,そのデバイスファイル名は /dev/cd0c, /dev/cd1c となりますが,SCSI IDによっては,最初からあった方の CD-ROMのデバイスファイル名が変わることについては,Linuxの場合と同様です.

また,SCSIの2台目用の,/dev/cd1cが, デフォルトでは存在していないかも知れませんので, その場合は以下のようにして作成します.

# cd /dev
# ./MAKEDEV cd2  ← *cd0* と *cd1* が作成される

デバイスを確認するため,Linuxと同様に以下のようにして試してみます.

# od -c /dev/wcd0c | head   (IDEの場合)
# od -c /dev/cd0c | head    (SCSIの1台目の場合)

マウントする場合のコマンドは,以下のようになります.

# mount -r -t cd9660 /dev/cd0c /cdrom      ← /etc/fstabに記述前
# mount /dev/cd0c                          ← /etc/fstabにエントリがある場合
  または
# mount /cdrom                             ← /etc/fstabにエントリがある場合

/etc/fstabの例:
/dev/cd0c  /cdrom  cd9660  ro,noauto  0 0

●CD-R

CD-Rドライブも,CD-ROMドライブとして使うだけなら,設定方法は CD-ROMの場合と同じです.

CD-Rを焼く場合は,以下の手順が必要です.

まず,cdrecordmkisofsというコマンドが必要です. これらは,以下のようにしてソースからインストールします. なお,mkisofsはISO9660のファイルシステムイメージ作成コマンド, cdrecordはイメージファイルなどのデータをCD-Rに焼くためのコマンドです.

○cdrecordのmake

cdrecordのソースは,執筆時点での安定版と思われる, cdrecord-1.6.1を使いました. この中にはmkisofsも含まれていて,同時にインストールされます. makeの手順は以下のようになります.

・Linux make手順
$ ./Gmake.linux
$ su
# ./Gmake.linux install
# cd /usr/local/bin
# ln -s /opt/schily/bin/* .   ← cdrecord と mkisofs へのシンボリックリンク
・FreeBSD make手順

FreeBSD標準のBSD makeは使えませんので, あらかじめGNU makeが,gmake というコマンド名でインストールされていて, PATHが通っている必要があります.

$ ./Gmake
$ su
# ./Gmake install
# cd /usr/local/bin
# ln -s /opt/schily/bin/* .   ← cdrecord と mkisofs へのシンボリックリンク
(以上のように,cdrecordは標準で/opt/schily というところにインストールされますが, 元のソースを尊重して,これはそのままにして,/usr/local/bin からのシンボリックリンクを張るようにしました)

以上で,CD-Rを焼くために必要なcdrecordmkisofs ができました.


○ISO9660ファイルシステムイメージの作成

まずmkisofsコマンドを使って ISO9660ファイルシステムイメージを作成します. CD-Rの容量いっぱいに焼く場合,イメージファイルの作成のため, 600数十MBの空きが必要です.mkisofscdrecord をパイプでつないで,イメージファイルを作らずに焼くこともできますが, あまり推奨しません.

mkisofsコマンドは以下のようにして使います.(Linux FreeBSD共通)

# TZ=UTC mkisofs -R -J -a -b images/BOOTFILE -o CD root
(シェルは/bin/shです)

この例では,カレントディレクトリの下にある, root というディレクトリ以下を,すべてまとめて ISO9660+RockRidge+Jolietでファイルシステムを作成し, それをカレントディレクトリ上のCDというファイルに出力します. またこの時,CD-ROM内のimages/BOOTFILEを,El Toritoでの ブートファイルとして-bオプションで指定しています. ブータブルディスクを作るのでなければ -bオプションの部分は外して下さい.

筆者は通常,このオプションで使用していますが, その他のオプションについては,オンラインマニュアルなどを参考にして, 好みで追加してもいいと思います.

ところで,コマンドの頭で,Bシェル文法で環境変数TZ=UTC を指定しているのに注意して下さい. (コラム:「CD-Rはタイムゾーンに注意」参照)


○ファイルシステムイメージのループバックマウント

LinuxでもFreeBSDでも,ファイルシステムイメージを, あたかもブロックデバイスのようにマウントすることができます. そこで,以下のようにして,焼き上がる予定のCD-Rの中身を先に確認します.

・Linuxの場合
# mkdir /mnt/tmp
# mount -r -o loop -t iso9660 CD /mnt/tmp
 (確認が終ったらアンマウント)
# umount /mnt/tmp
・FreeBSDの場合

FreeBSDではLinuxの/dev/loopに相当するのはvnデバイスですが, このvnデバイスがGENERICカーネルには組み込まれていません. このため,ここだけはカーネルの再構築が必要です.

/usr/src/sys/i386/conf/GENERIC を適当な別名ファイルにコピーし,以下の1行を追加します.

pseudo-device vn

そして,通常のカーネル再構築の手順を行ない,注意してリブートします.

マウントの手順は以下のようになります.

# vnconfig /dev/vn0 CD
# mount -t cd9660 /dev/vn0 /mnt
 (確認が終ったら元に戻す)
# umount /mnt
# vnconfig -u /dev/vn0
○デバイスファイルの作成

FreeBSDの場合のみ,作業が増える場合があります.

・FreeBSDの場合

FreeBSD 3.2では,/dev/pass*というデバイスファイルが使用されます. これは,以下のようにcamcontrolコマンドで確認できます.

# camcontrol devlist
<nEC DSE2010S 0315>       at scbus0 target 3 lun 0 (pass0,da0)
<TEAC CD-R56S 1.0E>       at scbus0 target 4 lun 0 (pass1,cd0)  ← ここ
<FUJITSU M2512E 0050>     at scbus0 target 5 lun 0 (pass2,da1)
<IBM DORS-32160 S82C>     at scbus0 target 6 lun 0 (pass3,da2)
(これはあくまで例です)

ここでは,CD-Rが/dev/pass1を使用していることがわかります. デバイスファイルは,デフォルトでpass0〜3 あたりまでは存在するようですが, もし無ければ,たとえば以下のようにして作成します.

# cd /dev
# ./MAKEDEV pass8   ← /dev/pass0〜pass7まで作られる

なお,FreeBSD 2.xなどでは,/dev/scgxを作成したりするようですが, FreeBSD 3.2では必要ありませんでした.

・Linuxの場合

Linuxの場合,/dev/sga〜/dev/sghがデフォルトで存在していたため, 特に何もする必要はありませんでした. なお,cdrecordには,引数でSCSI IDを直接指定しています.

○いよいよCD-Rを焼く

いよいよcdrecordを実行しますが,まず一度,以下のように -dummyオプションを 付けて実行し,予行演習を行ないます. -dummyを付けると,CD-Rドライブ内のレーザがオフのままになって, 物理的な書き込みが起こらない以外は,本番と同様の処理が行なわれます.

ここで,いわゆるアンダーランや,その他の問題がないことを確認します.

なお,-dummyを付けた状態でも, ブランクのCD-Rメディアをドライブに入れておかなければなりません.

また,ここでFreeBSDの場合のみ,注意があります.(以下☆参照)

# cdrecord -dummy -v dev=4,0 speed=6 -pad CD
                         =         =
                         |         |
                         |         +--- 書き込み6倍速
                         +------------- SCSI ID=4 の場合

すべてがOKなら,ここで-dummyオプションを外して cdrecordを実行し,本当にCD-Rを焼きます.

☆ FreeBSD の場合の注意

TEAC CD-R56Sというドライブで試したところ,Linux上では全く 問題ありませんでしたが,FreeBSD上では,cdrecordの実行時に,

cdrecord: Input/output error. write_g1: scsi sendcmd: retryable error

というエラーが出て,その後終了してしまうという現象が発生しました. これでしばらくハマりましたが,解決方法がわかりました.

cdrecordの実行時には, -dummyオプションを付けているか本番かに関わらず, 毎回,メディアをejectして入れ直さなければならないのです.

この「入れ直し」が不便ですが,これで無事CD-Rを焼くことができました.

★ でも、Linuxでも

ところが、あとでいろいろと試してみたところ、Linuxでもcdrecordの 実行前に、一度CD-Rメディアをejectしないとエラーになるという現象が 確認できました。(SCSIカードにもよるのかも知れません) いずれにしても、cdrecordの実行前には念のため、 CD-Rメディアのeject「入れ直し」をした方がいいみたいです。


●MO

MOは,ハードディスクと同じように認識されます. 再び前章の図(SCSIのデバイスファイル)を見て下さい. MOのデバイスファイル名もハードディスクと同じように付けられます.

MOのパーティションの形式には,パーティションテーブルを持たずに MO全体を使う,スーパーフロッピ形式と, ハードディスクと同様にFdiskパーティションを 作成するFdisk形式があります.

○スーパーフロッピ形式

通常は,スーパーフロッピ形式を使うことが多いと思います.

・Linuxの場合

Linuxの場合のデバイスファイルは,/dev/sda,/dev/sdb,...となります. 新しいMOは,fdiskコマンドなどを使わずに,直接/dev/sdb などに対して,mkfs を実行してファイルシステムを作成し,マウントして使います.

# /sbin/mkfs /dev/sdb
mke2fs 1.12, 9-Jul-98 for EXT2 FS 0.5b, 95/08/09
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
・FreeBSDの場合

FreeBSDではデバイスファイルは/dev/da0,/dev/da1,...となりますが, 筆者が試したところ,newfs /dev/rda1cなどとやっても, Fdisk形式でのパーティションテーブルを読もうとしてしまうようで, スーパーフロッピ形式でのnewfsがうまくいきませんでした. しかし,以下のようにしてDOSのファイルシステムを作ってマウントすることは できました.

# newfs_msdos /dev/rda1  (または単にda1,あるいはod1でもよい)
# mount -t msdos /dev/da1 /mnt

また,後述のようにtarで直接データを書き込むこともできました. この場合は,/dev/rda1などに直接書き込みます.

なお,MO用のデバイスファイルと見られる/dev/od0などのファイルも 存在しますが,これらのMajor/Minor番号は/dev/da0などと同じであり, od0が1番目のMOというわけではなく,da0と同じものになります. SCSIハードディスクを使用している場合は,それが通常da0(=od0)となるため, 注意が必要です.

○Fdisk形式

Fdisk形式の場合は,ハードディスクと同様にパーティションを作成します. デバイスファイルも,ハードディスクと同様, Linuxでは/dev/sdb1,/dev/sdb2,...などに, FreeBSDでは/dev/da1s1,/dev/da1s2,...などになります.

なお,どちらの形式でも,ファイルシステムを作成せずに, tarなどで直接データを書き込んで,テープデバイスの代わりにすることも できますが,その場合にもあえてFdisk形式を用いる場合は,最初のセクタに パーティションテーブルがありますので,誤ってここに書き込まないように 注意します.


関連ページ:
Solaris/Linux/FreeBSDでCD-Rを焼こう

To「Linux&FreeBSD ハードウェア設定」index


このページは、技術評論社 Linux×BSD HYPER PRESS Vol.2秋号、『もう困らない!Linux&FreeBSD ハードウェア設定テクニック』 の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 Home
yamamori