SCSI tape data loss
PostMaster General
mail at cybernetics.com
Tue Jun 3 14:22:07 PDT 2003
It looks like your code is failing to detect the check condition no
sense combination thrown when you hit EOT - and in variable block mode
you would not see any residual on the block that crossed LEOT. I don't
know enough about the FreeBSD tape driver to know where the fault
lies.
Even using that as a theory it did not make any sense why you were
loosing so many blocks of data. I pulled up a DDS manual and checked
the EOT behavior and got a surprise. Most modern tape drives
automatically go into unbuffered mode past LEOT. This would insure
that you would lose only one block when you hit PEOT. But the
description that I have added below only states that it will throw a
check condition/no sense for each write past LEOT. Thus it would seem
that you have several data blocks in the buffer when PEOT is reached.
I wonder if the error you are detecting as EOT is in fact a deferred
error from several blocks back?
Manual excerpt:
The drive calculates the logical Early Warning. The Early Warning
point is
calculated as greater than ten megabytes before the EOT. This ensures
that
when Early Warning is encountered, enough space remains to
successfully
write any unwritten blocks up to ten megabytes.
At Early Warning, the drive completes the current block transfer and
terminates the command with a Check Condition, EOM bit set, and Sense
Key
equal to 0. If the SEW bit (in MODE SELECT Device Configuration Page)
is set,
the data in the buffer is then written to tape.
Subsequent WRITE commands complete with a Check Condition and the EOM
bit set.
If writing the buffer to tape is unsuccesful because of EOT, a Volume
Overflow
is reported. The Residual count field in the Request Sense data
reports the
amount of data not transferred. Writing can continue in the Early
Warning
region until EOT is encountered. Any WRITE command issued within Early
Warning and successfully completed, finishes with a Check Condition
and the
EOM bit set.
If an error is encountered while writing, the Write Retry Count (in
MODE
SELECT Read/Write Error Recovery Page) specifies the maximum number of
attempts to rewrite the data. If none of the rewrites area successful,
the error is
considered unrecoveralbe and reported as such. This situation may
occur if the
tape has severe damage. In this case, the green LED flashes rapidly.
Hope this helps.
Martin
More information about the freebsd-scsi
mailing list