第26回 フロッピーディスクの活用

¨
本稿は Linux Japan 誌 2001 年 3 月号に掲載された
¥
brw-rw---...
brw-rw---brw-rw---brw-rw---§...
記事に補筆修正したものです.
フロッピーディスクの活用
DIMM メモリは投機筋が蠕いているらしく値段の上
がり下がりが激しいですね.今は底値で 128MB がノー
ブランドなら 5000 円 以下です.安いといえば,CD-R
は普及と供に健全に価格が低下し今や 1 枚 50 円です.
50 円で買えるものというと,3.5” 2HD(High Density
の略) のフロッピー.強引なイントロですが (^^;,今
回はこのフロッピーディスクの活用についてお話しま
す.話題の中心は,Fdutils というユティリティです.
これは Linux でフロッピードライブを扱うためのを集
めたものです [1] W3 .
1 root floppy 2,
0 ... /dev/fd0
1 root floppy 2, 84 ... /dev/fd0u1040
1 root floppy 2, 88 ... /dev/fd0u1120
1 root floppy 2, 28 ... /dev/fd0u1440
¦
のように (字詰めしてます) となっていることと思い
ます.この設定では,フロッピーを使うには floppy
の グ ル ー プ に 所 属 し な け れ ば な り ま せ ん .そ れ に
は /etc/group の floppy グループにユーザー名を追加
します (再度ログイン後有効になります).登録すべき
ユーザーが多く煩わしい場合には,セキュリティが低
下しますが,
¨
¥
§chmod 666 /dev/fd0
¦
により /dev/fd0 のパーミッションを 666 にして other
にも解放するしかないでしょう.
Fdutils の概要
物理フォーマット
Fdutils には以下のものが含まれており,各配布系で
現 在
Linux
の フ ロッピ ー ディス ク は
/usr/src/linux/drivers/block/floppy.c
の
400 行目あたりに記述されているように,31 種類が定
義されており (固定パラメタ),デフォルトで使えるよ
うになっています.これ以外にもパラメタを変更して
フォーマットすることがもちろん可能です.例えば,
Fdutils のサイトには fdrawcmd を用いて,CP/M の
ディスクを解析,アクセスする方法などが紹介されて
います.
標準的にインストールされている筈です.
superformat, fdmount, xdfcopy,
MAKEFLOPPIES, getfdprm, setfdprm,
fdracmd, floppycontrol, floppymeter,
diskd, diskseekd
このうち,一般ユーザーが日常使って幸せになれるのは
superformat による,ディスク容量の増加 (3.5” 2HD
で 1992 kB まで) でしょう.
superformat
コンパイル
superformat は,種々のパラメタを指定してフロッ
ピーを物理フォーマットします.ついでに,その物理
フォーマットに合わせて MS-DOS 論理フォーマットも
実行します.表 1 に,3.5” 2HD に対してデフォルト
標準でインストールされている筈ですが,詳しいド
キュメント Fdutils.dvi を得るためにソースを展開して
configure, make(make install は不要ですね) しましょ
う.この記事の内容は,Fdutils.dvi に全て記載されて
で定義されているタイプを示します.例えば 1920 kB
いますので,筆者の怪しい説明よりも原文を読んだ方
(ただし,この値は ext2 で論理フォーマットした場合
が正しく理解できることと思います.
の容量で,DOS のものとは違います) は
¨
¥
superformat /dev/fd0 hd tracksize=12kB mss
§
¦
とします.ここで mss は Mixed Sector Size の略で,
パーミッションの確認
フロッピーデバイスにアクセスするには,/dev/fd* に
読んで字の如く大きさの異なるセクターを混ぜて使う
対して書き込みの権限が必要です.“ls -l /dev/fd0*
ことでディスク容量を拡大する方式です.ディスク容
” としてみてください.
量の拡大方法は,基本的にはシリンダー (cyl) や セク
ター (sect) を通常の値よりも大きくすること (1440kB
は cyl=80,sect=18) や,上記の mss などの方式を導
入することで計られています.なお,-f を付けるとベリ
1
ファイを省略しますからフォーマットに要する時間が
える長さのファイルは変な名前 (もちろん規則性はあり
短くなります.表 1 には superformat でファオーマッ
ます) に変換されてしまいます.例えば
¨
ト可能な最大容量 1992kB タイプと 1826kB タイプも
mdir a:
...
TORI_P~1
TORI_P~1
TORI_P~1
TORI_P~2
示しました.1992kB の場合は mss のおかげでアクセ
スがかなり遅くなります,1826kB はアクセスがあまり
遅くならない範囲での最大容量です.
以降このフロッピーは DOS のフロッピーとして使
うことができます.例えば,mdir すると
¨
Volume in drive A has no label
Volume Serial Number is 71BF-CB26
Directory for A:/
¥
File "*" not found
1 947 648 bytes free
§
¦
と使用可能な残り容量が表示されることで確かめると
ことができます.もちろん,以下のようにして ext2 で
論理フォーマットも可能です.
¨
¥
§/sbin/mke2fs /dev/fd0
この際に表示されるメッセージは
¨
mke2fs 1.14, 9-Jan-1999 for EXT2 FS 0.5b,
95/08/09
Linux ext2 filesystem format
Filesystem label=
480 inodes, 1920 blocks
96 blocks (5.00...
¦
¥
58995
444
42648
10300
...
...
...
...
tori_pm3d.gif
tori_pm3d.gp
tori_pm3d.jpeg
tori_pm3d_s.jpeg
§
¦
となってしまうのです.これを元の名前で復元してコ
ピーするのは面倒ですね.ところがこのフロッピーを
mount すると
¨
¥
ls -l /floppy
...
-rwxr-xr-x ...
-rwxr-xr-x ...
-rwxr-xr-x ...
-rwxr-xr-x ...
58995
444
42648
10300
...
...
...
...
tori_pm3d.gif
tori_pm3d.gp
tori_pm3d.jpeg
tori_pm3d_s.jpeg
§
¦
と元の長い名前で扱われますから,cp コマンドで TAB
による名前補間まで有効になって,簡単にコピーでき
るようになります.mcopy ではオプション -t が UNIX
↔ DOS のテキストの改行コードを自動変換してくれ
るので便利です.
mount
§
¦
となって,ext2 では 1920 block すなわち 1920kB の
ディスクと認識されます.
ところで,初めて superformat を行った際には,次
のようなメッセージが表示されるはずです.
¨
¥
old capacity=12500
Measuring drive 0’s raw capacity
(略)...,
add the following line to /etc/driveprm :
§drive0: deviation=-2400
GIF
GP
JPE
JPE
¥
以上,DOS のフロッピーは mount にかかわらず読
み書き可能な方法があって,DOS らしい使い方ができ
ます.一方 UNIX ではストレージデバイスは mount し
てシステムに組み込む必要がありますから,ext2 ディ
スクも当然 mount する必要があります.一般にデバ
イスの mount/umount は root に委ねられており一般
ユーザーには解放しないのが安全です.ところが,リ
¦
これは,フロッピードライブの物理的な容量が回転速
ムーバブルなものはそうも言ってられませんから,ユー
ザー権限で可能にする道があります.御託を並べてし
まいましたが,方法は /etc/fstab に
¨
度の影響を受けて変化するので,規定の値からの偏差
を測定した結果なのです.指示通り /etc/driveprm に
¨
¥
§drive0: deviation=-2400
¦
¥
/dev/fd0 /floppy auto user,rw,noauto,exec 1 1
を書き込みましょう.なお,この値は正確ではないら
§
¦
と登録するだけです.2 番目のフィールドはマウントポイ
ントで,筆者は/floppy としていますが,読者ご自身の
しので,floppymeter で一度詳しく測定しみるとよいで
ホストの環境に合わせください (/fd0 や /mnt/fd0 が多
しょう.
いようです).こうすると,“cat /proc/filesystem”
で表示されるファイルシステムは自動判別 (auto) されて
¨
¥
読み書き:mcopy, cp
mount /floppy
§
¦
で mount できるようになります.ext2 は問題ないでし
ょうが,もし DOS が判別されないときは,“modprobe
DOS のフロッピーは Mtools を用いてシステムに
mount せずに読み書きが可能です.mcopy でフロッ
msdos” を実行,それでもだめならカーネルの再構築と
なります.mount した場合には (DOS であっても) cp
ピーにファイルをコピーするとき問題になるのが,名
前の長さ制限です.DOS の 8 文字+拡張子 3 文字を超
2
表 1 3.5” 2HD の物理フォーマットにおけるパラメタ
番号
7
11
15
19
24
25
29
31
–
–
容量 (kB)
1440
1680
1722
1743
1760
1920
1840
1600
1992
1826
ext2
メディア定義
hd
hd
hd
hd
hd
hd
hd
hd
hd
hd
○
sect=21
sect=21 cyl=82
sect=21 cyl=83
sect=11 ssize=1kB
tracksize=12kB mss
tracksize=23b mss
sect=20
tracksize=12kB cyl=83 mss
sect=11 cyl=83 ssize=1kB
ここでちょっと問題がありました.ext2 フロッピー
1 の ext2 欄の×印のものです.これは,フロッピーを
抜くと,ディスク情報がリセットされてしまうことに
よるものです.×印のものを新規に入れ直した場合に
は getfdprm でディスクがどう認識されているか調べ
ると
¨
¥
mount /floppy (マウント場所はホストの環境によります)
getfdprm
§DS HD sect=18
¦
となり sect=18 すなわち 1440kB と認識されてしまう
ことが判ります.したがって正しいディスク情報を与
え直す必要があります.root ならば明示的にドライブ
¥
¦
のように正しく設定することが可能です.一般ユーザー
では,この形式では mount コマンドを実行できませ
×
×
○
○
いことに気付くと思います.その訳は,floppycontrol
で調べると判ります.
¨
¥
floppycontrol -p
...
autodetect seq.= 7,4,25,22,31,21,29,11
§...
¦
autodetect のリストに 24 番 (1760kB) が載っていませ
ん,従ってスキャンすらされないのです.では,15 番
(1722kB) が mdir されるのは何故でしょう?スキャン
の指定はセクター (sect) に関するものでトラック (cyl)
は違っていても構わないと説明があります (最初のト
ラックをスキャンするだけです.また,ディスクの情報
はその最初のトラックに書き込まれています).従って,
11 番 があれば 15 番,19 番はスキャン可能となります.
これより 3.5” 2HD に関して,mdir で自動認識させる
ために必要な登録番号は 7,11,24,25,29,31 の 6 個にな
番 (720kB) と 22 番 (1120kB:意味が良くわかりませ
ラメタは /etc/fdprm に記述されており,1743 kB は
1743/1440 と登録されていますから (登録されてない
場合は floppy.c を参照して追記してください)
¨
¥
setfdprm /dev/fd0 1743/1440
○
ります.リストには最大 8 個の登録が可能ですから,4
ん.そこで登場するのが setfdprm です.ディスクパ
§
○
か表 1 について試すと,1760 kB が mdir すらできな
が実際には読み書きができないものがあるのです.表
§
×
実は,フロッピーを入れ直して自動認識するかどう
の一旦抜いてしまうと次には mount はされるのです
mount /dev/fd0u1743 /floppy
×
1,474,560
1,720,320
1,763,328
1,784,832
1,802,240
1,966,080
1,884,160
1,638,400
2,039,808
1,869,824
floppycontrol
コマンドしか使えません.
(ディスク容量) を指定して
¨
×
dd 容量
¦
と実行して正しくセットすれば,以降アクセスが可能
んが default の設定に敬意を表して) を加えて,root と
なって
¨
¥
§
¦
floppycontrol --autodetect 7,11,24,25,29,31,4,22
と自動認識のタイプの設定をやり直しましょう.とこ
ろで,これはあくまで物理フォーマットの自動認識で
になります.getfdprm で確かめてください.
す.その上の ext2 ファイルシステムが認識されること
を保証するものではありません.改めて,表 1 の ext2
欄は上記のようにして物理フォーマットが自動認識さ
れるように設定した場合,○印のタイプは ext2 も認識
されるようになったということです (何故なのかは勉強
3
不足で説明できません).
• DOS フロッピーは mount しなくとも Mtools で
読み書きできる.
fdformat:時代遅れ
筆者はフロッピーの物理フォーマットをずーっと fd-
format で行っていました.3.5” 2HD では標準的には
1440kB ですから,
¨
¥
§fdformat /dev/fd0u1440
¦
です.これより大きい容量で物理フォーマットするつ
もりで,
¨
• DOS フロッピーは mount して使うと長い名前の
まま扱える.
• ext2 でフォーマットしたもので自動認識されるの
は 7,24,25 番系列 (cly 数が違っていても良いとい
う意味) のものである.
うーん,まだすっきりしないですね.一般ユーザーに
はこの複雑さが見えないようにしてフロッピーを使え
るようにすることも管理者の腕前なのでしょう.
¥
§fdformat /dev/fd0u1920
¦
とすると,エラーが出ます.実際 fdformat のマニュ
アルには,3.5HD では一見 360,720,1440 kB しか物理
フォーマットできないような記述になっています.が,
実は 1760 kB までは,例えば
¨
¥
§fdformat /dev/fd0u1760
¦
で,物理フォーマットが可能です.superformat がある
以上,このコマンドは確かにもう過去の遺物 (obsolute)
かもしれません.
dd, tar と供に
tar も dd も論理フォーマットに関係な物理フォー
マットが認識できるデバイスに直接データを読み書き
します.従って,フロッピーが物理的に認識されれば
¨
¥
dd if=filename of=/dev/fd0
dd of=/dev/fd0 if=filename
tar zcvf /dev/fd0 files
tar zxvf /dev/fd0
§
¦
のようなコマンドを用いて,/dev/fd0 に対して直接読
み書きが可能となり,例えば 1992kB(ext2 上) のタイプ
は 2,039,808 bytes(1024 × 24 × 83) の容量を持ちます.
まとめ
今回は自分で読み返してもどうも見通しが悪いです.
フロッピーを楽に使うためのマメ知識と Fdutils の設
定をここでまとめます.
• フロッピーを自由に使うには /dev/fd0 にアクセ
スできる権限を持たないといけない.
• root で floppycontrol を用いて自動認識するタイ
プの設定を行う
• superformat でフォーマットすると DOS フロッ
ピーが作成でき,新規挿入時にも自動認識される.
4
参考文献
[1] Fdutils の公式サイト
http://fdutils.linux.lu