This is a long time in the making, and I've finally got it working so I thought I'd share this with as many people as I can in case they're in a similar situation.

Long story short - HP SmartArray P410 failed, got another one (which worked for a while) then also failed. I also had a P200/ZM in there with another array (failed). I was sick of HP by that point, but I needed to recover my array's data - was not even going to consider getting another SmartArray card to copy it off with.

So. After much research, I found that HP employ some painful RAID5 algorithms (called Delayed Parity) that make normal RAID5 recovery methods very, very difficult.

So I wrote my own block driver. This driver (much like md-raid) takes the disks and translates them into a logical drive (array) taking into account HP's bastard algorithms. It's not a proper RAID solution - no paritiy calculations are done, but it should allow you to mount the array and copy it off (as I have now done).

Note: Some knowledge of C and compiling C required, see answers for the download.

  • It seems to me that this layout is already supported by md, or rather I fail to see what is special about this layout as shown in the comment of your source file. If the parity shifts after 16 stripes as you say, does it not just mean that the chunksize (as md understands it) is stripesize (as hp unterstands it) * 16? – frostschutz Dec 6 '14 at 13:02
  • Unfortunately not. md does not support delayed parity in any shape or form - in every case of it's currently (4) supported algorithms, parity is either left or right, a/symmetrical. In all those cases, the parity position with reference to disk index changes for each stripe. In HP's RAID, the parity stays on the same disk several stripes in a row (delaying the position change, hence the name). This explains the RAID as md does it: accs.com/p_and_p/RAID/LinuxRAID.html This shows what HP does: freeraidrecovery.com/library/delayed-parity.aspx – Litch Dec 7 '14 at 14:29
  • Reading over line vraid.c:72 I see that I've done a diagram for delayed parity = 16, when I stated it was DP=4 above it. Apologies, the diagram illustrates DP=16. – Litch Dec 7 '14 at 15:03
  • Oh, now I see the problem. With md you'd get 024135 instead of 012345, and you probably don't want to abuse the device mapper as it'd involve a giant mapping. Thanks for elaborating... – frostschutz Dec 7 '14 at 20:07

The source tarball is available from: HERE

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.