FDREAD(1)

名称
fdread - フロッピディスクの読み取り

書式
fdread [-qr] [-d device] [-f fillbyte] [-o file] fdread [-d device] -I numsects [-t trackno]

解説
fdread ユーティリティはフロッピディスクを読みます。 トラックサイズに基いて効果的なリードのブロック化が行われ、 バッドブロックとなるものに対してはエラー回復を有効化できます。

fdread ユーティリティはフロッピメディア全体を読み、 対応する出力ファイルにその内容を書きます。 dd(1) のような他のツールとは違い、 単一ブロック読み取りより効果的なブロックサイズを fdread は自動的に使用します (通常は 1 度に 1 トラック分のデータ) が、 入出力エラー発生時には単一フロッピセクタの読み取りに変更し、 正当なデータをなるべく多く取得しようとします。 fdread の動作中は、フロッピエラーに関するカーネルエラー報告はオフにし、 コンソールや syslog がカーネルエラーメッセージで溢れないようします。

fdread ユーティリティは次のオプションを受け付けます:

-q  静寂モードをオンにします。 デフォルトでは、デバイスのメディアパラメータが標準エラー出力に書かれ、 それまでに読まれたおよそのキロバイト数が示され、 出力中で回復されたデータの位置に関する情報を含むエラーの詳細が表示されます。 静寂モードでは、これらのメッセージは生成されません。

-r  回復モードを有効にします。 デフォルトでは、 dd(1) のように、 fdread は最初の回復できない読み取りエラーで停止します。 しかし回復モードでは、次の 2 つのいずれかの回復動作が行われます:

    •   エラーがデータフィールドの CRC エラーの場合、 カーネルはそのエラーを無視し、ともかくデータは出力ファイルに転送されます。 出力ファイル中に誤ったデータが含まれてしまうということです! それでもこれが、実施可能な最良の回復動作です。

    •   他のエラーは本当に致命的であり (通常、FDC がセクタ ID フィールドを見付け られないというものです)、埋め草バイトのダミーブロックが出力ファイルに 含まれます。

    静寂モードでない限り、行われた動作とエラーの出力ファイルでの位置が、 表示されます。

-d device
    入力フロッピデバイスを指定します。 デフォルトは /dev/fd0 です。 パラメータ device は、正しいフロッピディスクデバイスであることが必要です。

-f fillbyte
    回復モードにおいて、出力ファイル中のダミーブロックに使われる、 埋め草バイトの値。 デフォルトは ‘0xf0’ (ニーモニック: “foo”) です。 値の指定には、通常の C 言語表現の基数指定が使用可能です。

-o file
    出力ファイルが file であると指定します。 デフォルトでは、データは標準出力へ書かれます。

-I numsects
    numsects 個のセクタ ID フィールドを読み、それらの内容を標準出力へ書きます。 各セクタ ID フィールドは、 シリンダ番号 (‘C’) 、ヘッド番号 (‘H’) 、レコード番号 (セクタ番号は 1 から開始) (‘R’) 、 セクタシフト値 (0 = 128 バイト、1 = 256 バイト、2 = 512 バイト、3 = 1024 バイト) に対し、記録値を含みます。 -I は、 -d device と -t trackno を除き、他のすべてのオプションと排他です。

-t trackno
    セクタ ID フィールドを読み取るトラック番号 (シリンダ番号 * ヘッド数 + ヘッド番号) を指定します。 -I numsects オプションとの組み合わせだけが許されています。

関連ファイル

/dev/fd0
    読み取り用のデフォルトデバイス。

診断
fdread ユーティリティは sysexits(3) に従って終了値を設定します。 回復モードでは、処理中にエラーが発生すると、終了値に EX_IOERR を設定します (静寂モードにおいても)。

静寂モードでない場合、エラーに出会うと、フロッピディスクコントローラ (FDC) の状態が表示され、これに続いて、PC 環境で発生しうるほとんどの一般的な エラーに対してはこの数値を人が読める形式に変換したテキスト表現が 表示されます。

FDC エラー状態には 3 個の FDC 状態レジスタ ‘ST0’, ‘ST1’, ‘ST2’ と、エラー位置 (それぞれ物理的なシリンダ・ヘッダ・セクタ番号と、 “セクタシフト値”) が含まれます。 状態レジスタの内容の詳細については、 NE767 や互換チップのマニュアルを参照してください。

その後、エラーが回復可能と思われるのかを判断するために、 FDC の状態が検査されます。 エラー回復が要求されている場合、出力ファイル中の不良ブロックの位置が (16 進数の) 範囲で表示されます。 また、転送エラーの合計を示すサマリ行が、終了前に表示されます。

関連項目
dd(1), fdwrite(1), sysexits(3), fdc(4), fdcontrol(8)

歴史
fdread ユーティリティが書かれた主な理由は、 不良メディアから少なくともいくらかのデータを回復することと、 フロッピ操作に有用だが覚え難い多数のオプションを使って dd(1) を起動しなくても良いようにすることです。

このコマンドは FreeBSD 5.0 に登場しました。

作者
プログラムとマニュアルページを Jörg Wunsch が書きました。

バグ
同じ FDC 上の第 2 のフロッピドライブに同時にトラフィックがあると、 エラー回復が無意味になってしまいます。 何故なら、読み取りエラー後に取得した FDC 状態が、 本当にその誤りを含む転送のものであることを保証できないからです。 よって、 -r オプションの使用が信頼できるのは、 そのコントローラのアクティブデバイスが device のみの場合だけです。

fdc(4) のフロッピエラー再試行機構を越えた試行は行われませんので、 複数回試行することで不良セクタをエラー無しで読めるかどうかは調べません。

フロッピメディア上で (もはや) 使用できないビットを fdread が推定することはできません。