aaru-dps / Aaru

Aaru Data Preservation Suite
Other
489 stars 35 forks source link

Dumping large hard disks to Aaru format fails assertion when hashing sectors #722

Open kkaisershot opened 2 years ago

kkaisershot commented 2 years ago

Version

5.3.0

Commit hash

No response

Tested debug version?

Which operating systems have you used?

What is the architectural bit size you're using?

What processor are you using?

Device manufacturer

Maxtor

Device model

6B160M0

Bus the device uses to attach to the computer

USB cable or card reader manufacturer

No response

USB cable or card reader model

No response

What were you doing when it failed?

Description

Dumping large (over 100GB) hard disks to Aaru format results in a "System.Exception: Assertion failed" at SpamSumContext.cs:119 upon nearly completing hashing sectors. I encountered this with a 160GB drive.

Note that the dropdown in the bug report form only lets me select 5.3.0, however I was also able to reproduce this in 5.3.1, both release and debug builds.

Exact command line used

./aaru media dump -O compress=False,deduplicate=False -v -d /dev/sdb /mnt/B42HDP2H.aaruf 2>&1 | tee output.txt

Expected behavior

Hashing sectors should complete without error, proceeding to close the image.

Actual behavior

Hashing sector 320172992 of 320173056Unhandled exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> System.Exception: Assertion failed
   at Aaru.Checksums.SpamSumContext.End() in /home/claunia/Development/Aaru/Aaru/Aaru.Checksums/SpamSumContext.cs:line 119
   at Aaru.Core.Checksum.End() in /home/claunia/Development/Aaru/Aaru/Aaru.Core/Checksum.cs:line 491
   at Aaru.Core.Sidecar.BlockMedia(IMediaImage image, Guid filterId, String imagePath, FileInfo fi, PluginBase plugins, List`1 imgChecksums, CICMMetadataType& sidecar, Encoding encoding) in /home/claunia/Development/Aaru/Aaru/Aaru.Core/Sidecar/BlockMedia.cs:line 365
   at Aaru.Core.Sidecar.Create() in /home/claunia/Development/Aaru/Aaru/Aaru.Core/Sidecar/Sidecar.cs:line 155
   at Aaru.Core.Devices.Dumping.Dump.Sbc(Dictionary`2 mediaTags, MediaType dskType, Boolean opticalDisc, Dump dvdDecrypt) in /home/claunia/Development/Aaru/Aaru/Aaru.Core/Devices/Dumping/Sbc/Dump.cs:line 1006
   at Aaru.Core.Devices.Dumping.Dump.Scsi() in /home/claunia/Development/Aaru/Aaru/Aaru.Core/Devices/Dumping/SCSI.cs:line 251
   at Aaru.Core.Devices.Dumping.Dump.Start() in /home/claunia/Development/Aaru/Aaru/Aaru.Core/Devices/Dumping/Dump.cs:line 248
   at Aaru.Commands.Media.DumpMediaCommand.Invoke(Boolean debug, Boolean verbose, String cicmXml, String devicePath, Boolean resume, String encoding, Boolean firstPregap, Boolean fixOffset, Boolean force, Boolean metadata, Boolean trim, String outputPath, String options, Boolean persistent, UInt16 retryPasses, UInt32 skip, Byte speed, Boolean stopOnError, String format, String subchannel, Boolean private, Boolean fixSubchannelPosition, Boolean retrySubchannel, Boolean fixSubchannel, Boolean fixSubchannelCrc, Boolean generateSubchannels, Boolean skipCdiReadyHole, Boolean eject, UInt32 maxBlocks, Boolean useBufferedReads, Boolean storeEncrypted, Boolean titleKeys) in /home/claunia/Development/Aaru/Aaru/Aaru/Commands/Media/Dump.cs:line 679
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at System.CommandLine.Invocation.ModelBindingCommandHandler.InvokeAsync(InvocationContext context)
   at System.CommandLine.Invocation.InvocationPipeline.<>c__DisplayClass4_0.<<BuildInvocationChain>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<UseParseErrorReporting>b__19_0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass14_0.<<UseHelp>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass22_0.<<UseVersionOption>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass21_0.<<UseTypoCorrections>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<UseSuggestDirective>b__20_0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<UseParseDirective>b__18_0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<UseDebugDirective>b__10_0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<RegisterWithDotnetSuggest>b__9_0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass12_0.<<UseExceptionHandler>b__0>d.MoveNext()
Uploading statistics

Output of command execution with debug output enabled

Using the command line provided, I generated a full log from a debug build, however owing to its size, I bzip2 compressed it and am hosting it on Dropbox for the time being:

https://www.dropbox.com/s/wr5uwqowdbhkq03/output.txt.bz2?dl=0

Media details

Maxtor DiamondMax 10 Model:6B160M0 160GB SATA150 HDD LBA: 320173056

TheRogueArchivist commented 2 years ago

May be a bug in calculating the SpamSum checksum, which will no longer be performed by default in 6.0. As a workaround for the time being, you can run the media dump command with “—metadata False” to bypass the checksumming. To retrieve the checksums after the initial dump, you can use the image checksum command, and use “—spamsum False” to hopefully skip the checksum that appears to be crashing.