[Nexus One Q&A, Help & Troubleshooting] mike105105:
Ok I will provide some card recovery solutions, but first...any time the card is not properly unmounted it can potentially become corrupted, that means pulling it out without unmounting/safely removing, and also pulling the battery or otherwise powering the phone down without it being able to unmount the card. For all intents and purposes there is no way for the phone to physically damage the card and make it unrepairable, the only way i can think of is if it rewrote the same memory location like 1 million times or whatever the mtbf is.

Easy way to recover:

Download knoppix or some other linux live cd, or even better just use linux and be rid of windows forever :-)

Follow the many directions online to burn the cd.

Boot the computer with the cd

Insert the card into the card reader, I recommend using a card reader instead of the phone because it helps keep things simple.

Depending on the linux distro it may attempt to automount the card, and it will probably try to repair it, if a folder opens up with the file on your card then you are good and can proceed to unmount the card.

If the card wasn't opened automatically open a terminal, in the program menus there should be an entry for terminal or terminal emulator.

Type dmesg and hit enter

On one of the last few lines should be a message similar to this:

[1701707.500017] usb 3-1: new full speed USB device using uhci_hcd and address 2
[1701707.674385] usb 3-1: configuration #1 chosen from 1 choice
[1701707.677729] scsi66 : SCSI emulation for USB Mass Storage devices
[1701707.677855] usb-storage: device found at 2
[1701707.677857] usb-storage: waiting for device to settle before scanning
[1701712.672010] usb-storage: device scan complete
[1701712.674980] scsi 66:0:0:0: Direct-Access CBM1180 Flash Disk 2.00 PQ: 0 ANSI: 2
[1701712.675665] sd 66:0:0:0: Attached scsi generic sg7 type 0
[1701712.679986] sd 66:0:0:0: [sdg] 255231 512-byte logical blocks: (130 MB/124 MiB)
[1701712.682972] sd 66:0:0:0: [sdg] Write Protect is off
[1701712.682975] sd 66:0:0:0: [sdg] Mode Sense: 0b 00 00 08
[1701712.682977] sd 66:0:0:0: [sdg] Assuming drive cache: write through
[1701712.694970] sd 66:0:0:0: [sdg] Assuming drive cache: write through
[1701712.694974] sdg: sdg1
[1701712.712979] sd 66:0:0:0: [sdg] Assuming drive cache: write through
[1701712.712983] sd 66:0:0:0: [sdg] Attached SCSI removable disk

In my case the drive was added as sdg with the one partition being sdg1

Get superuser permissions using su or sudo

Substituting your drive name type: fsck.vfat -a /dev/sdg1

That should automatically fix any errors, you should be able to also run it as generic fsck and let the system figure out the fs type. If you have an ext partition for apps2sd then you can run fsck -a /dev/sdg2

If you need to unmount from the terminal then with superuser permissions umount /dev/sdg1

***ADVANCED***

The best practice of course is to make a backup before making changes, so assuming you have your hard drive mounted as well and at least enough free space equivalent to the card size you can do something like dd if=/dev/sdg of=/home/mike/card.img

That does a bit by bit copy of the entire card to the img file, since on my system I have linux installed I just dump the img to my home folder, if you are running off a cd you need to set the output to the folder that your hard drive is mounted to. If you screw up you can either copy it back to the card by reversing those parameters or you can do any further recovery attempts on the img file.

For recovery beyond that I recommend testdisk and photorec http://www.cgsecurity.org/wiki/TestDisk

Photorec is the more important one, it can search the whole disk and recover many different file types, I have used it to recover data for friends on failed hard drives and inadvertent formats

Mike