{"id":20969266,"url":"https://github.com/cblichmann/btrfscue","last_synced_at":"2025-09-16T03:47:15.944Z","repository":{"id":57528632,"uuid":"2330330","full_name":"cblichmann/btrfscue","owner":"cblichmann","description":"Recover files from damaged BTRFS filesystems","archived":false,"fork":false,"pushed_at":"2023-05-21T14:24:14.000Z","size":248,"stargazers_count":82,"open_issues_count":9,"forks_count":9,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-05-14T09:44:45.731Z","etag":null,"topics":["btrfs","data-recovery","forensic-analysis","forensics","recovery","rescue"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cblichmann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-09-05T19:58:14.000Z","updated_at":"2025-03-28T00:47:25.000Z","dependencies_parsed_at":"2024-06-20T09:26:48.263Z","dependency_job_id":"8ab54907-bb4a-4803-9f7d-98832b48fe14","html_url":"https://github.com/cblichmann/btrfscue","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/cblichmann/btrfscue","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cblichmann%2Fbtrfscue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cblichmann%2Fbtrfscue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cblichmann%2Fbtrfscue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cblichmann%2Fbtrfscue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cblichmann","download_url":"https://codeload.github.com/cblichmann/btrfscue/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cblichmann%2Fbtrfscue/sbom","scorecard":{"id":268592,"data":{"date":"2025-08-11","repo":{"name":"github.com/cblichmann/btrfscue","commit":"cd1855326d70378d9b2e9bbafe7492a0345edfd2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/24 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/cblichmann/btrfscue/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/cblichmann/btrfscue/build.yml/main?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.4 not signed: https://api.github.com/repos/cblichmann/btrfscue/releases/6469011","Warn: release artifact v0.4 does not have provenance: https://api.github.com/repos/cblichmann/btrfscue/releases/6469011"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 8 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T12:47:59.611Z","repository_id":57528632,"created_at":"2025-08-17T12:47:59.611Z","updated_at":"2025-08-17T12:47:59.611Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275358832,"owners_count":25450443,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-16T02:00:10.229Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["btrfs","data-recovery","forensic-analysis","forensics","recovery","rescue"],"created_at":"2024-11-19T03:19:35.881Z","updated_at":"2025-09-16T03:47:15.920Z","avatar_url":"https://github.com/cblichmann.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"btrfscue [![Build Status](https://github.com/cblichmann/btrfscue/workflows/build/badge.svg)](https://github.com/cblichmann/btrfscue/actions?query=workflow%3Abuild)\n========\n\nbtrfscue is an advanced data recovery tool for the BTRFS filesystem. Despite\nbeing a state of the art filesystem, at the time when I started writing this\n(Q2 2011), BTRFS did not have a stable fsck tool that is capable of restoring\na filesystem to a mountable state after a power failure or system crash.\nRecently, this situation has somewhat improved with the `btrfs restore`\ncommand. Unlike this official tool, btrfscue is designed to be able to restore\ndata from disk images that were obtained from faulty storage devices or if all\nsuperblocks were overwritten inadvertently.\n\nBeing a recovery tool, btrfscue works best on disk images and will write\nrecovered data to a directory. It can thus be used to convert BTRFS filesystems\nto any other filesystem supported by the host OS. It will also recover recently\ndeleted files and directories and aid in BTRFS filesystem forensics.\n\n\nTable of Contents\n-----------------\n\n   * [btrfscue](#btrfscue)\n      * [Development State](#development-state)\n      * [Requirements](#requirements)\n      * [Recommended Tools](#recommended-tools)\n      * [How to Build](#how-to-build)\n         * [Build using Make](#build-using-make)\n      * [Packages](#packages)\n      * [Usage](#usage)\n      * [Copyright/License](#copyrightlicense)\n\n\nDevelopment State\n-----------------\n\nAs the version number 0.5 implies, this software is pretty much in alpha state.\nIn fact, the repository you're looking at now is a complete rewrite of an\nearlier attempt that was written in C++ as early as 2011 (so don't let the\ncopyright years fool you :)).\n\nThis works:\n  - Heuristic detection of filesystem identifiers\n  - Dump meta data to file\n  - Listing of files and directories in the metadata\n  - FUSE-mounting a \"rescue\" view of the metadata\n\nThis definitely does not work:\n  - Actually restoring files bigger than the filesystem block size\n  - Running on big-endian machines\n  - BTRFS RAID levels, multi-device FS. These are planned for later.\n\n\nRequirements\n------------\n\n  - Go 1.18 or higher\n  - Git version 1.7 or later\n  - Optional: CDBS (to build the Debian packages)\n  - Optional: GNU Make\n\n\nRecommended Tools\n-----------------\n\n  - btrfs-tools to inspect the faulty filesystem before attempting data recovery\n  - ddrescue to create disk images of faulty drives (download from\n    http://www.gnu.org/software/ddrescue/ddrescue.html or, on Debian, install\n    the package gddrescue)\n\n\nHow to Build\n------------\n\nGeneral way to build and install via `go install`:\n```\ngo install blichmann.eu/code/btrfscue/cmd/btrfscue@latest\n```\n\n### Build using Make\n\nTo build from a specific revision/branch/tag, not using `go install`:\n```bash\nmkdir -p btrfscue \u0026\u0026 cd btrfscue\ngit clone --recurse-submodules https://github.com/cblichmann/btrfscue.git .\n# Optional: checkout a specific rev./branch/tag using i.e. git checkout\nmake\n```\n\nYou may want to create a symlink to the binary somewhere in your path.\n\n\nPackages\n--------\n\nAt the moment, only building Debian packages is supported. Just run `make deb`\nto build.\n\n\nUsage\n-----\n\nbtrfscue command-line syntax is generally as follows:\n```\nbtrfscue SUBCOMMAND OPTION...\n```\n\nData recovery with btrfscue is divided in stages:\n\n  1. If you suspect physical damage, use a tool like ddrescue to dump the\n     contents of the damaged filesystem to another disk. Otherwise, the\n     standard `dd` utility will do just fine. The following steps assume the\n     disk image is named DISKIMAGE.\n     If you don't have enough physical storage space, btrfscue will also\n     directly work with the device file. However, **THIS IS NOT RECOMMENDED\n     IN CASE OF SUSPECTED PHYSICAL DAMAGE**. Although btrfscue never writes\n     to the device, it may stress the drive too much and may render further\n     recovery attempts impossible. This is even true of damaged SSDs since\n     the flash controller may decide at any time to shutdown the device for\n     good.\n\n  2. Build a list of possible ids to help identify the filesystem id for the\n     filesystem that is to be restored by applying a heuristic. This will\n     output a list of filesystem ids along with the number of times the\n     respective id was found while sampling the disk image.\n     ```\n     btrfscue identify DISKIMAGE\n     ```\n  3. Save metadata for later analysis. This may take a long time to finish\n     as the whole image is being scanned. You need to specify the filesystem\n     to look for by using the --id parameter with a filesystem id FSID.\n     ```\n     btrfscue recon --id FSID --metadata metadata.db DISKIMAGE\n     ```\n  4. Inspect the metadata dump to help decide what to restore later.\n     ```\n     btrfscue --metadata metadata.db ls /\n     ...\n     ```\n     Alternatively, if you're on Linux or macOS, you can FUSE-mount a \"rescue\"\n     of the filesystem metadata:\n     ```\n     btrfscue --metadata metadata.db mount MOUNTPOINT\n     ```\n     Explore the metadata from another shell. Type CTRL+C to unmount.\n\n  5. Restore the actual data. This is work-in-progress. You can use the mount\n     command to copy files that are no bigger than the filesystem block size.\n\n\nCopyright/License\n-----------------\n\nbtrfscue version 0.6\nCopyright (c)2011-2023 Christian Blichmann \u003cmail@blichmann.eu\u003e\n\nbtrfscue is licensed under a two-clause BSD license, see the LICENSE file\nfor details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcblichmann%2Fbtrfscue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcblichmann%2Fbtrfscue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcblichmann%2Fbtrfscue/lists"}