Hi guys,
Here is what I did to get all the data back from a 'clicking' Lacie Big Extrem.
Pre-requisite:
- An Ubuntu system
- Void the Lacie Big Extreme 1T (2x500G in RAID0) warranty by opening it up
- The first disk (the one near the connectors) will be dd1
- The other one is dd2
- Then I took:
- 1 external DD of 1To (EHDD1) in an USB enclosure: partition it using ext4
- 1 external DD of 2To (EHDD2) in an USB enclosure: create 2 partitions, 1 of 1.15To (P1-EHDD2) and the other one of 650Mo (P2-EHDD2)
- 1 external HDD USB enclosure (where you can switch HDDs) - EHDD3
-
What you need to do:
- Remove dd1 form the Lacie enclosure
- Put dd1 in EHDD3
- Connect it to your linux system ... let's say it will mount under /dev/sdb
- Connect EHDD1 and mount it under /new
- Take the full disk image of dd1:
dd if=/dev/sdb of=/new/dd1.img
... it takes almost 10 hours
- Disconnect EHDD3
- Remove dd2 form the Lacie enclosure
- Put dd2 in EHDD3
- Connect it to your linux system ... let's say it will mount under /dev/sdb
- Connect EHDD2 and mount P2-EHDD2 under /new
- Take the full disk image of dd1:
dd if=/dev/sdb of=/new/dd2.img
... it takes almost 10 hours
- Disconnect EHDD3
So, now you have the full image disk of dd1 and dd2.
Let's rebuild the RAID0 now.
- Connect EHDD1 (/dev/sdb) and EHDD2 (/dev/sdc)
- mount EHDD1 and EHDD2
mkdir /dd1
mount -o loop /dev/sdb /dd1
mkdir /dd2
mount -o loop /dev/sdc1 /dd2
- Rebuild the array:
mkdir /ddall
mount -o loop /dev/sdc2 /ddall
python rebuild.py
The rebuild.py script contains:
The strip size of the RAID0 array: 256kb
dd commands to rebuild an image
Script rebuild.py
-------------------
Code:
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# deinterlace.py
#
# INTENT = This is a script for deinterlacing two raw dd images
# taken from a failed RAID 0 array into one "valid" image file
# that we hope to be able to recover data from.
#
# This is strictly experimental.
#
# Thursday, May 1, 2008 -Simón A. Ruiz
#
inputFiles = [open("/dd1/dd1.img","rb"),open("/dd2/dd2.img","rb")]
outputFile = open("/ddall/ddall.img","wb")
# 256kb strippes
chunkSize = 262144
# And, so as not to have to figure this out every time through the loop...
numFiles = len(inputFiles)
i = 0
while True:
nextChunk = inputFiles[i%numFiles].read(chunkSize)
if not nextChunk:
print 'Done! No more data.'
break
outputFile.write(nextChunk)
i += 1
outputFile.close()
for file in inputFiles:
file.close()
- The command python rebuild.py will take 20hours
- Once it finishes, you just have to mount the produced image file
kpartx -d /ddall/ddall.img
You are done ... it worked for me, so why not for all of you!