Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-5648

corrupt files contain extra data

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Critical
    • Lustre 2.7.0
    • Lustre 2.4.2
    • lustre-2.4.2-14chaos, ZFS OSD
    • 3
    • 15831

    Description

      Users have reported several recent cases of file corruption. The corrupt files are larger than expected, and contain all of the original written data plus additional data at the end of the file. The additional data appears to be valid structured user data of unknown origin. We have not found anything unusual in the console logs from clients or servers at the time the files were written.

      In one case, the user made a copy of a Lustre directory tree using HPSS archival storage tools, then compared the copy to the original. He found one corrupt file in the copy. The original file size was 2,000,000 bytes, but the copy size was 2,097,152 (2 MiB). The archive tool reported 2,000,000 bytes written. The extra 97,152 bytes appear to be valid structured user data of unknown origin.

      The corrupt file sizes are not always aligned on MiB boundaries, however. Of the cases reported so far, these are the sizes involved:

      Example # Expected Size Actual Size
      1 2000000 2097152
      2 1008829 2097152
      3 36473 1053224
      4 1008829 1441432

      In Example 1, the "bad data" begins immediately at the end of the expected data, with no sparse area between. Seen below with od -A d -a, the expected data is random bytes, whereas from offset 2000000 onward the unexpected data is structured.

                                                                               
      1999840   ! esc nul del   [ dc3   +   b   h   \ can   ;   f   h dc4   9            
      1999856   D   +   U   1   j   q   g   ;   7   J   r   {   "   j   )   D            
      1999872 enq   *   C   `   =   o   C   &   K   \   a   1   D   v   k  ht            
      1999888   !   A   ;  ff   2   "   G   i   m   9   e dle   $  si   T   )            
      1999904   9 etb  nl   w bel   N  rs   R   * nul eot   o   v   p   y can            
      1999920   1   4   $   c   W   l   M   D   &   3   U   J   B   )   t   {            
      1999936   A del   s   I   M dc1 esc   w dc1  sp   g  bs dle   `  sp   A            
      1999952 nak   D   %   l   1   r   1   W   % ack   !   h   0 syn   c   r            
      1999968 nak   W   ;   b   h   W   Z   z   w   B stx  bs   "   #   J   7            
      1999984   h   o   $  em   b   V   p bel   ] dc2   o  cr   )   S del   >            
      2000000  sp   1   1   1   9  nl   B   o   x  sp   f   r   a   c   A   A            
      2000016  sp   6   4   0  sp   6   7   9  sp   4   0  sp   7   9  sp   1            
      2000032   1   0   0  sp   1   1   1   9  nl   B   o   x  sp   f   r   a            
      2000048   c   A   A  sp   6   8   0  sp   7   1   9  sp   4   0  sp   7            
      2000064   9  sp   1   1   0   0  sp   1   1   1   9  nl   B   o   x  sp            
      2000080   f   r   a   c   A   A  sp   7   2   0  sp   7   5   9  sp   4            
      2000096   0  sp   7   9  sp   1   1   0   0  sp   1   1   1   9  nl   B            
      2000112   o   x  sp   f   r   a   c   A   A  sp   7   6   0  sp   7   9            
      2000128   9  sp   4   0  sp   7   9  sp   1   1   0   0  sp   1   1   1            
      2000144   9  nl   B   o   x  sp   f   r   a   c   A   A  sp   8   0   0            
      

      In examples 2-4, there is a sparse region between the expected and unexpected data, ending on a 1 MiB boundary. Here is another od snippet illustrating the expected, sparse, and unexpected regions for example 2:

                                                                               
      1008768   g  nl   .   /   t   e   s   t   d   i   r   /   c   h   m   o            
      1008784   d   s   t   g  nl   .   /   t   e   s   t   d   i   r   /   l            
      1008800   s   t   o   r   a   g   e  nl   .   /   t   e   s   t   f   i            
      1008816   l   e   3  nl   .   /   z   z   j   u   n   k  nl nul nul nul            
      1008832 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul            
      *                                                                                  
      1048576  sp   5   9   9  nl   B   o   x  sp   f   r   a   c   A   A  sp            
      1048592   2   0   0  sp   2   3   9  sp   2   0   0  sp   2   3   9  sp            
      1048608   5   8   0  sp   5   9   9  nl   B   o   x  sp   f   r   a   c            
      1048624   A   A  sp   2   4   0  sp   2   7   9  sp   2   0   0  sp   2            
      1048640   3   9  sp   5   8   0  sp   5   9   9  nl   B   o   x  sp   f            
      1048656   r   a   c   A   A  sp   2   8   0  sp   3   1   9  sp   2   0            
      1048672   0  sp   2   3   9  sp   5   8   0  sp   5   9   9  nl   B   o            
      1048688   x  sp   f   r   a   c   A   A  sp   3   2   0  sp   3   5   9            
      1048704  sp   2   0   0  sp   2   3   9  sp   5   8   0  sp   5   9   9            
      1048720  nl   B   o   x  sp   f   r   a   c   A   A  sp   3   6   0  sp            
      1048736   3   9   9  sp   2   0   0  sp   2   3   9  sp   5   8   0  sp            
      1048752   5   9   9  nl   B   o   x  sp   f   r   a   c   A   A  sp   4            
      

      In all 4 examples the corrupt data resides within the second OST object. In examples 2-4 the file should have only one object. This feels like some bug is causing the second OST object to be doubly linked, and our users have partially overwritten another user's data.

      Attachments

        Issue Links

          Activity

            People

              green Oleg Drokin
              nedbass Ned Bass (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              16 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: