wtapeプログラム
は連続記録の1分ファイルをテープに書き込みます。
テープに書かれた連続記録データを読み出すのは、
rtape
プログラムです。テープ上では、
1分ごとではなくて、10分ごとにテープマーク(ファイルマーク)が
書かれます。wtape は1つのwrite()システムコールで1秒分のデータを
テープデバイスに書きますので、基本的に1秒分がテープ上の1ブロック
になるはずです。しかし1秒分のデータのサイズが大きい場合、OSによっては
それが適当な大きさに分割されて書き込まれています。
- FreeBSD 3.X の場合
- write時には、ドライバーが1秒分のデータを61440 バイト毎のブロックに
分割して書き込むようです。read時には、ドライバーが分割されたブロックを
つなぎ合わせて元のサイズに戻してくれます。したがってプログラムは
テープ上に分割して記録されていることを意識する必要はありません。
ただし、テープ上で61440バイトを超える(物理)ブロックサイズは
エラーになってしまい、読み出すことができません。
- Solaris2の場合
- write時はドライバーが 65534バイト毎に分割して書き込みます。
read時はドライバーが分割されたブロックを自動的に元のサイズに
戻すことはしなくて、65534バイトの物理ブロック単位で読みだされます。
したがって、読み出しをするアプリケーションプログラムがそれを
つなぎ合わせる必要があります。そのため、rtape プログラムは、1秒分のデータが
読み出されるまで、read()システムコールを繰り返すようになっています。
以上のことから、FreeBSDのwtapeで書いたテープをSolaris
のrtapeで読むことはできるが、逆にSolarisのwtapeで書いたテープを
FreeBSDで読むことはできない、ということになります。
- 追加情報
- SunOS4はFreeBSD 3.Xと同じ形式であるようです。
また、LinuxはSunOS/FreeBSDで
書いたテープを読めるようです。したがって、FreeBSD 3.XとSunOS4は同じBSD系、
Solaris2とLinuxは同じSystemV系で、BSD系のwtapeで書いたテープをSystemV系
のrtapeで読むことはできるが、逆にSystemV系のwtapeで書いたテープを
BSD系のrtapeで読むことはできない、と整理することができるかも知れません。
- 追加情報2
- FreeBSD 4.Xは、write時にブロックの分割を行いません。
実験したところ、少なくとも10MBまでの大きさのブロックのままで
書き込み、そのまま読み出すことができます。wtapeでこうやって書き込まれた
テープは、1秒ブロックの大きさが60KBを超えるような場合、
FreeBSD 3.X/Solaris2のいずれでも読み出すことはできず、FreeBSD 4.Xでないと
読むことはできません。もちろんFreeBSD 4.XはFreeBSD 3.XやSolaris2によって
書かれた分割ブロックのデータも読み出すことができます。
- 追加情報3
- 上記のようにFreeBSD 4.X は巨大なブロックサイズでテープに
書き込もうとするため、SCSIカードによってはwtape実行時にI/Oエラーが
出る場合があります。wtapeプログラムで適当な大きさに分割してから
書き込むべきかもしれません。ただしテープの利用効率はブロックサイズが
大きい方が高いと思われます。