{
  "schemaVersion": 1,
  "retrievedDate": "2026-10-18",
  "sourceType": "primary upstream software release and manual",
  "title": "GNU ddrescue 1.30",
  "author": "Antonio Diaz Diaz",
  "releaseVersion": "1.30",
  "manualDate": "2026-01-01",
  "archiveUrl": "https://ftp.gnu.org/gnu/ddrescue/ddrescue-1.30.tar.lz",
  "archiveBytes": 101615,
  "archiveSha256": "2264622d309d6c87a1cfc19148292b8859a688e9bc02d4702f5cd4f288745542",
  "acquisition": "HTTPS retrieval through the configured Hesela connector; lossless base64 transfer to the isolated experiment environment; LZIP member length, CRC and decompressed length validated.",
  "authenticationLimit": "No detached-signature verification; the hash identifies downloaded bytes, not independent author authentication.",
  "codeLicense": "GPL-2.0-or-later",
  "manualPermission": "Upstream manual grants unlimited permission to copy, distribute and modify the documentation.",
  "redistribution": "No upstream source code, archive or executable included in the Hesela research bundle.",
  "doi": null,
  "files": [
    {
      "path": "doc/ddrescue.texi",
      "sha256": "33720518a78ff78e38434116facc99188968ff90688c88657d0e74cae3ec51e5",
      "locators": [
        "Introduction: unread sectors do not cause zero writes",
        "Invoking ddrescue: --test-mode, --sparse, --truncate, exit status",
        "Mapfile structure: block states",
        "Generate mode: zero-content approximation",
        "Invoking ddrescuelog: --done-status and rescue-domain limits"
      ],
      "humanUrl": "https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html"
    },
    {
      "path": "rescuebook.cc",
      "sha256": "215f6e2402387e0f6476a4df702442a0d9ddce04840aae03f9fdd75f51c57ce9",
      "locators": [
        "Rescuebook::copy_block, lines 110-167: test-domain read suppression and whole-buffer zero write elision"
      ]
    },
    {
      "path": "genbook.cc",
      "sha256": "851585464ee1f76414ce48046a1c2b08cbe5b960566ceafd7a4acb9d1ee2bcc5",
      "locators": [
        "Genbook::check_block, lines 61-80: output reads and nonzero-sector finished marking"
      ]
    },
    {
      "path": "ddrescuelog.cc",
      "sha256": "1b83e9c2f1cfddf4e8f0ce13f600301349d77dc60b52ff8c4b1afd884466316b",
      "locators": [
        "done-status option and map completion check near lines 470-490"
      ]
    }
  ],
  "relatedResearch": [
    {
      "title": "An Analysis of Data Corruption in the Storage Stack",
      "authors": [
        "Lakshmi N. Bairavasundaram",
        "Garth R. Goodson",
        "Bianca Schroeder",
        "Andrea C. Arpaci-Dusseau",
        "Remzi H. Arpaci-Dusseau"
      ],
      "year": 2008,
      "venue": "6th USENIX Conference on File and Storage Technologies (FAST 08)",
      "doi": null,
      "url": "https://www.usenix.org/conference/fast-08/analysis-data-corruption-storage-stack",
      "fullTextUrl": "https://www.usenix.org/legacy/event/fast08/tech/full_papers/bairavasundaram/bairavasundaram_html/index.html",
      "accessed": "2026-10-18",
      "locators": [
        "Sections 2.2-2.3: integrity mechanisms and observation classes",
        "Section 3.2: collection, selection and limitations"
      ],
      "role": "Context for distinct integrity observations; not evidence for ddrescue behavior.",
      "limits": "Historical single-vendor telemetry with opt-in logging and incomplete scrub visibility. Not a recovery experiment; no fleet rate imported into fixture results."
    }
  ]
}
