Linux&FreeBSD ハードウェア設定 |
YAMAMORI Takenori ●yamamori |
■CD-ROM, CD-R, MO を使う
CD-ROMの増設は,ハードディスクの場合と同様,接続すればOKです. デバイスファイル名については,前章の 図(IDEのデバイスファイル), 図(SCSIのデバイスファイル) を参照して下さい.
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/fstabにuserオプションが付いて記述されている場合は, 一般ユーザも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の場合は,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-ROMドライブとして使うだけなら,設定方法は CD-ROMの場合と同じです.
CD-Rを焼く場合は,以下の手順が必要です.
まず,cdrecordとmkisofsというコマンドが必要です. これらは,以下のようにしてソースからインストールします. なお,mkisofsはISO9660のファイルシステムイメージ作成コマンド, cdrecordはイメージファイルなどのデータをCD-Rに焼くためのコマンドです.
cdrecordのソースは,執筆時点での安定版と思われる, cdrecord-1.6.1を使いました. この中にはmkisofsも含まれていて,同時にインストールされます. makeの手順は以下のようになります.
$ ./Gmake.linux $ su # ./Gmake.linux install # cd /usr/local/bin # ln -s /opt/schily/bin/* . ← cdrecord と mkisofs へのシンボリックリンク
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を焼くために必要なcdrecordとmkisofs ができました.
まずmkisofsコマンドを使って ISO9660ファイルシステムイメージを作成します. CD-Rの容量いっぱいに焼く場合,イメージファイルの作成のため, 600数十MBの空きが必要です.mkisofsとcdrecord をパイプでつないで,イメージファイルを作らずに焼くこともできますが, あまり推奨しません.
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の中身を先に確認します.
# mkdir /mnt/tmp # mount -r -o loop -t iso9660 CD /mnt/tmp (確認が終ったらアンマウント) # umount /mnt/tmp
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 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の場合,/dev/sga〜/dev/sghがデフォルトで存在していたため, 特に何もする必要はありませんでした. なお,cdrecordには,引数でSCSI IDを直接指定しています.
いよいよ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を焼きます.
TEAC CD-R56Sというドライブで試したところ,Linux上では全く 問題ありませんでしたが,FreeBSD上では,cdrecordの実行時に,
cdrecord: Input/output error. write_g1: scsi sendcmd: retryable error
というエラーが出て,その後終了してしまうという現象が発生しました. これでしばらくハマりましたが,解決方法がわかりました.
cdrecordの実行時には, -dummyオプションを付けているか本番かに関わらず, 毎回,メディアをejectして入れ直さなければならないのです.
この「入れ直し」が不便ですが,これで無事CD-Rを焼くことができました.
ところが、あとでいろいろと試してみたところ、Linuxでもcdrecordの 実行前に、一度CD-Rメディアをejectしないとエラーになるという現象が 確認できました。(SCSIカードにもよるのかも知れません) いずれにしても、cdrecordの実行前には念のため、 CD-Rメディアのeject「入れ直し」をした方がいいみたいです。
MOは,ハードディスクと同じように認識されます. 再び前章の図(SCSIのデバイスファイル)を見て下さい. MOのデバイスファイル名もハードディスクと同じように付けられます.
MOのパーティションの形式には,パーティションテーブルを持たずに MO全体を使う,スーパーフロッピ形式と, ハードディスクと同様にFdiskパーティションを 作成するFdisk形式があります.
通常は,スーパーフロッピ形式を使うことが多いと思います.
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ではデバイスファイルは/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形式の場合は,ハードディスクと同様にパーティションを作成します. デバイスファイルも,ハードディスクと同様, Linuxでは/dev/sdb1,/dev/sdb2,...などに, FreeBSDでは/dev/da1s1,/dev/da1s2,...などになります.
なお,どちらの形式でも,ファイルシステムを作成せずに, tarなどで直接データを書き込んで,テープデバイスの代わりにすることも できますが,その場合にもあえてFdisk形式を用いる場合は,最初のセクタに パーティションテーブルがありますので,誤ってここに書き込まないように 注意します.
To「Linux&FreeBSD ハードウェア設定」index