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.
|