Hi all,
I recently had a filesystem stop, and went through the usual umount,
mount, umount, xfs_repair path. xfs_repair didn't find any errors, but
I noticed that I was still getting some strange issues where a file in a
directory didn't have an inode and was resulting in IO errors. Thinking
to address the problem later, I moved the directory to a different
location on the filesystem so that future backups could proceed
normally.
Later, in an attempt to collect log errors, I re-ran xfs_repair on the
filesystem. It then found errors and corrected them, and on remount, I
found that the directory in question was repaired and no longer had a
file entry with no inode. (So I can't reproduce that output; I didn't
save it, thinking that the second xfs_repair wouldn't fix the issue, and
I'd generate it again before posting.)
Has anyone else seen a situation where xfs_repair misses a filesystem
problem, but then finds it if a file or directory is moved? And more
generally, is there a way to use xfs_db or similar to try to find other
inodes that might be causing similar problems?
In case it's helpful, the last xfs_repair stderr is below.
Unfortunately I didn't save the initial xfs_repair logs, but from what I
remember (which could be inaccurate, I admit) I did not see any errors.
FWIW, 8495309 was the inode of the directory that was reporting the file
with no inode before the successful xfs_repair.
--keith
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
correcting nblocks for inode 14653773, was 18446744073709486338 -
counted 1
data fork in ino 14653803 claims free block 1654114652
data fork in ino 14653833 claims free block 1654114653
- agno = 1
correcting nblocks for inode 2161878797, was 72057594037927936 - counted
0
- 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
- 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
- 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
Phase 5 - rebuild AG headers and trees...
- reset superblock...
Phase 6 - check inode connectivity...
- resetting contents of realtime bitmap and summary inodes
- traversing filesystem ...
bad hash table for directory inode 8495309 (hash value mismatch):
rebuilding
rebuilding directory inode 8495309
- traversal finished ...
- moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
resetting inode 9161151 nlinks from 10 to 9
resetting inode 9161407 nlinks from 8 to 9
Note - quota info will be regenerated on next quota mount.
done
--
kkeller@xxxxxxxxxxxxxxxxxxxxxxxxxx
|