Re: filesystem dead, xfs_repair won't help

Avi Kivity
2017-04-11T13:08:01Z

On 04/11/2017 03:49 PM, Emmanuel Florac wrote:
> Le Tue, 11 Apr 2017 15:03:12 +0300
> Avi Kivity <avi@scylladb.com> écrivait:
>
>> On 04/11/2017 03:00 PM, Emmanuel Florac wrote:
>>> Le Tue, 11 Apr 2017 14:40:15 +0300
>>> Avi Kivity <avi@scylladb.com> écrivait:
>>>
>>>> $ sudo xfs_db -c "sb 0" /tmp/fs
>>>> xfs_db: /tmp/fs is not a valid XFS filesystem (unexpected SB magic
>>>> number 0x5846534d)
>>>> Use -F to force a read attempt.
>>>> $ sudo xfs_db -F -c "sb 0" /tmp/fs
>>>> xfs_db: /tmp/fs is not a valid XFS filesystem (unexpected SB magic
>>>> number 0x5846534d)
>>>> xfs_db: V1 inodes unsupported. Please try an older xfsprogs.
>>> Oops, I forgot one important part, sorry, you must restore the
>>> meta_dump to a file first:
>>>
>>> xfs_mdrestore /tmp/fs /tmp/fsimage
>>>
>>> then run xfs_db on the /tmp/fsimage:
>>>
>>> xfs_db -c 'sb 0' -c 'p' /tmp/fsimage
>>>
>> magicnum = 0x58465342
>> blocksize = 4096
>> dblocks = 125026902
>> rblocks = 0
>> rextents = 0
>> uuid = 50b25ad8-3eb9-4273-b7f2-d0a435b3a08f
>> logstart = 67108869
>> rootino = 96
>> rbmino = 97
>> rsumino = 98
>> rextsize = 1
>> agblocks = 31256726
>> agcount = 4
>> rbmblocks = 0
>> logblocks = 61048
>> versionnum = 0xb4b5
>> sectsize = 512
>> inodesize = 512
>> inopblock = 8
>> fname = "\000\000\000\000\000\000\000\000\000\000\000\000"
>> blocklog = 12
>> sectlog = 9
>> inodelog = 9
>> inopblog = 3
>> agblklog = 25
>> rextslog = 0
>> inprogress = 0
>> imax_pct = 25
>> icount = 1959744
>> ifree = 89
>> fdblocks = 91586587
>> frextents = 0
>> uquotino = null
>> gquotino = null
>> qflags = 0
>> flags = 0
>> shared_vn = 0
>> inoalignmt = 4
>> unit = 0
>> width = 0
>> dirblklog = 0
>> logsectlog = 0
>> logsectsize = 0
>> logsunit = 1
>> features2 = 0x18a
>> bad_features2 = 0x18a
>> features_compat = 0
>> features_ro_compat = 0x1
>> features_incompat = 0x1
>> features_log_incompat = 0
>> crc = 0x3ebf41de (correct)
>> spino_align = 0
>> pquotino = null
>> lsn = 0x70002828b
>> meta_uuid = 00000000-0000-0000-0000-000000000000
>>
>>
> Tha looks reasonable enough... Heck, what's happening? You could try
> to run an integrity check from xfs_db (still using the dump) to locate
> the error:
>
> xfs_db -c 'sb 0' -c 'check' /tmp/fsimage
>
> What does it report?
>

$ sudo xfs_db -c 'sb 0' -c 'check' /tmp/fsimage
ERROR: The filesystem has valuable metadata changes in a log which needs to
be replayed. Mount the filesystem to replay the log, and unmount it before
re-running xfs_db. If you are unable to mount the filesystem, then use
the xfs_repair -L option to destroy the log and attempt a repair.
Note that destroying the log may cause corruption -- please attempt a mount
of the filesystem before doing this.

xfs_repair did not recognize the superblock, and started hunting for the
second one, emitting dots in the process. I stopped it, since it failed
on the live disk.