Linux: Recover Corrupted Partition From A Bad Superblock

Author: Vivek Gite Last updated: August 15, 2008 39 comments
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.

🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.

🐧 39 comments so far... add one

CategoryList of Unix and Linux commands
Disk space analyzersdf ncdu pydf
File Managementcat cp mkdir tree
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network UtilitiesNetHogs dig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
39 comments… add one
  • Gypsy Chief Apr 15, 2009 @ 0:18
    Well written article with lots of good information.
    Does any of this work on OpenBSD and the ffs
    file system?
    • JW0914 Apr 28, 2015 @ 16:18
      if using mount command on BSD OSs (FreeBSD, FreeNAS, etc), you will always receive the error in the OP as it’s not the proper syntax.
      To mount ext2 on BSD OSs, the correct command would be:
      mount -t ext2fs /dev/YourDevice /mnt/YourMountPoint
      Please refer to the ext2fs man page:
  • yakub pashas Jun 24, 2009 @ 14:08
    thank you very much for the valuable inforamation
  • tuxsun1 Aug 3, 2009 @ 22:49
    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!!
  • George Aug 21, 2009 @ 6:00
    Very good information.
  • Martin Sep 2, 2009 @ 21:26
    Awesome. Thanks.
    This is exactly what I needed instead of all the opinion with no solution.
  • Phillip Oct 7, 2009 @ 17:06
    Awesome. Worked Perfectly on RHEL5
  • Phillip Oct 7, 2009 @ 17:10
    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.
  • rick Oct 29, 2009 @ 18:42
    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.
  • ShadowCat8 Nov 2, 2009 @ 23:33
    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.
    • ashwn Sep 24, 2010 @ 11:33
      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.
      • midgard Jul 25, 2013 @ 17:57
        Also you can use mkfs command, for example for ext4 fs:
        mkfs.ext4 -n /dev/XX
  • uncle max Dec 28, 2009 @ 7:06
    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.
  • 🐧 nixCraft Dec 28, 2009 @ 11:33
    @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
  • Evan Jan 3, 2010 @ 2:39
    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
  • Jaciss Mar 1, 2010 @ 0:28
    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.
  • Ashwin Mar 20, 2010 @ 15:45
    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
  • mahendra Sep 1, 2010 @ 14:56
    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.
    0%
    10%
    20%
    30%
    40%
    50%
    60%
    70%
    80%
    90%
    100%