How to test if a SDHC card is defect or is dying

Written by - 0 comments

Published on - Listed in Personal Linux Hardware


My wife told me today, that she has an issue with her camera, a Nikon D3100, and the memory card, a 16GB SDHC Class 6 card from Platinum.

Well as you can imagine, as a Linux Admin, I'm not the guy who fixes cars and laundry machines or know how to perfectly paint a wall. So as this problem goes more into my league, I can at least prove myself in knowing stuff about technology. Of course I received a raising eyebrow but she let me do my checks anyway.

The Nikon D3100 became very slow, already at the start. The SDHC is a class 6 card, as mentioned before, so that's not the slowest card available. After taking a few pictures, the camera froze and it took forever to save a few pictures on the card. Also the powering off of the camera took a long time. A switch of the memory card (we put in a much older SD card) confirmed that something must be wrong with the SDHC card - the camera was now much faster and working well again.

I plugged the SDHC card into my Debian Wheezy machine (through a USB-multi-slot-bridge). fdisk showed that the SDHC's file system is formatted in FAT32:

fdisk -l /dev/sdf

Disk /dev/sdf: 15.7 GB, 15727591424 bytes
255 heads, 63 sectors/track, 1912 cylinders, total 30717952 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot      Start         End      Blocks   Id  System
/dev/sdf1            8192    30717951    15354880    c  W95 FAT32 (LBA)

Let's check this bad guy with fsck:

fsck /dev/sdf1
fsck from util-linux 2.20.1
dosfsck 3.0.13, 30 Jun 2012, FAT32, LFN
There are differences between boot sector and its backup.
Differences: (offset:original/backup)
  72:49/4f, 73:4b/20, 74:4f/4e, 75:4e/41, 76:20/4d, 77:44/45, 78:33/20
  , 79:31/20, 80:30/20, 81:30/20
1) Copy original to backup
2) Copy backup to original
3) No action
? 1
Leaving file system unchanged.
/dev/sdf1: 902 files, 101166/479712 clusters

Hmm.. Indeed. Something doesn't look right. As you can see, I tried to fix the issue with the option 1 (copy original to backup), but that didn't work.
I decided to delete the partition and recreate it manually:

fdisk /dev/sdf1
Command (m for help): d
Selected partition 1

Command (m for help): w
The partition table has been altered!

fdisk /dev/sdf1
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-30717951, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-30717951, default 30717951):
Using default value 30717951

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): c
Changed system type of partition 1 to c (W95 FAT32 (LBA))

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Then format the new partition with FAT32:

mkfs.vfat /dev/sdf1
mkfs.vfat 3.0.13 (30 Jun 2012)

Another file system check told me that everything was OK. However once back in the Nikon camera, the same freezes still appeared.

Maybe the card is really dying - but how can this be verified? For hard drives there is the SMART table to find some hints, but how on SDHC cards?
By chance I came across F3 (http://oss.digirati.com.br/f3/)  which is a program the find determine a fake SD cards by writing and reading the card until all space is used. I figured I could use the same tool to detect bad sectors as well. So let's give F3 a shot.

Download and compile is pretty easy on Linux:

wget https://github.com/AltraMayor/f3/archive/v2.2.zip
unzip v2.2.zip
cd f3-2.2/
make linux

This creates two binary files: f3read and f3write. To be able to use these commands, the card's file system must first be mounted:

mount /dev/sdf1 /mnt

First we launch f3write to write to the SDHC card.
Remember that the card is now completely empty! Do not do that when you still have pictures on the card!

./f3write /mnt/
Free space: 14.62 GB
Creating file 1.fff ... OK!
Creating file 2.fff ... OK!
Creating file 3.fff ... OK!
Creating file 4.fff ... OK!
Creating file 5.fff ... OK!
Creating file 6.fff ... OK!
Creating file 7.fff ... OK!
Creating file 8.fff ... OK!
Creating file 9.fff ... OK!
Creating file 10.fff ... OK!
Creating file 11.fff ... OK!
Creating file 12.fff ... OK!
Creating file 13.fff ... OK!
Creating file 14.fff ... OK!
Creating file 15.fff ... OK!
Free space: 0.00 Byte
Average writing speed: 10.77 MB/s

 Once the card was fully written (it may take a while, be patient), we can read the written files from the card:

./f3read /mnt/
                  SECTORS      ok/corrupted/changed/overwritten
Validating file 1.fff ... 2097152/        0/      0/      0
Validating file 2.fff ... 2097152/        0/      0/      0
Validating file 3.fff ... 2097152/        0/      0/      0
Validating file 4.fff ... 2097152/        0/      0/      0
Validating file 5.fff ... 2097152/        0/      0/      0
Validating file 6.fff ... 2097152/        0/      0/      0
Validating file 7.fff ... 2097152/        0/      0/      0
Validating file 8.fff ... 2097152/        0/      0/      0
Validating file 9.fff ... 2097152/        0/      0/      0
Validating file 10.fff ... 2097152/        0/      0/      0
Validating file 11.fff ... 2097152/        0/      0/      0
Validating file 12.fff ... 2097152/        0/      0/      0
Validating file 13.fff ... 2097152/        0/      0/      0
Validating file 14.fff ... 2097148/        4/      0/      0
Validating file 15.fff ... 1303728/        0/      0/      0

  Data OK: 14.62 GB (30663852 sectors)
Data LOST: 2.00 KB (4 sectors)
               Corrupted: 2.00 KB (4 sectors)
        Slightly changed: 0.00 Byte (0 sectors)
             Overwritten: 0.00 Byte (0 sectors)
Average reading speed: 16.59 MB/s

There was a data loss of 2KB (4 sectors), interesting. So something is definitely wrong with this SDHC card.


Add a comment

Show form to leave a comment

Comments (newest first)

No comments yet.

RSS feed

Blog Tags:

  AWS   Android   Ansible   Apache   Apple   Atlassian   BSD   Backup   Bash   Bluecoat   CMS   Chef   Cloud   Coding   Consul   Containers   CouchDB   DB   DNS   Database   Databases   Docker   ELK   Elasticsearch   Filebeat   FreeBSD   Galera   Git   GlusterFS   Grafana   Graphics   HAProxy   HTML   Hacks   Hardware   Icinga   Influx   Internet   Java   KVM   Kibana   Kodi   Kubernetes   LVM   LXC   Linux   Logstash   Mac   Macintosh   Mail   MariaDB   Minio   MongoDB   Monitoring   Multimedia   MySQL   NFS   Nagios   Network   Nginx   OSSEC   OTRS   Office   PGSQL   PHP   Perl   Personal   PostgreSQL   Postgres   PowerDNS   Proxmox   Proxy   Python   Rancher   Rant   Redis   Roundcube   SSL   Samba   Seafile   Security   Shell   SmartOS   Solaris   Surveillance   Systemd   TLS   Tomcat   Ubuntu   Unix   VMWare   VMware   Varnish   Virtualization   Windows   Wireless   Wordpress   Wyse   ZFS   Zoneminder