How to Repair a Corrupted USB Drive in Linux

Everyone has a flash drive. They’re great little things, and they make safeguarding data easy. However, sometimes flash drives can get corrupted or just flat out quit working. If you’re a Linux user and this has happened to you, there’s an easy fix to all of this. In this article we’ll go over a few really simple tricks on how you can get your flash drive back in working order.

Note: the tricks outlined in this article aren’t necessarily exclusive to USB drives and can be used on hard drives too.

Removing bad blocks from the USB drive with fsck

An easy way to repair a flash drive, or any drive really, is to use the fsck tool. This tool is great for removing bad file blocks, as most (if not all) corruption and unreadability comes from problems like this. To remove the corrupted file blocks from the USB flash drive, open a terminal window and enter the following commands.

Users must figure out what the drive designation is on the system before things can move forward. Do this by entering the lsblk command. This will list all of the attached disks on your system.

Note: the lsblk command lists all disks, not just USB drives. Pay close attention to the output, as it is easy to mistake a hard drive for a flash drive.

linux-flash-drive-list-usb-drive

To remove the bad file block, run the fsck command on either a specific partition (e.g. /dev/sdc1), or the entire disk (e.g. /dev/sdc). Once completed, the USB drive will have a healthy partition again and be fully operational on Linux.

Note: this tutorial assumes that the flash drive is /dev/sdc (or /dev/sdc1). Users may have different labels for their flash drive on their system.

linux-flash-drive-fsck-options

Zeroing the USB drive

Sometimes a USB drive can be totally unreadable to the point where it is no longer worth saving. When this happens the best route is often to just zero out the data and start over. The best tool for the job in this situation is dd, and it works quite well.

Start by taking the drive label that was found earlier with the lsblk command, and apply the same logic (remember that /dev/sdc1 is a partition, and /dev/sdc is an entire device).

Making a new file system

linux-flash-drive-new-file-system

Zeroing a USB drive (or any device for that matter) renders the data on it totally useless. This means that you’ll need to create a new data partition. Choose a file system, and then run the command!

Fat32

Ext4

NTFS

Conclusion

USB flash drives are useful devices. They make it easy for people to easily transfer data from one computer to the other, regardless of the operating system it’s running. That’s why it’s so important to know what to do when the drive is no longer accessible. Luckily, Linux ships with some really useful tools that make saving a flash drive quite easy.

Image credit: CES Thumb-Drive Style Press Kits

9 comments

  1. Is there a way to un-erase a USB drive. I put an USB drive in an encrupted sytem and it initialized the usb drive. how do i undo that and recover the files that were existing before the initiralization

  2. I have a 16GB USB drive that someone tried to convert into a Debian Live booting USB. This drive will NOT erase!…and will NOT reformat! I have followed every tutorial online I could find…from using “dd” and trying to zero it out to using fsck and the mkfs commands. NOTHING works! The iso is still on this drive (as a file!) and it will NOT format! I’ve tried using GNome’s Disk Utility but the “Format” option is not even available. Its all just greyed out. Mind you I’m not living in a state of poverty, and buying another 16….32…8GB USB is not an impossibility, but its just frustrating to not get things accomplished using Linux, which I go around telling everyone is the greatest thing since sliced bread! Seems that eveytime I try to run something on this USB it claims the entire drive is a “read-only” file. (WTH!?….how is that even possible from someone using UnetBootin to try and create a bootable Debian Live USB stick!? And why wouldn’t these commands….which were run under ROOT privileges WORK!?) Just frustrating….but its ok…I should have about 2 more USBs by the time this day is over!

    1. Some usb drives come with a physical lock switch that prevent the data from being overwritten or erased. Did you check if there is a lock switch on your drive?

      1. Same issue here. It does not have any physical locks either!

        1. some flash memories have a write protection embbeded that enables itself when the firmware determines the device has a serious damage or faulty sectors.

          Those go read-only, and the only way to recover them is…Buying a new one. The manufacturer won’t provide new firmware or any other solution.

  3. Hi! Thanks for your post. I’m wondering if you can help me with an USB stick which just won’t get mounted. I’ve tried different ports, different PCs and I doesn’t work anymore.
    This is what I get when running dmesg:

    [ 1231.145133] usb 3-1: new full-speed USB device number 2 using xhci_hcd
    [ 1231.257177] usb 3-1: device descriptor read/64, error -71
    [ 1231.473071] usb 3-1: device descriptor read/64, error -71
    [ 1231.689087] usb 3-1: new full-speed USB device number 3 using xhci_hcd
    [ 1231.801043] usb 3-1: device descriptor read/64, error -71
    [ 1232.017047] usb 3-1: device descriptor read/64, error -71
    [ 1232.233038] usb 3-1: new full-speed USB device number 4 using xhci_hcd
    [ 1232.233348] usb 3-1: Device not responding to setup address.
    [ 1232.437283] usb 3-1: Device not responding to setup address.
    [ 1232.640994] usb 3-1: device not accepting address 4, error -71
    [ 1232.752982] usb 3-1: new full-speed USB device number 5 using xhci_hcd
    [ 1232.753272] usb 3-1: Device not responding to setup address.
    [ 1232.957260] usb 3-1: Device not responding to setup address.
    [ 1233.160908] usb 3-1: device not accepting address 5, error -71
    [ 1233.160961] usb usb3-port1: unable to enumerate USB device

  4. sudo mkfs.msdos -f 32 /dev/sdc1
    mkfs.fat 4.0 (2016-05-06)
    Bad number of FATs : 32
    Usage: mkfs.fat [-a][-A][-c][-C][-v][-I][-l bad-block-file][-b backup-boot-sector]
    [-m boot-msg-file][-n volume-name][-i volume-id]
    [-s sectors-per-cluster][-S logical-sector-size][-f number-of-FATs]
    [-h hidden-sectors][-F fat-size][-r root-dir-entries][-R reserved-sectors]
    [-M FAT-media-byte][-D drive_number]
    [–invariant]
    [–help]
    /dev/name [blocks]

    1. Try capital F (-F fat-size) instead of -f (number-of-FATs). It’s displayed right there in your terminal paste

  5. I’ve been zero-ing out a 4gb usb stick for the past 15 mins. Is it normal for it to take that long?

Comments are closed.