How does RAID – PROMISE FASTTRAK 133 interleaves striped arrays?

My colleague configured two drives on the main board with a strip of Promise FastTrak 133 onboard. The main board failed and we could not find any other onboard Promise control that can recognize the array

Using Linux or some disk editor, I can see the data on the two drives… I want to see if I can merge the data from the two drives into one larger But I need to know how this information is interleaved on the drive.

I tried dmraid on Linux, but it can’t recognize the drive as an array. I think I can try the combination from the drive The alternate block of 256B starts with a block size of 256B and keeps doubling until I get a result that looks complete. However, if anyone already knows how the Promise controller spreads the data through the striped array, I want to avoid this.

Okay, I understand. Various Promise manuals stipulate that the strip size is 64k by default and can be set to 32k Or 128k. So, I wrote a small java application that combines two different sources, and it works like a charm! Turns out they are 64k stripes.

This is the code in case anyone else encounters this problem. This is not fancy (it will only run before the input or output space is exhausted), but It will get you out of trouble.

public class PromiseFastTrakCombiner {

public static void main(String[] args) {
if( args.length != 4) {
System.out.println("Usage: java PromiseFastTrakCombiner ");
System.exit(1);< br /> }

String source1 = args[0];
String source2 = args[1];
String dest = args[2];
int blocks = Integer.parseInt(args[3]);
System.out.println("Going to copy: "+ source1 +" and "+ source2 +" to "+ dest +" with "+ blocks + "kB blocks");
System.out.println("If this is not what you want, hit Ctrl-C now. Otherwise, hit Enter");
try {
System.in. read();
} catch (IOException e) {
e.printStackTrace();
}

try {
FileI nputStream in1 = new FileInputStream(source1);
FileInputStream in2 = new FileInputStream(source2);
FileOutputStream out = new FileOutputStream(dest);

int bufsize = 1024 * blocks;
byte[] buffer = new byte[bufsize];
long bytesread;
long totalbytes = 0;
long lastreport = 0;
while(true) {< br /> bytesread = in1.read(buffer);
totalbytes += bytesread;
out.write(buffer);
bytesread = in2.read(buffer);
totalbytes += bytesread;
out.write(buffer);
// Progress update after every 10MB...
if(totalbytes-lastreport> 10000000) {
System.out. println("Bytes processed: "+ totalbytes);
lastreport = totalbytes;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

My colleague configured two drives on the main board with a strip of Promise FastTrak 133 onboard. The main board failed and we could not find any other Identify the onboard Promise controller of the array.

Using Linux or some disk editor, I can see the data on the two drives… I want to see if I can connect the two drives The data is merged onto a larger drive. But I need to know how this information is interleaved on the drive.

I tried dmraid on Linux, but it does not recognize the drive as an array. I Think I can try to combine alternating blocks from the drive, starting with a block size of 256B and keeping doubling until I get a result that looks complete. However, if anyone already knows how the Promise controller spreads the data through the striped array, I want to avoid In this case.

Ok, I understand. Various Promise manuals stipulate that the strip size is 64k by default, and it can be set to 32k or 128k. So, I wrote a small java application that combines two different sources and it works like a charm! Turns out they are 64k stripes.

This is the code in case anyone else encounters this problem. This is not fancy (it will only run before the input or output space is exhausted), but It will get you out of trouble.

public class PromiseFastTrakCombiner {

public static void main(String[] args) {
if( args.length != 4) {
System.out.println("Usage: java PromiseFastTrakCombiner ");
System.exit(1);< br /> }

String source1 = args[0];
String source2 = args[1];
String dest = args[2];
int blocks = Integer.parseInt(args[3]);
System.out.println("Going to copy: "+ source1 +" and "+ source2 +" to "+ dest +" with "+ blocks + "kB blocks");
System.out.println("If this is not what you want, hit Ctrl-C now. Otherwise, hit Enter");
try {
System.in. read();
} catch (IOException e) {
e.printStackTrace();
}

try {
FileInput Stream in1 = new FileInputStream(source1);
FileInputStream in2 = new FileInputStream(source2);
FileOutputStream out = new FileOutputStream(dest);

int bufsize = 1024 * blocks;
byte[] buffer = new byte[bufsize];
long bytesread;
long totalbytes = 0;
long lastreport = 0;
while(true) {< br /> bytesread = in1.read(buffer);
totalbytes += bytesread;
out.write(buffer);
bytesread = in2.read(buffer);
totalbytes += bytesread;
out.write(buffer);
// Progress update after every 10MB...
if(totalbytes-lastreport> 10000000) {
System.out. println("Bytes processed: "+ totalbytes);
lastreport = totalbytes;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

Leave a Comment

Your email address will not be published.