xfs
[Top] [All Lists]

[Bug 229] New: xfs_repair unable to repair system

To: xfs-master@xxxxxxxxxxx
Subject: [Bug 229] New: xfs_repair unable to repair system
From: bugzilla-daemon@xxxxxxxxxxx
Date: Mon, 10 Mar 2003 16:58:42 -0800
Sender: linux-xfs-bounce@xxxxxxxxxxx
http://oss.sgi.com/bugzilla/show_bug.cgi?id=229

           Summary: xfs_repair unable to repair system
           Product: Linux XFS
           Version: Current
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: critical
          Priority: High
         Component: xfsprogs
        AssignedTo: xfs-master@xxxxxxxxxxx
        ReportedBy: alde@xxxxxxxx


If this is a userspace bug, what version of the package are you using:




What kernel are you using: 


2.4.20-xfs




Where did the XFS code come from?  (CVS, Linus, your distribution, etc):


CVS




Description of Problem:




Using wget to mirror a website, certain invalid files were created.  


Some of these files are created with absurdly large filesizes.  For example:


# find . -size +500k -ls


64459932    8 -rw-r--r--   1 alde     alde     35184372094294 Aug 23  2002 .
/www/adrianne/tn_ad12829.jpg




This is just one of many.  However this doesn't seem to the the big problem.  
The big problem is that xfs allows some files to be created with a / as the 
first character.




# find . -size +500k -ls


find: ./portrait//imi: No such file or directory




# cd portrait


# ls




/imi 


# ls -l


ls: /imi: No such file or directory




And as you know, any file name starting with a / is considered a full pathname 
for the file.  So, any type of rm -f ?imi or rm -f *imi or rm -f ???? still 
results in the / getting expanded and the shell looking for the file /imi.  If 
I 
touch /imi, and try to remove /foo/portrait/\/imi, it will delete the root 
directory /imi.




When running xfs_repair to fix this problem, I beleive it crashes due to both 
problems listed above.




# xfs_repair /dev/hda4


Phase 1 - find and verify superblock...


Phase 2 - using internal log


        - zero log...


        - scan filesystem freespace and inode maps...


        - found root inode chunk


Phase 3 - for each AG...


        - scan and clear agi unlinked lists...


        - process known inodes and perform inode discovery...


        - agno = 0


        - agno = 1


entry "/." at block 0 offset 32 in directory inode 4327089 references invalid 
inode 18374686479671623679


        clearing inode number in entry at offset 32...


entry at block 0 offset 32 in directory inode 4327089 has illegal name "/.": no 
.. entry for directory 4327089


        - agno = 2


        - agno = 3


        - agno = 4


entry "/." at block 0 offset 32 in directory inode 16970686 references invalid 
inode 18374686479671623679


        clearing inode number in entry at offset 32...


entry at block 0 offset 32 in directory inode 16970686 has illegal name "/.": 
no 
.. entry for directory 16970686


entry "/rs096am08" at block 2 offset 1824 in directory inode 17028818 
references 
invalid inode 18374686479671623679


        clearing inode number in entry at offset 1824...


entry at block 2 offset 1824 in directory inode 17028818 has illegal name 
"/rs096am08":


 invalid inode 18374686479671623679


        clearing inode number in entry at offset 1824...


entry at block 2 offset 1824 in directory inode 17028818 has illegal name 
"/rs096am08":         - agno = 5


        - agno = 6


entry "/." at block 0 offset 968 in directory inode 25279432 references invalid 
inode 18374686479671623679


        clearing inode number in entry at offset 968...


entry at block 0 offset 968 in directory inode 25279432 has illegal name "/.": 
no .. entry for directory 25279432


entry "/." at block 0 offset 32 in directory inode 25847335 references invalid 
inode 18374686479671623679


        clearing inode number in entry at offset 32...


entry at block 0 offset 32 in directory inode 25847335 has illegal name "/.": 
no 
.. entry for directory 25847335


        - agno = 7


        - agno = 8


entry "/." at block 0 offset 584 in directory inode 33798096 references invalid 
inode 18374686479671623679


        clearing inode number in entry at offset 584...


entry at block 0 offset 584 in directory inode 33798096 has illegal name "/.": 
no .. entry for directory 33798096


        - agno = 9


        - agno = 10


        - agno = 11


        - agno = 12


        - agno = 13


        - agno = 14


        - agno = 15


        - agno = 16


entry "/imi" at block 0 offset 288 in directory inode 68882319 references 
invalid inode 18374686479671623679


        clearing inode number in entry at offset 288...


entry at block 0 offset 288 in directory inode 68882319 has illegal name "/imi":


         - agno = 17


        - agno = 18


        - agno = 19


entry "/." at block 0 offset 584 in directory inode 80188330 references invalid 
inode 18374686479671623679


        clearing inode number in entry at offset 584...


entry at block 0 offset 584 in directory inode 80188330 has illegal name "/.": 
no .. entry for directory 80188330


        - agno = 20


entry "/." at block 0 offset 32 in directory inode 86492409 references invalid 
inode 18374686479671623679


        clearing inode number in entry at offset 32...


entry at block 0 offset 32 in directory inode 86492409 has illegal name "/.": 
no 
.. entry for directory 86492409


        - agno = 21


        - agno = 22


        - process newly discovered inodes...


Phase 4 - check for duplicate blocks...


        - setting up duplicate extent list...


        - clear lost+found (if it exists) ...


        - clearing existing "lost+found" inode


        - deleting existing "lost+found" entry


        - check for inodes claiming duplicate blocks...


        - agno = 0


        - agno = 1


no .. entry for directory 4327089


        - agno = 2


        - agno = 3


        - agno = 4


no .. entry for directory 16970686


        - agno = 5


        - agno = 6


no .. entry for directory 25279432


no .. entry for directory 25847335


        - agno = 7


        - agno = 8


no .. entry for directory 33798096


        - agno = 9


        - agno = 10


        - agno = 11


        - agno = 12


        - agno = 13


        - agno = 14


        - agno = 15


        - agno = 16


        - agno = 17


        - agno = 18


        - agno = 19


no .. entry for directory 80188330


        - agno = 20


no .. entry for directory 86492409


        - agno = 21


        - agno = 22


Phase 5 - rebuild AG headers and trees...


        - reset superblock...


Phase 6 - check inode connectivity...


        - resetting contents of realtime bitmap and summary inodes


        - ensuring existence of lost+found directory


        - traversing filesystem starting at / ...




fatal error -- malloc failed in longform_dir2_entry_check (1073741844 bytes)


#








How Reproducible:


Anytime a file gets a corrupted filesize & a file with a / as its first 


character is created.




A website with alot of php calls with /'s in the file name.




Steps to Reproduce:


1. wget -r http://www.aol.com


2. wget -r http://www.php.net


3.



------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.


<Prev in Thread] Current Thread [Next in Thread>
  • [Bug 229] New: xfs_repair unable to repair system, bugzilla-daemon <=