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