FreeBSD QandA 1845
Q. FreeBSD で 640MB の MO に UFS (FFS) を作成して使いたい。
A. SCSI 接続の MO ドライブならば、4.0-RELEASE 以降は da(4) ドライバで対応してお
り、基本的には標準のシステムで利用可能です。(*1)
ATAPI の MO は 4.4-RELEASE の時点ではそのままでは使えませんが、使えるように
する方法が [FreeBSD-users-jp 65621] で報告されています。
以下では da0 が MO ドライブであるとして説明します。
基本的には、他のメディア同様 disklabel を作成して newfs すれば使えます。
しかし 640MB の MO はセクタサイズが 512 バイトでなく2048 バイトなので、そ
ういう指定が必要な場合があります。
disklabel の前に fdisk で slice を作成することももちろん可能ですが、ここで
は割愛します。
(a) disklabel の書き込み (*2)
[管理番号 680] の A2、A3 を参考にします。
disklabel が
root# disklabel -r -w da0 auto
disklabel: /dev/da0c: Undefined error: 0
というエラーを出力して終了してしまう場合、A2 にしたがって slice の情報を消
す必要がありますが、dd の引数に bs=2048 が無いとエラーになって書き込みでき
ないことに注意してください。(*3)
エラーになる場合:
root# dd if=/dev/zero of=/dev/da0 count=4
dd: /dev/da0: Invalid argument
1+0 records in
0+0 records out
0 bytes transferred in 0.000411 secs (0 bytes/sec)
うまく行く場合:
root# dd if=/dev/zero of=/dev/da0 bs=2048 count=4
4+0 records in
4+0 records out
8192 bytes transferred in 1.138270 secs (7197 bytes/sec)
また A3 で「最小限のパーティション設定」というのは, c だけが存在するという
意味です。a パーティションが必要ならば、disklabel -e で編集するか、
/etc/disktab に 640MB MO 用の項目を用意しておいて、auto の代わりにそれを指
定しなければなりません。ここでは od-driver のパッチキットに含まれているも
のを使いました。([管理番号 22] 参照)
例えば、
root# disklabel -r -w da0 auto
user% disklabel -r da0 | tail -2
# size offset fstype [fsize bsize bps/cpg]
c: 310352 0 unused 0 0 # (Cyl. 0 - 151*)
これに対して,
root# disklabel -r -w da0 mo640
user% disklabel -r da0 | tail -3
# size offset fstype [fsize bsize bps/cpg]
a: 310352 0 4.2BSD 2048 8192 0 # (Cyl. 0 - 151*)
c: 310352 0 unused 0 0 # (Cyl. 0 - 151*)
の様になります。
(b) ファイルシステムの構築 (参考 [管理番号 575])
root# newfs da0a (*4)
Warning: Block size restricts cylinders per group to 10.
Warning: 3776 sector(s) in last cylinder unallocated
/dev/da0a: 1241408 sectors in 76 cylinders of 1 tracks, 16384 sectors
606.2MB in 8 cyl groups (10 c/g, 80.00MB/g, 9600 i/g)
super-block backups (for fsck -b #) at:
32, 163872, 327712, 491552, 655392, 819232, 983072, 1146912
Warning が二つ出ました。
一つ目は、すぐ上の disklabel -r の結果において a パーティションの bps/cpg が
0 になっているためです。newfs 後にもう一度 disklabel -r すると、ここが 10 に
なっています。
二つ目は、セクタをグループ化したときに端数が出てしまったという意味です。
この 8 MB 弱は利用できないことになります。まあ 8/640 なので良しとしましょう。
これで 640MB MO のメディアの準備ができましたので、mount して利用できます。
(*1) MO を利用するのに od-driver が推奨されることがあります。これは、いくつ
かのコマンドやカーネルに対するパッチですが。4.0-RELEASE 以降は MO を利用
するのに必須のものではなくなりました。
現在 MO を利用する際に od-driver を用いる利点は
- da(4) の代わりに od(4) でアクセスできるので、ハードディスクと間違わない
- removable メディアに配慮しているので、ライトプロテクトした MO をうっかり
read&write で mount してもシステムがハングアップしない
などです。
(*2) /etc/disktab に 640MB MO 用の項目があれば、[FreeBSD-users-jp 53060] で
報告されている通り、disklabel を省いて newfs のみで disklabel も同時に書
き込むことも出来ます。
root# newfs da0c mo640
Warning: Block size restricts cylinders per group to 10.
Warning: 3776 sector(s) in last cylinder unallocated
/dev/da0c: 1241408 sectors in 76 cylinders of 1 tracks, 16384 sectors
606.2MB in 8 cyl groups (10 c/g, 80.00MB/g, 9600 i/g)
super-block backups (for fsck -b #) at:
32, 163872, 327712, 491552, 655392, 819232, 983072, 1146912
これで da0c を mount して使用することが出来ます。
パーティション c を disk 全体を表すものとして fstype を unused のままにす
る慣習に従い、4.2BSD となっていると disklabel が下記の warning を出します
が、使用する上で支障はありません。
Warning, partition c is not marked as unused!
Warning, An incorrect partition c may cause problems for standard system utilities
また、disklabel が正しく書き込まれない場合があります。
user% disklabel -r da0 | tail -3
disklabel: bad pack magic number (label is damaged, or pack is unlabeled)
またこの方法では、disktype に auto を指定することは出来ません。
root# newfs da0c auto
newfs: auto: unknown disk type
となります。
(*3) 230MB のメディアは bs を指定しなくても書き込めます。
(*4) ここでは a パーティションにを newfs しました。当然ですが既に作成されて
いるパーティションしか newfs できません。/etc/disktab の 640MB MO のエント
リを使わずに auto で disklabel した場合には、c パーティションが存在するの
みですから、`newfs da0c' としなければいけません。
間違い・追加情報を見付けた場合は、
修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで
お知らせください。