Misery.

Misery is hard drive recovery. I was a stupider back then, and I should have taken every opportunity to get important data off of a raid 0 stripe. Still, I'm not going down without a fight. I've been sitting here half the night, and using an external drive enclosure, have tried orienting, spinning, and nursing the drive to a full spin and carefully monitoring copy commands. I just need 1 good copy of it and I can ditch the broken drive.

The other drive seems fine, but I'm definitely taking this opportunity to migrate off of a raid 0 stripe. I should explain what that means, I guess, though most of you probably know already.

RAID stands for redundant array of (inexpensive, or independent) disks. Essentially it lets you net yourself some reliability or extra space at various different tradeoff points. You start with 2 disks, which is what I had. Say they were both 150 gigabyte disks. Well, you could pick RAID 1 or mirroring and then you'd have 2 disks running, both with copies of your live data. This effectively protects against straight up platter damage ruining your day; Errors on 1 disk will cause that copy to fail and then you run off the live disk until you replace its pair. This is 'mirroring' and it is what I should have done.

This provides the reliability benefit and a slight performance benefit in reading, since the controller can read a large file into memory using both disks to read other parts. On the RAID 1, if the text string 'The quick brown fox jumps over the lazy dog.' was your data, this is what it would look like on Disk1 and Disk2:

D1: 'The quick brown fox jumps over the lazy dog.'
D2: 'The quick brown fox jumps over the lazy dog.'

OR, you can be greedy and go for RAID 0 -- This is what I did -- and double your space. The RAID controller will stripe each disk with a certain amount of data, maybe only 1024 bytes per stripe. So if you end up with disks looking like:

D1: 'Teqikbonfxjmsoe h aydg
D2: h uc rw o up vrtelz o.'

As you can see, with the stripe we save so much space! We can then fill up all that remaining space with all kinds of junk.

But you better not put any kind of important junk on there. Because what happens when one of these drives dies? Well, you're left with:

D1: 'Teqikbonfxjmsoe h aydg
D2: X(

And lemme tell you, that doesn't make a whole lot of sense -- especially when it's stuff like binaries, archives, etc, that are essentially unrecoverable without their other stripes.

Not to mention raid controllers all decide to do their own thing, proprietary setups that make it difficult to pull the data in anything but the controlled environment they want you to do it in. Yeah, we've made ways to get around most of it, but damn if it isn't inconvenient.

So on a forced write with DD, I am at 19 gigs on the fail disc so far. it's about 65 gigs of data, but this is better than the 1.6 gigs it was stuck at hours ago. Man, today has been such an awful day. I spilled my coffee before I got to take a sip, and I almost lost my arm after getting completely trapped by a piece of furniture for 45 minutes after the building had closed. (Man, long story, I don't want to get into it.)

They say patience is a virtue in cases like this. I may have to leave it writing all night. dd will just keep trying to write if you pass it the option conv=noerror, so right now I think I hjave it doing something like dd if=/dev/sda of=/dev/sdb bs=2048 conv=noerror,sync,somethingelseican'tremember?. That means input file = device on bus sda, output file device on bus sdb, blocksize is 2048, do not stop on errors, copy all data sector for sector, and whatever the other option I put on there was. Whatever. It's hung, and not getting past the bad block at 19 gig. #*!#$. I need every block, so I can't run badblocks or anything and just flag bad sectors. So my options are to sit here and wait... and wait... and wait...