Files
kramer/README.md
2026-01-21 11:07:09 -05:00

1.9 KiB

kramer

kramer is a data recovery utility for optical media.

There are plans to change the project name, but during initial development it will continue to be referred to as kramer.

This is still in very early development, so expect old maps to no longer work.

Plans

Core

  • Mapping
    • Record the state of disc regions.
    • Recover from saved map.
    • Backup old map before truncating for new.
  • Recovery
    • Initial
      Technically there is an outstanding issue with sleepy firmware here, but beside that this technically works.
    • Patchworking
    • Isolate
    • Scraping
  • CLI
    • Arguments
    • Recovery progress
    • Recovery stats
  • Documentation, eugh.

Extra

  • i18n
    • English
    • French
  • TUI (akin to ddrescueview)
    • Visual status map
    • Recovery properties
    • Recovery progress
    • Recovery stats

Recovery Strategy

Initial Pass / Patchworking

Tries to read clusters of max_buffer_size, marking clusters with errors with an increasing level.

This works by halving the length of the read buffer until one of two conditions is met:

  1. max_buffer_size has been divided by max_buffer_subdivision (like a maximum recursion depth). Effectively, it will keep running max_buffer_size / isolation_depth; isolation_depth++; on each pass until isolation_depth == max_buffer_subdivision
  2. buffer_size <= min_buffer_size
  3. buffer_size <= sector_size

Isolate

This is where we reach brute forcing territory. ddrescue refers to this as trimming. kramer implements the same technique. However, thanks to the patchworking pass, this sector-at-a-time reading can be minimized, hopefully reducing wear and overall recovery time on drives with a very short spin-down delay.

Scraping

This is the pure brute force, sector-at-a-time read. This has identical behaviour to ddrescue's scraping phase.