{"id":13409243,"url":"https://github.com/meln1k/foundationdb-block-device","last_synced_at":"2025-07-31T02:06:28.666Z","repository":{"id":41055409,"uuid":"167712137","full_name":"meln1k/foundationdb-block-device","owner":"meln1k","description":"Replicated Block Device backed by FoundationDB","archived":false,"fork":false,"pushed_at":"2021-12-16T15:39:57.000Z","size":136,"stargazers_count":39,"open_issues_count":0,"forks_count":7,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-04T09:03:40.119Z","etag":null,"topics":["blockdevice","foundationdb","software-defined-storage","storage"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/meln1k.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}},"created_at":"2019-01-26T16:40:38.000Z","updated_at":"2025-03-30T00:45:22.000Z","dependencies_parsed_at":"2022-09-21T06:20:25.064Z","dependency_job_id":null,"html_url":"https://github.com/meln1k/foundationdb-block-device","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/meln1k/foundationdb-block-device","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meln1k%2Ffoundationdb-block-device","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meln1k%2Ffoundationdb-block-device/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meln1k%2Ffoundationdb-block-device/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meln1k%2Ffoundationdb-block-device/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/meln1k","download_url":"https://codeload.github.com/meln1k/foundationdb-block-device/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meln1k%2Ffoundationdb-block-device/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267975817,"owners_count":24174799,"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-07-31T02:00:08.723Z","response_time":66,"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":["blockdevice","foundationdb","software-defined-storage","storage"],"created_at":"2024-07-30T20:00:59.183Z","updated_at":"2025-07-31T02:06:28.634Z","avatar_url":"https://github.com/meln1k.png","language":"Go","funding_links":[],"categories":["Layers"],"sub_categories":[],"readme":"# FoundationDB Block Device\nReplicated Block Device backed by FoundationDB\n\n## What is this\nThis is an implementation of a block device in userspace which uses FoundationDB as a backend.\nIt provides a replicated block device for non-replicated workloads so they \ncan benefit from transparent block-level replication and enhanced fault tolerance.\n\nInspired by [spullara/nbd](https://github.com/spullara/nbd)\n\n## Is it fast?\nI did a small benchmark using a FoundationDB cluster of 2 nodes (linux running on macbooks with SSDs, \nnot tuned for FDB at all).\nFIO benchmark on 1GB file resulted in 10K random read/write IOPS in 4KB blocks and the latency was below 10ms (direct io was used).\nWhile doing sequential reads it was able to saturate 1Gbit network link.\n\nPostrgres running in virtualbox showed 900 TPS on TPC-B pgbench workload with a database of size 1g.\n\n## How does it work with concurrent volume mounts?\nCurrently there is a mechanism which relies on lease tokens and fdb transactions to transactionally\ntransfer ownership to the new client and discard any in-flight write requests from the old one.\n\n## Current status\nIt's an early version. There are several important featues which are not implemented yet \n(such as IOPS limits and volume size estimation) but it works and it's relatively fast!\n\n## How to use\nCommands are documented in the CLI:\n```\n$ ./fdbbd --help\nNAME:\n   fdbbd - block device using FoundationDB as a backend. \n   Our motto: still more performant and reliable than EBS\n\nUSAGE:\n   fdbbd [global options] command [command options] [arguments...]\n\nVERSION:\n   0.1.0\n\nCOMMANDS:\n     create   Create a new volume\n     list     List all volumes\n     attach   Attach the volume\n     delete   Delete the volume\n     help, h  Shows a list of commands or help for one command\n\nGLOBAL OPTIONS:\n   --help, -h     show help\n   --version, -v  print the version\n```\n\n## Getting started\n\n1. Set up a FoundationDB cluster.\n2. Build the driver: \n```sh\nsh build.sh\n```\n3. Create a new volume:\n```sh\n$ ./fdbbd create --size 1GB myvolume\n```\n4. If `nbd` kernel module is not loaded, load it:\n```sh\n$ sudo modprobe nbd\n```\n5. Attach the volume to the system:\n```sh\nsudo ./fdbbd attach --bpt 4 myvolume /dev/nbd0\n```\n6. Create a directory to mount the volume:\n```sh\nmkdir nbdmount\n```\n7. Create a file system on your block device. XFS is a good option:\n```sh\nsudo mkfs.xfs /dev/nbd0\n```\n8. Mount the attached volume:\n```sh\nsudo mount /dev/nbd0 nbdmount/\n```\n9. Done! You have a replicated volume!\n\n## What's inside\nThis project uses Network Block Device kernel module underneath. A unix pipe is used to talk to a kernel,\nand then driver translates NBD protocol into FoundationDB calls.\n\n## Roadmap\nThere are a few features planned in future releases, ordered by importance:\n\n1. Bulk insert support via batch transactions\n2. IOPS isolation\n3. CSI implementation\n4. Snapshots\n5. Volume size estimation (using roaring bitmaps or similar)\n6. Client-side encryption\n7. Control panel\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeln1k%2Ffoundationdb-block-device","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmeln1k%2Ffoundationdb-block-device","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeln1k%2Ffoundationdb-block-device/lists"}