I have some data from an old HP server I want to recover. I was able to get an image of 3 of 4 disks and I am working from those images. I am working under the assumption it is a RAID5, 64KB block size with 512B sectors, HP backward Delayed Parity. Downloading free recovery software or buying recovery software is not an option. I am working on a C++ program to recover the data. I found some good blog posts with some code for recovering data from normal RAID 5, and I modified it to work with Delayed Parity, if you know all of the variables that describe the RAID. What I am trying to figure out now is what the 1st delay and delay values are, a well as indentifying the parity blocks. Once those are figured out I have to get the code to write a new file where I remove the parity bits and write the blocks into a single file, which I can then try to make mountable and recover the files.
My question has a couple parts, but the core problem is that I can read and write the blocks, but I don't know which blocks are parity blocks.
Since this is an HP RAID and they wanna be individuals, I have to find out how to determine the 1st delay and delay values? I am assuming the drives are formatted using NTFS under the RAID, and I am assuming the data is not corrupt and there would be valid information in the data blocks. I have read posts on other sties about doing a manual inspection, but I am not an expert on the disk layout of NTFS and I don't know what to look for to identify data blocks vs parity blocks.
If there is no easy way to do a manual inspection to figure out the delay, is there a good way to figure out which blocks are parity programmatically? I would like to write a small program that analyzes some of the data and try to determine which blocks are parity so that I can then run it over several stripes and calculate the delay values. I can then also use it to search for the end of the header by looking for parity and assuming the first stripe with parity is the first stripe beyond the header. Maybe there is some clever math one can do to test for parity bits, or maybe visually inspect a few lines of data?
Lastly, If there is a better way to figure out those values, without buying or downloading software, and I am not asking the right question, what would be a good way to approach this problem? I reiterate that for the scope of this question downloading or purchasing software is not an option.