A friend has recently passed me her laptop which hung at Windows loading screen. Indefinitely. Unable to reach safe mode.

What I've tried so far

  • Took the drive out to try on another Windows 7 machine with a dock, but it wouldn't mount without a force reformat.
  • I load up Ubuntu and I'm able to explore the drive with no issues with everything appears intact, until after some short time the explorer freezes and the drive remounts with a different /dev/sd*.
  • I ran ntfsfix but no errors given, so I'm thinking the drive is failing (unsure which component).
  • To confirm it was hardware failure (or to get away with it with a bit of luck) I tried to clone the disk to a raw disk image with dd but it always seem to crap out at the same point: at around 90GB in (on a 640GB drive) the drive would again remount with a different /dev/sd*. So I'm thinking perhaps a deeply scratched platter on a particular area within the disk?
  • I wanted to hear what the drive sounded like, so I loaded up my machine with Windows 10 and put the drive back in a dock. It fails to stay mounted. It seems to keep unmounting and remounting every 19 seconds indefinitely. Throughout the 19 seconds, the drive would make the following sounds:

    1. Spin up faster
    2. Typical hard drive sounds, nothing suspicious for a few seconds (at this point, Windows recognises the drive and displays partitions in Computer)
    3. 6 light clicks
    4. Continuous steady spinning
    5. 19 seconds is up, repeat process (at this point, Windows removes the partitions from Computer suggesting the drive is unmounted)

I feel like the arm needs replacing with a new head and I'm happy to do this, but I'm really curious as to what else I can do to troubleshoot this so that I'm sure and confident in my decision. Thoughts and guidance welcome.

  • 1
    I tried to clone the disk to a raw disk image with dd but it always seem to crap out at the same point. 1) That does seem to indicate an on-disk problem and either failure to reallocate sectors or even having run out of spares. 2) Do not use dd for this, Use the right ddrescue. (there are two dd rescue versions. One deals effectively with an unreadable part and continues after timeout. You still will not have the data from the broken part but you will get a full disk image). – Hennes Sep 5 '15 at 14:10
  • I will try ddrescue, thanks. I'm not hopeful though with my suspicion lying with faulty hardware moreso than corrupt fs – codaamok Sep 5 '15 at 14:57

You have a physically damaged drive. From what you describe ddrescue might not even be able to get the data. Here's why;

ddrescue works by simply ignoring read errors when it encounters them instead of throwing some soft I/O error. The output stream is padded with zeroes to account for the gap and it just continues on as though the error never occurred. In your case, however, whatever is wrong with the drive might be so severe that the drive's firmware is doing a hard reset. This would explain the different /dev/sd* node. Note also that it might not be physical damage. Maybe the firmware is buggy or the low-level data structures on the disk are corrupted (the lack of sound effects from the drive lend credibility to this theory).

Either way, if the firmware is resetting on you, then it's not an I/O error. It's like yanking the drive's power cord and then plugging it back in. ddrescue simply cannot deal with that scenario. The only way to get the data back would be to create a list of specific blocks that are causing the firmware to freak out (by trial-and-error), and use that list as input to a script that can use dd to skip those sectors (note that ddrescue is little more than a dd script).

Personally I would never attempt this kind of recovery unless the data was ridiculously important and/or valuable. It's a serious pain. Note that swapping heads is also a pain, but carries additional risk of likely destroying the drive even further, since opening the drive properly requires gloves, a hair net, positive pressure environment, and special tools.

| improve this answer | |
  • Thanks for the input. The process of identifying the blocks and skipping them is something I might look into (purely because I've never done it before). Do you have any more reading material or saved bookmarks regarding this? – codaamok Sep 6 '15 at 8:26
  • just to note that there's a difference between ddrecue and gnu ddrescue. In theory gnu ddrescue + logging turned on should handle this. – Journeyman Geek Sep 6 '15 at 9:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.