Linux: Recover Corrupted Partition From A Bad Superblock

by on August 15, 2008 · 32 comments· LAST UPDATED August 15, 2008

in , ,

Q. How can I Recover a bad superblock from a corrupted ext3 partition to get back my data? I'm getting following error:

/dev/sda2: Input/output error
mount: /dev/sda2: can't read superblock

How do I fix this error?

A. Linux ext2/3 filesystem stores superblock at different backup location so it is possible to get back data from corrupted partition.

WARNING! Make sure file system is UNMOUNTED.

If your system will give you a terminal type the following command, else boot Linux system from rescue disk (boot from 1st CD/DVD. At boot: prompt type command linux rescue).

Mount partition using alternate superblock

Find out superblock location for /dev/sda2:
# dumpe2fs /dev/sda2 | grep superblock
Sample output:

  Primary superblock at 0, Group descriptors at 1-6
  Backup superblock at 32768, Group descriptors at 32769-32774
  Backup superblock at 98304, Group descriptors at 98305-98310
  Backup superblock at 163840, Group descriptors at 163841-163846
  Backup superblock at 229376, Group descriptors at 229377-229382
  Backup superblock at 294912, Group descriptors at 294913-294918
  Backup superblock at 819200, Group descriptors at 819201-819206
  Backup superblock at 884736, Group descriptors at 884737-884742
  Backup superblock at 1605632, Group descriptors at 1605633-1605638
  Backup superblock at 2654208, Group descriptors at 2654209-2654214
  Backup superblock at 4096000, Group descriptors at 4096001-4096006
  Backup superblock at 7962624, Group descriptors at 7962625-7962630
  Backup superblock at 11239424, Group descriptors at 11239425-11239430
  Backup superblock at 20480000, Group descriptors at 20480001-20480006
  Backup superblock at 23887872, Group descriptors at 23887873-23887878

Now check and repair a Linux file system using alternate superblock # 32768:
# fsck -b 32768 /dev/sda2
Sample output:

fsck 1.40.2 (12-Jul-2007)
e2fsck 1.40.2 (12-Jul-2007)
/dev/sda2 was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #241 (32254, counted=32253).
Fix? yes
Free blocks count wrong for group #362 (32254, counted=32248).
Fix? yes
Free blocks count wrong for group #368 (32254, counted=27774).
Fix? yes
..........
/dev/sda2: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda2: 59586/30539776 files (0.6% non-contiguous), 3604682/61059048 blocks

Now try to mount file system using mount command:
# mount /dev/sda2 /mnt
You can also use superblock stored at 32768 to mount partition, enter:
# mount sb={alternative-superblock} /dev/device /mnt
# mount sb=32768 /dev/sda2 /mnt

Try to browse and access file system:
# cd /mnt
# mkdir test
# ls -l
# cp file /path/to/safe/location

You should always keep backup of all important data including configuration files.

TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 32 comments… read them below or add one }

1 Gypsy Chief April 15, 2009 at 12:18 am

Well written article with lots of good information.
Does any of this work on OpenBSD and the ffs
file system?

Reply

2 yakub pashas June 24, 2009 at 2:08 pm

thank you very much for the valuable inforamation

Reply

3 tuxsun1 August 3, 2009 at 10:49 pm

Lately I’ve noticed that when I Google on Linux questions, this site consistently returns the best or one of the best responses to what I was trying to solve. Because of that, I have signed up for your daily newsletter. Thanks for the great site!!

Reply

4 George August 21, 2009 at 6:00 am

Very good information.

Reply

5 Martin September 2, 2009 at 9:26 pm

Awesome. Thanks.
This is exactly what I needed instead of all the opinion with no solution.

Reply

6 Phillip October 7, 2009 at 5:06 pm

Awesome. Worked Perfectly on RHEL5

Reply

7 Phillip October 7, 2009 at 5:10 pm

Worked perfectly under RHEL5. Notes on my issue are below

I was getting following error when mounting.
Wrong fs type, bad option, bad superblock on /dev/sdd1
missing codepage or other error
In some cases usefull info is foinf in syslog – try
dmesg | tail or so

dmeg | tail displayed
EXT3-fs: filesystem has both journal and inode journals!

I tried useing the tune2fs -f -O ^has_journal /dev/sdd1 to remove the journal and try recreating but it did not work. tune2fs just hung there sucking 100% CPU when trying to remove the journal

The command given here worked great.

Reply

8 rick October 29, 2009 at 6:42 pm

Does not seem to work, when I run dumpefs all it says:

“Bad magic number in super-block while trying to open…”

I already know the superblock is bad.

Reply

9 ShadowCat8 November 2, 2009 at 11:33 pm

Another way to cut to the quick of finding out where your superblocks should be after losing your primary is to use the following command:
# mke2fs -n /dev/[device and partition number]
This is making the utility you used to create the filesystem tell you where the backups are. You get a response similar to this:
# mke2fs -n /dev/sdb1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
62248 inodes, 248976 blocks
12448 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
31 block groups
8192 blocks per group, 8192 fragments per group
2008 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185

Now, remember when using this command, you need to use the same flags you used when you created the filesystem originally, and just add ‘-n’ to them. If you made an ext3 filesystem, you would use:
# mke2fs -j -n /dev/[device and partition number]

HTH.

Reply

10 ashwn September 24, 2010 at 11:33 am

Yes. Indeed this is a great shortcut – mke2fs -n /dev/XX .

Thank you for suggesting this.

This is a wonderful website with easy to understand and clear text linux resource. Simply, one of the best Linux learning sites on the net.

Reply

11 midgard July 25, 2013 at 5:57 pm

Also you can use mkfs command, for example for ext4 fs:

mkfs.ext4 -n /dev/XX

Reply

12 uncle max December 28, 2009 at 7:06 am

Hi, this looks like a potential lifesaver. Great Stuff. Question: do superblocks ever move?? Obviously i don’t know ext3 filesystem internals — too much to learn, so little time… My point is: would there be any value in storing the list of superblock locations offline?

Thanks,
Marty.

Reply

13 nixCraft December 28, 2009 at 11:33 am

@uncle max

You can.. but I strongly recommend backup instead of just superblocks. Linux comes with rsnapshot backup tool that can make hourly, daily and weekly backup of all your servers. If you are old school UNIX person, tar, dump and restore are regular tools for backup.

HTH

Reply

14 Evan January 3, 2010 at 2:39 am

thank you so much, this is valuable information, and it saved me a LOT of work!!!!!

thanks for the write up, awesome, worked like a charm on ubuntu 9.10 off live cd rescuing a / partition on my HDD

Reply

15 Jaciss March 1, 2010 at 12:28 am

Thank you! Successfully recovered my data, and with much less stress than I might have had due to the clear explanations. Thanks also to ShadowCat8 – I was getting magic error numbers with the other method of finding the superblock locations.

Reply

16 Ashwin March 20, 2010 at 3:45 pm

hi.. Even after i run d command i m gettin a ‘couldnt find ext2 superblock. Tryin backup blocks’ n then a bad magic number in superblock again! I ve lot of data n desperately need to retrieve them..

Thanks,
Ashwin

Reply

17 mahendra September 1, 2010 at 2:56 pm

Good and simple.
I believe we will be able to mount the fs using a diff super block “only” if we r running system in rescue mode with cd media mounted,
I could not mount the fs when the system was live.. instead i was seeing help of mount command

mount sb=”204801″ /dev/hda1 /vol1
Usage: mount -V : print version
mount -h : print this help
mount : list mounted filesystems
mount -l : idem, including volume labels
So far the informational part. Next the mounting.
The command is `mount [-t fstype] something somewhere’.
Details found in /etc/fstab may be omitted.
mount -a [-t|-O] … : mount all stuff from /etc/fstab
mount device : mount device at the known place
mount directory : mount known device here
mount -t type dev dir : ordinary mount command
Note that one does not really mount a device, one mounts
a filesystem (of the given type) found on the device.
One can also mount an already visible directory tree elsewhere:
mount –bind olddir newdir
or move a subtree:
mount –move olddir newdir
A device can be given by name, say /dev/hda1 or /dev/cdrom,
or by label, using -L label or by uuid, using -U uuid .
Other options: [-nfFrsvw] [-o options] [-p passwdfd].
For many more details, say man 8 mount .

any clues on this?

Reply

18 Don October 11, 2010 at 11:11 pm

Awesome.

Here is what I did that worked for me.

$ dumpe2fs /dev/sda6
- got just the “Bad magic number in super-block while trying to open…” message
used
$ mke2fs -n /dev/sda6
got the 2nd super block same as in the example.
Used:
$ fsck -b 32768 /dev/sda6
to fix.

Should have used “-a” option to automatically accept fixes because it had a gazillion complaints and I had to lean on the “y” key for 20 minutes. My disk may not be optimally fixed, but I can see the data I was missing before which is a big step forward.

Thanks,!

I

Reply

19 Gilbert April 12, 2011 at 1:06 am

Hi there!
Sorry, I can’t find, here in this place, the example where was the explanation in how to recover a NTFS partition with linux utils; I remember I red, that the program asks if the partition was created under Vista.
A friend of mine, needs back his HD, at least, recover his important data, I told him that it could be possible to restore the whole drive too.
Thx!

Reply

20 Bryn August 26, 2011 at 3:40 pm

Hi, I still have a problem. Have tried all things suggested in comments, still no luck, just get these errors

freenas:/mnt# mke2fs /dev/ad1
mke2fs 1.41.14 (22-Dec-2010)
/dev/ad1: Operation not permitted while setting up superblock

or

dumpe2fs /dev/ad1
dumpe2fs 1.41.14 (22-Dec-2010)
dumpe2fs: Bad magic number in super-block while trying to open /dev/ad1
Couldn’t find valid filesystem superblock.

or

fsck -t ufs /dev/ad1
** /dev/ad1 (NO WRITE)
Cannot find file system superblock
ioctl (GCINFO): Inappropriate ioctl for device
fsck_ufs: /dev/ad1: can’t read disk label

Reply

21 Richard September 20, 2011 at 1:57 pm

@Bryn

You need to use the -n switch with fsck

Reply

22 cabello September 28, 2011 at 5:33 pm

nice really help me!! regards!

Reply

23 ChrisH November 17, 2011 at 1:03 pm

Great help thanks guys.. Only one issue.
After getting super block issue fixed guess some fragmenting was conducted) I now continue to get the following message:

Inconsistency detected by ld.so: dynamic-link.h: 187: elf_get_dynamic_info: Assertion `info[20]->d_un.d_val == 7′ failed!

So far it’s whenever trying to run firefox, thunderbird, deluge or Virtual box.
Tried removing and re-installing, still no luck. Any suggestions greatly appreciated.

Reply

24 wcdolphin January 12, 2012 at 7:12 am

Helped me when restoring from a bad superblock, kudos and hopefully a quick upvote on Google’s search rankings!

Reply

25 Caroline February 7, 2012 at 5:29 am

No rsaoen why you can’t run linux if your clients run windows… ;)Just saying there are a lot of good rsaoens to try it out ;)I can respect windows…MS makes life easy in some ways, but I know that after using Linux for 5 years I pull my hair out every time i have to diagnose a problem in windows, or get it to do some specific thing, etc.I don’t want everyone running linux, just enough to make MS improve the bits they are terrible at ;)

Reply

26 Randy Kramer March 6, 2012 at 2:43 pm

When you answer “yes” to the following question, might files be lost / deleted? (What if you answer “no” to the question?)

Free blocks count wrong for group #368 (32254, counted=27774).
Fix? yes

Reply

27 paul (un)lucky13 May 28, 2012 at 9:35 pm

You can also use superblock stored at 32768 to mount partition, enter:
# mount sb={alternative-superblock} /dev/device /mnt
# mount sb=32768 /dev/sda2 /mnt

should it not be?

You can also use superblock stored at 32768 to mount partition, enter:
# mount -o sb={alternative-superblock} /dev/device /mnt
# mount -o sb=32768 /dev/sda2 /mnt

tip: it using it on loop? pass -o loop,sb=32768
else excellent and had to also RTFM man mkfs.ext3 and also cat /etc/mke2fs.conf

Reply

28 userxo July 26, 2012 at 9:29 am

You saved me!!!! Thanks for the post!

Reply

29 Dean October 23, 2012 at 10:37 pm

Nice! saved me so i can a least backup and rebuild raid. thats if drive is not gone bad.
cheers.

Reply

30 roberto December 20, 2013 at 9:48 am

I just stumbled on this page and I would like to thank because I think it is really what I need :)

I have a superblock read failure at boot time, I’m asked to type the root password and I managed to browse the root / partition, that was the only one that the system was able to mount. At this point I used fsck as explained above on the / partition and fixed hundreds of errors, but after the reboot the broken superblock situation is still present. Trying to reiterate restoring the superblock with fsck didn’t help.
Do I have to fix the superblock of the other partition on my disk? Those partition are /home and /usr/local, which contains the important data and I would like to be sure that they are not accessible before modifying their superblock. Now I am not in front of my broken PC and unfortunately yesterday I didn’t try to mount the other partitions.
So, how can I know which is the partition with a broken superblock? Is it safe trying to run fsck on an eventually clean pertition?
In addition, I don’t understand how is it possible that I managed to browse the / partition if its superblock was broken.

thanks in advance for any answer

Reply

31 elguil June 11, 2014 at 1:42 am

It worked! Many thanks!

Reply

32 JugeHuge August 18, 2014 at 3:41 pm

Is there any possibility to copy superblock to other identical drive??
I had RAID1 setup which both drivers mechanically failed. I can mount another but another is missing superblock.
Drives are identical so could there be someway to copy superblock from /dev/sda6 to /dev/sdb6 or should i try to mdadm –create command keep fingers crossed that it doesn’t destroy data.

Reply

Leave a Comment

Tagged as: , , , , , , , , , , , , , , , ,

Previous Faq:

Next Faq: