Recover a failed Adaptec Array
What happens when your server POSTS, then sits at the HBA BIOS for ages bofor crashing with some kernel message, or message to the effect that it is planning on doing absolutely nothing with your disks?
Recently, we have a client who had had a string of power events. The last, resulting in a total failure of the array. We couldn't even get into the adapter BIOS! We discovered that if we removed the disks, we could access the BIOS merrily, so we figured that the card was working ok.
After some deliberation, we decided we would go for a re-creation of the array as a means to re-writing the metadata to the disks. Now, it shoud be said, you might get but 1 shot at this as you are writing to the disks a new array structure (albeit it is identical). As a result, I chose to forensically image every disk in the array first (was only 4 x 1TB disks in RAID 5). If you wish to do this, you can use Norton Ghost as follows:
ghost32.exe -IR -FNF
Or, you could use trusty dd as per this guide. The bonus of using dd is that you can crack on with many copies at the same time :-)
Now, it is vital that you number the disks and copies - they need to be in the correct order otherwise you're going to find things get rather ugly.
So, with your copies, insert them one at a time into the controller and get into the controller BIOS. Make a note of the layout of the array (type, chunk size etc. - this gets more complicated if you have multiple arrays on the same disk!) and then go ahead and delete the array from that disk. Remove this disk and repeat the process for each of the other disks.
Scary stuff eh!? Now, pop all the disks back into the controller and get back in the the card's BIOS. We are now going to make the exact same array we had before, with the same stripe/chunk sizes etc but ensuring the use the Skip Init option. Failing to do so will write a new array to your disks and you'll be stuffed! By using skip init, we are telling the controller that there is either existing data there or we don;t want to sit and go through the process of the array shaping out.
Handy feature : and an absolute life safer. Interestingly, using Linux RAID (MD) allows you to do similar with a simple command:
mdadm --create --assume-clean --level=5 --raid-devices=4 --chunk-size=256 /dev/md0 /dev/sd[abcd]1