mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Save tape partitions when dumping SSC media.
This commit is contained in:
@@ -31,7 +31,6 @@
|
|||||||
// ****************************************************************************/
|
// ****************************************************************************/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
@@ -293,7 +292,6 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
byte currentPartition = 0;
|
byte currentPartition = 0;
|
||||||
byte totalPartitions = 1; // TODO: Handle partitions.
|
byte totalPartitions = 1; // TODO: Handle partitions.
|
||||||
ulong currentSize = 0;
|
ulong currentSize = 0;
|
||||||
ulong currentPartitionSize = 0;
|
|
||||||
bool fixedLen = false;
|
bool fixedLen = false;
|
||||||
uint transferLen = blockSize;
|
uint transferLen = blockSize;
|
||||||
|
|
||||||
@@ -409,8 +407,6 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<TapePartitionType> partitions = new List<TapePartitionType>();
|
|
||||||
|
|
||||||
Checksum dataChk = new Checksum();
|
Checksum dataChk = new Checksum();
|
||||||
start = DateTime.UtcNow;
|
start = DateTime.UtcNow;
|
||||||
MhddLog mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, 1);
|
MhddLog mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, 1);
|
||||||
@@ -418,21 +414,8 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
|
|
||||||
TapeFile currentTapeFile =
|
TapeFile currentTapeFile =
|
||||||
new TapeFile {File = currentFile, FirstBlock = currentBlock, Partition = currentPartition};
|
new TapeFile {File = currentFile, FirstBlock = currentBlock, Partition = currentPartition};
|
||||||
|
TapePartition currentTapePartition =
|
||||||
Checksum fileChk = new Checksum();
|
new TapePartition {Number = currentPartition, FirstBlock = currentBlock};
|
||||||
TapePartitionType currentTapePartition = new TapePartitionType
|
|
||||||
{
|
|
||||||
Image = new ImageType
|
|
||||||
{
|
|
||||||
format = "BINARY",
|
|
||||||
offset = currentSize,
|
|
||||||
offsetSpecified = true,
|
|
||||||
Value = outputPrefix + ".bin"
|
|
||||||
},
|
|
||||||
Sequence = currentPartition,
|
|
||||||
StartBlock = currentBlock
|
|
||||||
};
|
|
||||||
Checksum partitionChk = new Checksum();
|
|
||||||
|
|
||||||
DateTime timeSpeedStart = DateTime.UtcNow;
|
DateTime timeSpeedStart = DateTime.UtcNow;
|
||||||
ulong currentSpeedSize = 0;
|
ulong currentSpeedSize = 0;
|
||||||
@@ -455,10 +438,8 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
currentTapeFile.LastBlock = currentBlock - 1;
|
currentTapeFile.LastBlock = currentBlock - 1;
|
||||||
(outputPlugin as IWritableTapeImage).AddFile(currentTapeFile);
|
(outputPlugin as IWritableTapeImage).AddFile(currentTapeFile);
|
||||||
|
|
||||||
currentTapePartition.Checksums = partitionChk.End().ToArray();
|
currentTapePartition.LastBlock = currentBlock - 1;
|
||||||
currentTapePartition.EndBlock = currentBlock - 1;
|
(outputPlugin as IWritableTapeImage).AddPartition(currentTapePartition);
|
||||||
currentTapePartition.Size = currentPartitionSize;
|
|
||||||
partitions.Add(currentTapePartition);
|
|
||||||
|
|
||||||
currentPartition++;
|
currentPartition++;
|
||||||
|
|
||||||
@@ -469,21 +450,7 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
{
|
{
|
||||||
File = currentFile, FirstBlock = currentBlock, Partition = currentPartition
|
File = currentFile, FirstBlock = currentBlock, Partition = currentPartition
|
||||||
};
|
};
|
||||||
fileChk = new Checksum();
|
currentTapePartition = new TapePartition {Number = currentPartition, FirstBlock = currentBlock};
|
||||||
currentTapePartition = new TapePartitionType
|
|
||||||
{
|
|
||||||
Image = new ImageType
|
|
||||||
{
|
|
||||||
format = "BINARY",
|
|
||||||
offset = currentSize,
|
|
||||||
offsetSpecified = true,
|
|
||||||
Value = outputPrefix + ".bin"
|
|
||||||
},
|
|
||||||
Sequence = currentPartition,
|
|
||||||
StartBlock = currentBlock
|
|
||||||
};
|
|
||||||
currentPartitionSize = 0;
|
|
||||||
partitionChk = new Checksum();
|
|
||||||
UpdateStatus?.Invoke($"Seeking to partition {currentPartition}");
|
UpdateStatus?.Invoke($"Seeking to partition {currentPartition}");
|
||||||
dev.Locate(out senseBuf, false, currentPartition, 0, dev.Timeout, out duration);
|
dev.Locate(out senseBuf, false, currentPartition, 0, dev.Timeout, out duration);
|
||||||
totalDuration += duration;
|
totalDuration += duration;
|
||||||
@@ -582,7 +549,6 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
{
|
{
|
||||||
File = currentFile, FirstBlock = currentBlock, Partition = currentPartition
|
File = currentFile, FirstBlock = currentBlock, Partition = currentPartition
|
||||||
};
|
};
|
||||||
fileChk = new Checksum();
|
|
||||||
|
|
||||||
UpdateStatus?.Invoke($"Changed to file {currentFile} at block {currentBlock}");
|
UpdateStatus?.Invoke($"Changed to file {currentFile} at block {currentBlock}");
|
||||||
dumpLog.WriteLine("Changed to file {0} at block {1}", currentFile, currentBlock);
|
dumpLog.WriteLine("Changed to file {0} at block {1}", currentFile, currentBlock);
|
||||||
@@ -605,15 +571,12 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
|
|
||||||
DateTime chkStart = DateTime.UtcNow;
|
DateTime chkStart = DateTime.UtcNow;
|
||||||
dataChk.Update(cmdBuf);
|
dataChk.Update(cmdBuf);
|
||||||
fileChk.Update(cmdBuf);
|
|
||||||
partitionChk.Update(cmdBuf);
|
|
||||||
DateTime chkEnd = DateTime.UtcNow;
|
DateTime chkEnd = DateTime.UtcNow;
|
||||||
double chkDuration = (chkEnd - chkStart).TotalMilliseconds;
|
double chkDuration = (chkEnd - chkStart).TotalMilliseconds;
|
||||||
totalChkDuration += chkDuration;
|
totalChkDuration += chkDuration;
|
||||||
|
|
||||||
currentBlock++;
|
currentBlock++;
|
||||||
currentSize += blockSize;
|
currentSize += blockSize;
|
||||||
currentPartitionSize += blockSize;
|
|
||||||
currentSpeedSize += blockSize;
|
currentSpeedSize += blockSize;
|
||||||
|
|
||||||
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
|
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
|
||||||
@@ -628,6 +591,8 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
|
|
||||||
currentTapeFile.LastBlock = currentBlock - 1;
|
currentTapeFile.LastBlock = currentBlock - 1;
|
||||||
(outputPlugin as IWritableTapeImage).AddFile(currentTapeFile);
|
(outputPlugin as IWritableTapeImage).AddFile(currentTapeFile);
|
||||||
|
currentTapePartition.LastBlock = currentBlock - 1;
|
||||||
|
(outputPlugin as IWritableTapeImage).AddPartition(currentTapePartition);
|
||||||
|
|
||||||
dumpLog.WriteLine("Closing output file.");
|
dumpLog.WriteLine("Closing output file.");
|
||||||
UpdateStatus?.Invoke("Closing output file.");
|
UpdateStatus?.Invoke("Closing output file.");
|
||||||
@@ -678,7 +643,6 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
sidecar.BlockMedia[0].DumpHardwareArray[0].Revision = dev.Revision;
|
sidecar.BlockMedia[0].DumpHardwareArray[0].Revision = dev.Revision;
|
||||||
sidecar.BlockMedia[0].DumpHardwareArray[0].Serial = dev.Serial;
|
sidecar.BlockMedia[0].DumpHardwareArray[0].Serial = dev.Serial;
|
||||||
sidecar.BlockMedia[0].DumpHardwareArray[0].Software = Version.GetSoftwareType();
|
sidecar.BlockMedia[0].DumpHardwareArray[0].Software = Version.GetSoftwareType();
|
||||||
sidecar.BlockMedia[0].TapeInformation = partitions.ToArray();
|
|
||||||
|
|
||||||
if(!aborted)
|
if(!aborted)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user