xfs
[Top] [All Lists]

Re: bad fs - xfs_repair 3.01 crashes on it

To: xfs@xxxxxxxxxxx
Subject: Re: bad fs - xfs_repair 3.01 crashes on it
From: Michael Monnerie <michael.monnerie@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 31 Aug 2009 08:40:35 +0200
Organization: it-management http://it-management.at
On Sonntag 12 Juli 2009 Eric Sandeen wrote:
> If you do want to try deleting that one file or other such tricks,
> you can do it on a sparse metadata image of the fs as a dry run:
>
> # xfs_metadump -o /dev/whatever metadump.img
> # xfs_mdrestore metadump.img filesystem.img
> # mount -o loop filesystem.img mnt/
> # <fiddle as you please>
> # umount mnt/
> # xfs_repair filesystem.img
> # mount -o loop filesystem.img mnt/
>
> and see what happens...

To warm up the old thread, I did this now:

* make metadump
* mount it
* remove unneeded files/dirs
This already produced lots of errors, where files/dirs couldn't be 
deleted. I made a metadump of this again, it's on 
http://zmi.at/xfs.metadump-brokenonly.bz2

Then I tried with v3.0.1:
# xfs_repair xfs.img 
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                                           
        - agno = 2                                           
        - agno = 3                                           
        - agno = 4                                           
        - agno = 5                                           
        - agno = 6                                           
        - agno = 7                                           
        - agno = 8                                           
        - agno = 9                                           
        - agno = 10                                          
        - agno = 11                                          
        - agno = 12                                          
        - agno = 13                                          
        - agno = 14                                          
local inode 3857051697 attr too small (size = 3, min size = 4)
bad attribute fork in inode 3857051697, clearing attr fork    
clearing inode 3857051697 attributes                          
cleared inode 3857051697                                      
        - agno = 15                                           
        - agno = 16                                           
        - agno = 17                                           
        - agno = 18                                           
        - agno = 19                                           
        - agno = 20                                           
        - agno = 21                                           
        - agno = 22                                           
        - agno = 23                                           
        - agno = 24                                           
        - agno = 25                                           
        - agno = 26                                           
        - agno = 27                                           
        - agno = 28                                           
        - agno = 29                                           
        - agno = 30                                           
        - agno = 31                                           
        - agno = 32                                           
        - agno = 33                                           
        - agno = 34                                           
        - agno = 35                                           
        - agno = 36                                           
        - agno = 37                                           
        - agno = 38                                           
        - agno = 39                                           
        - process newly discovered inodes...                  
Phase 4 - check for duplicate blocks...                       
        - setting up duplicate extent list...                 
        - check for inodes claiming duplicate blocks...       
        - agno = 0                                            
        - agno = 1                                            
        - agno = 2                                            
        - agno = 3                                            
        - agno = 4                                            
        - agno = 5                                            
        - agno = 6                                            
        - agno = 7                                            
        - agno = 8                                            
        - agno = 9                                            
        - agno = 10                                           
        - agno = 11                                           
        - agno = 12                                           
        - agno = 13                                           
        - agno = 14                                           
        - agno = 15                                           
        - agno = 16                                           
        - agno = 17                                           
        - agno = 18                                           
data fork in regular inode 3857051697 claims used block 537546384
        - agno = 19                                              
xfs_repair: dinode.c:2108: process_inode_data_fork: Zusicherung »err == 
0« nicht erfüllt.
Abgebrochen                                                                     
         

So I patched out the ASSERT in #dinode.c:2108 and this made:

# xfs_repair xfs.img                                             
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                                                              
         
        - agno = 2                                                              
         
        - agno = 3                                                              
         
        - agno = 4                                                              
         
        - agno = 5                                                              
         
        - agno = 6                                                              
         
        - agno = 7                                                              
         
        - agno = 8                                                              
         
        - agno = 9                                                              
         
        - agno = 10                                                             
         
        - agno = 11                                                             
         
        - agno = 12                                                             
         
        - agno = 13                                                             
         
        - agno = 14                                                             
         
local inode 3857051697 attr too small (size = 3, min size = 4)                  
         
bad attribute fork in inode 3857051697, clearing attr fork                      
         
clearing inode 3857051697 attributes                                            
         
cleared inode 3857051697                                                        
         
        - agno = 15                                                             
         
        - agno = 16                                                             
         
        - agno = 17                                                             
         
        - agno = 18                                                             
         
        - agno = 19                                                             
         
        - agno = 20                                                             
         
        - agno = 21                                                             
         
        - agno = 22                                                             
         
        - agno = 23                                                             
         
        - agno = 24                                                             
         
        - agno = 25                                                             
         
        - agno = 26                                                             
         
        - agno = 27                                                             
         
        - agno = 28                                                             
         
        - agno = 29                                                             
         
        - agno = 30                                                             
         
        - agno = 31                                                             
         
        - agno = 32                                                             
         
        - agno = 33                                                             
         
        - agno = 34                                                             
         
        - agno = 35                                                             
         
        - agno = 36                                                             
         
        - agno = 37                                                             
         
        - agno = 38                                                             
         
        - agno = 39                                                             
         
        - process newly discovered inodes...                                    
         
Phase 4 - check for duplicate blocks...                                         
         
        - setting up duplicate extent list...                                   
         
        - check for inodes claiming duplicate blocks...                         
         
        - agno = 0                                                              
         
        - agno = 1                                                              
         
        - agno = 2                                                              
         
        - agno = 3                                                              
         
        - agno = 4                                                              
         
        - agno = 5                                                              
         
        - agno = 6                                                              
         
        - agno = 7                                                              
         
        - agno = 8                                                              
         
        - agno = 9                                                              
         
        - agno = 10                                                             
         
        - agno = 11                                                             
         
        - agno = 12                                                             
         
        - agno = 13                                                             
         
        - agno = 14
        - agno = 15
        - agno = 16
        - agno = 17
        - agno = 18
        - agno = 19
        - agno = 20
data fork in regular inode 3857051697 claims used block 537546384
bad attribute format 1 in inode 3857051697, resetting value
correcting nblocks for inode 3857051697, was 10135251 - counted 8388604
        - agno = 21
        - agno = 22
        - agno = 23
        - agno = 24
data fork in regular inode 6174936063 claims used block 537240415
correcting nblocks for inode 6174936063, was 1 - counted 0
data fork in regular inode 6180186880 claims used block 537242879
correcting nblocks for inode 6180186880, was 1 - counted 0
        - agno = 25
        - agno = 26
        - agno = 27
data fork in regular inode 7257143306 claims used block 537251790
correcting nblocks for inode 7257143306, was 1 - counted 0
data fork in regular inode 7257143307 claims used block 537257951
correcting nblocks for inode 7257143307, was 1 - counted 0
data fork in regular inode 6720520457 claims used block 537246687
correcting nblocks for inode 6720520457, was 1 - counted 0
data fork in regular inode 6720520458 claims used block 537247327
correcting nblocks for inode 6720520458, was 1 - counted 0
        - agno = 28
        - agno = 29
        - agno = 30
        - agno = 31
data fork in regular inode 8326467385 claims used block 537198367
correcting nblocks for inode 8326467385, was 1 - counted 0
        - agno = 32
inode block 537201328 multiply claimed, state was 3
inode block 537201329 multiply claimed, state was 3
inode block 537201330 multiply claimed, state was 3
data fork in regular inode 8595221283 claims used block 537201683
correcting nblocks for inode 8595221283, was 1 - counted 0
data fork in regular inode 8595221284 claims used block 537201684
        - agno = 33
correcting nblocks for inode 8595221284, was 5 - counted 0
data fork in regular inode 8595221285 claims used block 537201689
correcting nblocks for inode 8595221285, was 1 - counted 0
data fork in regular inode 8595221286 claims used block 537201690
correcting nblocks for inode 8595221286, was 6 - counted 0
data fork in regular inode 8326763299 claims used block 537270223
correcting nblocks for inode 8326763299, was 1 - counted 0
data fork in regular inode 8326763300 claims used block 537271439
correcting nblocks for inode 8326763300, was 1 - counted 0
data fork in regular inode 8595221287 claims used block 537201696
correcting nblocks for inode 8595221287, was 1 - counted 0
data fork in regular inode 8595221288 claims used block 537201699
attr fork in regular inode 8595221288 claims used block 537201698
xfs_repair: dinode.c:2241: process_inode_attr_fork: Zusicherung »err == 
0« nicht erfüllt.
data fork in regular inode 8058708772 claims used block 537258543
correcting nblocks for inode 8058708772, was 1 - counted 0
data fork in regular inode 8058708773 claims used block 537260719
correcting nblocks for inode 8058708773, was 1 - counted 0
Abgebrochen

So again patch dinode.c:2241 ASSERT away:
# xfs_repair xfs.img
(about 550KB output, see http://zmi.at/xfs_repair.txt )
corrupt dinode 8326467385, extent total = 1, nblocks = 0.  This is a 
bug.
Please capture the filesystem metadata with xfs_metadump and
report it to xfs@xxxxxxxxxxxx
cache_node_purge: refcount was 1, not zero (node=0x7f90c4de34e0)

fatal error -- couldn't map inode 8326467385, err = 117

Now, should I PANIC? Doesn't all seem to be nice...
I mounted this image, made "rm -r *" so all files/dirs which were good 
were deleted. There are still a lot in there which can't be deleted. Can 
someone help me fix it please?
I made another metadump image, it's on 
http://zmi.at/xfs.metadump-brokenonly2.bz2

mfg zmi
-- 
// Michael Monnerie, Ing.BSc    -----      http://it-management.at
// Tel: 0660 / 415 65 31                      .network.your.ideas.
// PGP Key:         "curl -s http://zmi.at/zmi.asc | gpg --import"
// Fingerprint: AC19 F9D5 36ED CD8A EF38  500E CE14 91F7 1C12 09B4
// Keyserver: wwwkeys.eu.pgp.net                  Key-ID: 1C1209B4


Attachment: signature.asc
Description: This is a digitally signed message part.

<Prev in Thread] Current Thread [Next in Thread>