Here is the new updated code snippet. Please update your bookmark or just right-click on the following link and choose “Bookmark this Link”:
On Friday I’m going to upgrade a friend’s computer and install two new hard disks. In order to save some time I wanted to preinstall the operating system (the one of my companies’ cooperation partner). Up to then it was a good idea. But then I connected one new disk to my computer and booted the XP Home installation CD. No hard disks installed was the short message after the installer probed the system. I realized that this CD must be so old that it had no SATA drivers – or at least not for my mainboard.
I searched for the driver CD of my mainboard and – thinking like a developer who wants to be nice to the users – booted again, pressed F6 when prompted to include 3rd party drivers, inserted the driver CD and found that the only way to hand new drivers to an XP installation was via floppy.
But I have no floppy drive in this machine. Nor has my PC in the living room, nor has my Laptop. A month ago I cleaned up my cellar and got rid of my last PC with a floppy drive – a Pentium 133 machine that I got in 2001, when it already was used (Siemens wanted to get rid of it back then). Well … no way to solve that, it seemed. I didn’t want to give up that easy and crawled though my board with PC components and really found a lonely floppy drive. But then I recalled that I also disposed my collection of SCSI and floppy cables – nobody uses floppies any more and everything is SATA nowadays, I kept some IDE cables as my file server still has an IDE drive.
So the next objective was: get a floppy cable. When I almost gave up on this I had a look in an old ASUS mainboard box where I keep some manuals in – and amazingly there was a brand new floppy cable still in its original package. Ok, great, now I could connect the floppy drive with my mainboard … but stop, it needs a small power plug – but there was none. As my power supply has cable management there must be some power cords left in its packaging … so again, searching for a cable – but that one was easier to find.
But what is a floppy drive without a floppy. Those I disposed about 5 years ago after I created a last backup of thier content on my file server. So now it became quite hard. I even had to search in those tow boxes with unused stuff that I left untouched for three years now since I moved into my current apartment. And astonishingly there were about 10 floppies left.
Then the amazing thing happened. After over 5 years it was the first time I logged into my own workstation with a floppy drive connected. Ok, the workstations changed in the meantime from a custom built one to a MacMini and now I’ve got a custom built one again (does not look as nice as Apple products but its a lot cheaper and much more flexible).
Well, the rest of the story is short: formatting the floppy with KDE was easy, installing wine to extract the SATA drivers on the CD from the self extrating *.exe archives went smoothly as well, and so did the installation of XP in the end. It just was so curious to use a technology again after such a long time (5 years can seem long). Maybe I now start to understand what it feels like for the computer poineers to touch a Zuse or to power on a DEC PDP-7.
I will document here how to hack a Seagate hard disk that ran into one of these annoying firmware bugs that affected the Seagate Barracuda 7200.11 series lately. If you want to know more about the background you may want to start with the first part of the story.
The friend who brought me the disk kindly came by the next day to help with the operation. According to the recipes I found here and here, we had to connect the hard drives service port to a serial console via a RS232-TTL converter. My friend prepared the RS232-TTL converter, brought a stable power supply as we needed 5V to operate. My task was to prepare the operating table, find a serial cable and a computer with a serial port, a two-pin-connector with wires and to get to know minicom.
So and here is how we did it:
First we connected the converter to the devices. The docking station of my notebook has a serial port, so I connected it via a serial cable to the converter. The three wires coming from the converter had to be connected the hard drive directly. We fixed the ground wire with a screw of the board. The Rx and Tx connectors had to be connected to the Tx and Rx connectors of the drive (so just cross them). Thats where we used the two-pin-connector. On the drive the pin next to the SATA connector is the Rx and next to this one is Tx. The other two are reserved and we did not need them.
The most tricky part was about to be next. We had to interrupt the power supply for the motor of the platters but keep everything else connected properly. And it must be possible to remove this interruption during the operation. We unscrew all screws a little and pushed a piece of paper between the contacts of the board and the connector, and fastened the screws just a bit.
So much for the preparation. Let’s start. Here is my minicomrc I used to communicate with the drives firmware:
$ cat minirc.seagateBug
# Machine-generated file - use "minicom -s" to change parameters.
pu port /dev/ttyS0
pu baudrate 38400
pu bits 8
pu parity N
pu stopbits 1
Now we connected the the SATA power cable to the drive and let minicom establish the serial connection. And really, I got first contact with the drive:
Even the error codes the drive dumped to the screen were correct according to the recipe. So we were on the right track. Now it was just about to properly retype the commands into minicom and patiently wait for the drive to complete the commands. Here is a screenshot with some comments in it.
Then finally we were done. But we did not repair the drive, but only reactivated it. Now it can run into the same bug again any time (but only on startup, so we would notice). So we tried to prevent as many restarts as we could. The first thing I did was connect it to an external SATA-2-firewire case and use the first startup of the disk to backup all important data. The second thing I did was connect the drive to the onboard connectors of my workstation and boot from the firmware upgrade CD I downloaded from the Seagate website the day before and deployed the new firmware to finally get rid of the bug.
In the end the disk felt quite well back in its original machine. Fortunately we had nothing more to fix within the installed system (yes, it was the other operating system).
Btw. the commands we sent to the drive took serveral seconds each to process, so we had to wait for for them to finish. Disconnecting power too early would have broken the disk. Thats why I connected all vital systems to my UPS for this hack. If you happen to have such a Seagate drive, my deepest regrets to you and good luck for your recovery hack.
Some days ago a friend came by late at a Friday night and brought a hard disk. He did not know what was wrong with it, but told me, that he was not able to access the data but he needs it within six days. As I was just about to develop a nice cold that evening and only wanted to hide in my bed that weekend I just put the disk on my shelf and promised him to look at it by Sunday evening.
I tought it was some partitioning problem or filesystem corruption that could be repaired. In the worst case I thought I needed to do an image of the disk and dig for files manually or try to find some data with foremost which is a nice tool to recover files from storage media that got deleted. It will walk though the complete media and look for known file headers and dump the data. This works quite nice. I restored a friend’s holiday pictures of a deleted memory card that way last year .
The cold came and so did the headache. Saturday came and passed by. But on Sunday evening when I opened the box with the hard disk and saw the manufacturer label I directly understood the problem. It was a Seagate drive. I remembered that a few weeks ago I read about a firmware bug on Seagate drives in the IT news here and here.
This firmware bug can turn the drive unusable. When I connected this drive to my computer in an external HDD case it was not detected. Connecting the drive with a SATA cable directly with the mainboard even prevented the bios from completing its hardware probes. Meanwhile I found a firmware upgrade boot CD on the Seagate support website but either I could boot from CD without connecting the defective drive or the drive was connected and my machine wasn’t able to boot anything.
After some googling I found out what happened to the drive. It ran into the firmware bug, it detected the malfunction on is own and deactivated itself in order to not loose any data. The bad thing about that was, that for a firmware update the drive had to start which was prevented due to the self protection of deactivating itself. Nice deadlock. Ok, the data was still there and could be recovered by data recovery companies like Ontrack. As the regular service would have taken too long and the 24-hour service was too expensive there was only one way left. Hack the drive yourself!
When I was searching for more information on the topic I found two posts about a team that successfully hacked the firmware and reactivated multiple drives after they ran into this bug. Find them here and here. In the next post I will describe how we did it (my friend came by on Monday and helped me).
And here comes the next post about a nice tool I found last night: mp3splt (yes, without “i”). It seems like my blog turns into a collection of tips about nice tools.
Anyway, the sound engineer of our choir sent me his USB stick via snail mail. He recorded our last gig with a hardware MP3 encoder which dumped some garbage into the MP3 file and even corrupted the filesystem. He could not copy or play it with his M$ system. So I was interested if it can be repaired.
It turned out to be very easy to fix. The filesystem was just done with a fsck.msdos -a. But for the MP3 file I needed a tool and found mp3splt. I decided to enforce to write new id3 tags and to cut the first 5 seconds and the quite a few minutes at the end of the recording (they were empty anyway). Btw. cutting MP3 files into pieces without to recode the material is the main purpose of this tool. So I just ran:
mp3splt -1 broken.mp3 00.05 118.00
This created a new and valid MP3 file with just our gig – thanks to the mp3splt authors.