回答編集履歴

1 意味不明な箇所を修正

ikedas

ikedas score 3017

2017/01/11 22:38  投稿

/dev/nst0は、自動的に巻き戻されないテープ装置のデバイスです。
- 図の⑧まで書き込んだ場合、テープドライブのヘッドが最後のEOFを書き込んだ直後で、テープは停まっています。
- 再びテープデバイスに書き込むと、そのEOFの後に、データ (と、もうひとつのEOF) が書き込まれます。/dev/nst0に書き込んだのなら、再びテープは最後のEOFの直後で停まります [1]。
テープには、EOFで区切られた複数のデータブロック (レコード) が記録されることになります。
mt(1)コマンドを使えば、レコードからレコードへ移動できます。次のEOFの位置まで移動することで次のレコードの先頭へ、前の前のEOFの位置まで移動することで前のレコードの先頭へ移動できます (詳しくは``man mt``して下さい)。これにより、特定のレコードへ移動した上で、そのレコードの内容を読み取ったり、またはデータを書き込んでレコードの内容を更新したりできます (当然、書き込むデータは元のレコードより長くてはいけません。次のレコードを上書きして壊してしまいますから)。
こうして、1本のテープに複数のデータを格納して管理することができます (もっとも、データを区別する方法は「テープの最初から何番目のレコードか」ということだけです。ディスク上のファイルシステムのようにファイル名をつけたりディレクトリで分けたりはできません) [2]。
ところで、テープにはもともと何か書いてあったかもしれません。新たに書き込みして途中まで上書きした場合、上書きした場所より後にあるレコードは、まだ読み出せるかもしれません。途中まで上書きされたレコードについては、残りのデータも壊れてもう読み出せないかもしれません。
---
[1] /dev/nst0はもともと、このように使うことを想定したデバイスというわけではなく、初期のテープ装置には巻き戻し機能がなかったことに対応したものです (巻き戻しは、テープを装置から外して手作業、または専用の機器で行いました)。
[1] もともと巻き戻すデバイスがあって巻き戻さないオプションができたのではないです。逆で、初期のテープ装置には巻き戻し機能がありませんでした (巻き戻しは、テープを装置から外して手作業、または専用の機器で行いました)。そのためデバイス名で、巻き戻しに対応したものとしていないものを区別しました。
[2] 「これ以降はデータがない」ということを示すために、最後にEOFを2回 (以上) 続けて書き込んでおく、といった規約を設ける場合もあります。テープのこれ以降は空き領域とみなし、読み込みに使いません。新規のレコードを追加するときは、2個目のEOFを上書きして書き込みます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る