system management
1751967 メンバー
4617 オンライン
108783 解決策
新規ポスト

FD書き込みについて

 
keijirou
頻繁なアドバイザー

FD書き込みについて



いつもお世話になります。

<環境>

マシン:C8000 Workstation

OS:HP-UX 11i V1.0

上記環境で、UNIXフォーマットのFDに、データを書き込み、正常終了した後、そのFDからddコマンドでデータをファイルに落とすということを行ったところ、コマンドが無応答(killも効かず)になり、FDアクセスだけが永遠と続きました。

リブート後、出力ファイルのサイズを確認すると55808バイトでした。(再度、skipで56320バイト目からFD読み込んだところ、12800バイトファイルに書込んだところで無応答)

このように、書き込みは正常に行えたのに、読み込みができないという事象では、どういった原因が考えられるでしょうか?(書き込み後、磁気を帯びてしまった等)

また、FDに書込まれているデータのどの位置に不良があるかを調べる方法はないでしょうか?

抽象的な質問になってしまいましたが、回答よろしくお願いいたします。

5件の返信5
hazelwood
信頼あるコントリビューター

FD書き込みについて

実行されたことをもっと具体的に記述すると、回答が得られやすいと思います。

私の疑問点:

・「UNIXフォーマットのFD」って?FDにnewfsでもしたのでしょうか?

・書き込みはどのようにやったのでしょうか?

・読みだしの時のddのパラメータは?
keijirou
頻繁なアドバイザー

FD書き込みについて

hazelwood様、ご指摘ありがとうございます。

実施したコマンド等は以下のようになります。

1.mediainit -i 64 /dev/rfd3082 にて初期化したFD

2.書き込みはC言語のfwriteを使用して、1バイトをn個という指定で書き込み

3.dd if=/dev/rfd3082 of=./xxxx.xxx にて読み出し

4.dd if=/dev/rfd3082 of=./xxxx.xxx skip=110 で再度読み出し

5.無応答の際、FDには何度もアクセスしている(書き込みランプ点滅)

nt
貴重なコントリビューター

FD書き込みについて

floppy は mediainit で format を指定する必要があったと

思います。 (floppy(7))

またアクセスは track や sector を意識する必要があったような。

dosif(4) か lif(4) を使うのが簡単だと思います。
hazelwood
信頼あるコントリビューター

FD書き込みについて

分かっておられるかも知れませんが、これだと、データの終わりは自分で判断する必要があります。(FD内の全データ(ゴミを含めて)が読みだされてしまいます。

無応答になる理由はちょっとわかりませんが、FDに傷があるなどでI/Oできないのであれば、実行されている通り、ddでチェックできると思います。

一点注意として、ブロックサイズはセクタサイズの整数倍にしないとエラーになります。

(fwriteは内部でバッファリングするので、エラーになっていないものと思われます。)

> dosif(4) か lif(4) を使うのが簡単だと思います。

dosif(4)はFATでフォーマットされている必要があったと思います。

keijirou
頻繁なアドバイザー

FD書き込みについて

nt様、hazelwood様、回答ありがとうございます。

やはり、ddで読み込めなければ、傷等の不具合が生じていると判断してもよさそうですね。

ご指摘のとおり、出力されたファイルは全データが入ってしまいますね。

オープンは以下のように行っております。

open(/dev/fd3082, (O_RDWR | O_NODELAY | O_SYNC))

また、書き込みの関数ですが、fwriteではなく、writeを使用していました。

デバイスファイルの作成は以下のように行っております。

mksf -v -C disk -m 0x031000 /dev/fd3082

mksf -v -r -C disk -m 0x031000 /dev/rfd3082

引き続き調査をしてみたいと思います。