public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Eric Sandeen <sandeen@sandeen.net>
To: Felipe Monteiro de Carvalho <felipemonteiro.carvalho@gmail.com>,
	xfs@oss.sgi.com
Subject: Re: Location of backup superblocks
Date: Tue, 12 Aug 2014 09:42:14 -0700	[thread overview]
Message-ID: <53EA43E6.5010100@sandeen.net> (raw)
In-Reply-To: <CACyNnZNfTxxy0PsGKHgthoiGc74O_28uumGeG0CjLprxtiDv-Q@mail.gmail.com>

On 8/12/14, 3:49 AM, Felipe Monteiro de Carvalho wrote:
> Hello,
> 
> I am trying to recover a XFS partition (or series of partitions) where
> the main superblock was corrupted, and I see that there are multiple
> superblock copies. I'd like to guess the partition start and size
> also.

so I guess you mean that the partition table was corrupted as well?

> I see that the partition size can be calculated with sb_blocksize* sb_dblocks
> 
> But what about the partition start? I think I can guess it based in
> the position of the found superblocks.
> 
> Any ideas where is the code that writes to disk those backup
> superblocks? So far to me it looks like that their position is
> calculated as disk_size / 4 rounded (nearest rounding?) to a multiple
> of sb_blocksize, but having the exact code part would be better of
> course =) Or even better, a list of backup superblock positions...

How hard have you tried looking?  ;)

In xfsprogs, you can find this if you search for "backup":

" set allocation group superblock\n"
"\n"
" Example:\n"
"\n"
" 'sb 7' - set location to 7th allocation group superblock, set type to 'sb'\n"
"\n"
" Located in the first sector of each allocation group, the superblock\n"
" contains the base information for the filesystem.\n"
" The superblock in allocation group 0 is the primary.  The copies in the\n"
" remaining allocation groups only serve as backup for filesystem recovery.\n"
" The icount/ifree/fdblocks/frextents are only updated in superblock 0.\n"

The on-disk structure document describes the same thing:

http://xfs.org/docs/xfsdocs-xml-dev/XFS_Filesystem_Structure//tmp/en-US/html/Allocation_Groups.html#Superblocks

IOWs: there are superblocks in each allocation group.
They are located in the first sector of each AG, therefore the primary is
in sector 0 of the filesystem, and the secondaries are evenly spaced,
at the first sector of of AGs 1, 2, 3, 4, etc.

If you read the mkfs manpage, you'll see that ag size can be specified at
mkfs time, so there is no universal answer.  However, the default is to
split the filesystem into 4 AGs, unless the filesystem is > 1T, in which case
it will create 1T allocation groups.

If you want to look at the actual code that makes these geometry calculations,
you can find it by tracing through mkfs, paying attention to the variables which
get set by the agcount and/or agsize options.

-Eric

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2014-08-12 16:42 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-12 10:49 Location of backup superblocks Felipe Monteiro de Carvalho
2014-08-12 16:42 ` Eric Sandeen [this message]
2014-08-12 16:52   ` Eric Sandeen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53EA43E6.5010100@sandeen.net \
    --to=sandeen@sandeen.net \
    --cc=felipemonteiro.carvalho@gmail.com \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox