# 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 - [x] Mapping - [x] Record the state of disc regions - [x] Recover from saved map. - [ ] Recovery - [x] Initial Technically there is an outstanding issue with sleepy firmware here, but beside that this technically works. - [ ] Patchworking - [ ] Isolate - [ ] Scraping - [ ] CLI - [x] 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 (Stage::Untested) Tries to read clusters of `max_buffer_size`, marking clusters with errors as `ForIsolation` (note that the name has not yet be updated to `Patchwork{ depth }`). ### Patchworking 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.