#[non_exhaustive]pub struct RecoveryReport {
pub image_size: u64,
pub chunk_size: u64,
pub chunks_total: usize,
pub chunks_recovered_primary: usize,
pub chunks_recovered_table2: usize,
pub chunks_zero_filled: usize,
pub chunks_crc_flagged: usize,
pub bytes_recovered: u64,
pub bytes_zero_filled: u64,
pub truncation_offset: Option<u64>,
pub lost_chunks: Vec<usize>,
pub crc_flagged_chunks: Vec<usize>,
}Expand description
Outcome of a recovery run — the accounting an examiner needs to defend what was and was not salvaged from a corrupt image.
The three recovery counts partition every chunk: each is either recovered
from the primary table, recovered from the redundant table2, or zero-filled
(lost). chunks_recovered_primary + chunks_recovered_table2 + chunks_zero_filled == chunks_total always holds.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.image_size: u64Logical size of the recovered raw image in bytes (sector_count * bytes_per_sector). The output file is exactly this long.
chunk_size: u64Chunk size in bytes (sectors_per_chunk * bytes_per_sector).
chunks_total: usizeTotal number of chunks the volume geometry declares.
chunks_recovered_primary: usizeChunks recovered from the primary table section.
chunks_recovered_table2: usizeChunks recovered from the redundant table2 section after the primary
entry failed.
chunks_zero_filled: usizeChunks that could not be recovered from either table and were zero-filled.
chunks_crc_flagged: usizeChunks whose sector data was physically present and emitted but whose stored Adler-32 did not match (recoverable-but-suspect data). These are counted among the recovered chunks — the bytes are exported, not lost — but flagged so an examiner knows the sectors are checksum-suspect.
bytes_recovered: u64Total logical bytes recovered from real chunk data (never counts zero-filled regions).
bytes_zero_filled: u64Total logical bytes zero-filled for unrecoverable chunks.
truncation_offset: Option<u64>File offset (in the source segment) at which the segment was found
truncated, if truncation was detected; None for an untruncated image.
lost_chunks: Vec<usize>Indices of every chunk that was zero-filled (lost), in ascending order.
crc_flagged_chunks: Vec<usize>Indices of every chunk emitted with a checksum mismatch, ascending.
Trait Implementations§
Source§impl Clone for RecoveryReport
impl Clone for RecoveryReport
Source§fn clone(&self) -> RecoveryReport
fn clone(&self) -> RecoveryReport
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RecoveryReport
impl Debug for RecoveryReport
impl Eq for RecoveryReport
Source§impl PartialEq for RecoveryReport
impl PartialEq for RecoveryReport
impl StructuralPartialEq for RecoveryReport
Auto Trait Implementations§
impl Freeze for RecoveryReport
impl RefUnwindSafe for RecoveryReport
impl Send for RecoveryReport
impl Sync for RecoveryReport
impl Unpin for RecoveryReport
impl UnsafeUnpin for RecoveryReport
impl UnwindSafe for RecoveryReport
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more