{"id":51702524,"url":"https://github.com/scaleoutsean/above-and-beeond","last_synced_at":"2026-07-16T12:35:29.440Z","repository":{"id":367946778,"uuid":"1259478891","full_name":"scaleoutsean/above-and-beeond","owner":"scaleoutsean","description":"Improved BeeOND scripts for on-demand BeeGFS creation","archived":false,"fork":false,"pushed_at":"2026-06-28T13:05:57.000Z","size":26,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-07-16T12:35:28.628Z","etag":null,"topics":["beegfs","beeond","e-series","kv-cache","netapp","scratch"],"latest_commit_sha":null,"homepage":"https://scaleoutsean.github.io/2026/06/05/above-and-beeond-beeond.html","language":"Shell","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/scaleoutsean.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-04T14:49:15.000Z","updated_at":"2026-06-28T13:06:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/scaleoutsean/above-and-beeond","commit_stats":null,"previous_names":["scaleoutsean/above-and-beeond"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/scaleoutsean/above-and-beeond","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaleoutsean%2Fabove-and-beeond","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaleoutsean%2Fabove-and-beeond/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaleoutsean%2Fabove-and-beeond/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaleoutsean%2Fabove-and-beeond/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scaleoutsean","download_url":"https://codeload.github.com/scaleoutsean/above-and-beeond/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaleoutsean%2Fabove-and-beeond/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35544514,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-16T02:00:06.687Z","response_time":83,"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":["beegfs","beeond","e-series","kv-cache","netapp","scratch"],"created_at":"2026-07-16T12:35:28.479Z","updated_at":"2026-07-16T12:35:29.433Z","avatar_url":"https://github.com/scaleoutsean.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# above-and-beeond \n\n`above-and-beeond` is a modified `beeond` command that allows you to create smarter and better BeeOND clusters:\n\n- Proper segregation between data and metadata volumes\n- Proper formatting of each device type\n- Enables asymmetric BeeOND clusters\n- With minor modifications, constituent devices may be formatted with non-default filesystems\n\nAdditional features may be added, but my primary focus is NetApp E-Series-specific use cases that interest me. You're free to copy and change the code within the license (I don't mean mine, which is very permissive, but ThinkParQ's).\n\n## How to use\n\nIf your BeeGFS version is \u003e 8.3, first try the script out on a test VM to make sure it works correctly. The initial release was created from beeond in v8.3.1.\n\n- Copy the two scripts to the same directories `beeond` and `beegfs-ondemand-stoplocal` exist:\n```sh\nsudo cp ./beeond/source/above-and-beeond /usr/bin/\nsudo cp ./beeond/scripts/lib/above-and-beeond-stoplocal /opt/beegfs/lib/\n```\n- Create a config file with node names and **deterministic** device names. Example with non-deterministic device names, `ab.yaml`:\n```yaml\nnode1:\n - meta: [/dev/vdb]\n - data: [/dev/vdc,/dev/vdd]\nnode2:\n - meta: [/dev/vdc]\n - data: [/dev/vdg,/dev/vdz]\n```\n- Deploy:\n  \n```sh\nsudo above-and-beeond start -y ab.yaml -c /mnt/beeond\n```\n- End result might look like something like this (view from `node1`):\n```sh\n$ df\nFilesystem                        1K-blocks    Used Available Use% Mounted on\n/dev/vdb                            3484948  264280   2942892   9% /mnt/beeond_internal_meta_vdb\n/dev/vdc                            7798784  182516   7616268   3% /mnt/beeond_internal_data_vdc\n/dev/vdd                            7798784  182516   7616268   3% /mnt/beeond_internal_data_vdc\nbeegfs_ondemand                    31195136  182272  31195136   3% /mnt/beeond\n```\n\n- The stop command works as expected; if `-d` is passed to `above-and-beeond stop`, `wipefs` is used to nuke data on the constituent volumes\n\n## Tips for NetApp E-Series users\n\n- Create a RAID 0 disk group\n- Split disk group capacity among `N` hosts (e.g. 4 x 3.84 TB / 5 = 3.07 TB per host)\n- Leave an extra 5% for better wear-leveling (3.07 x 0.95 = 2.85 TB per host)\n- Create MD and data disks and present them individually to each host\n  - 5% for metadata - 2.85 TB x 0.05 = 140 GiB\n  - 95% for data  - 2.85 TB x 0.95 = 2.7 TiB. Split in 2 volumes x 1.35 TB\n- Re-scan and validate access. Example for RoCE/NVMe:\n\n```sh\nsudo nvme discover -t rdma -a \u003cONE_OF_SANTRICITY_PORTS\u003e\nsudo nvme connect-all -t rdma -a \u003cONE_OF_SANTRICITY_PORTS\u003e\nsudo nvme list\n```\n\n- Create a YAML file using unique device names and run `above-and-beeond`:\n```yaml\nhost1:\n  - meta: [/dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab26]\n  - data: [/dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab27, /dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab28]\nhost2:\n  - meta: [/dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab20]\n  - data: [/dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab21, /dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab22]\nhost3:\n  - meta: [/dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab23]\n  - data: [/dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab24, /dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab25]\nhost4:\n  - meta: [/dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab11]\n  - data: [/dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab12, /dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab13]\nhost5:\n  - meta: [/dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab14]\n  - data: [/dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab15, /dev/disk/by-id/scsi-3600605b00f3eb5202516998299f4ab16]  \n```\n\n```sh\n# vim ab.yaml\nsudo above-and-beeond start -y ab.yaml -c /mnt/beeond\n# sudo beegfs license --get  --tls-disable --mgmtd-addr h2:9008 --auth-disable # make sure the port is right\n\n# sudo above-and-beeond stop -y ab.yaml\n```\n\n`above-and-beeond stop` unmounts disks, but just like `beeond stop` it takes `-d` to wipe data. \n\nThis workflow can be easily automated with my SANtricity client libraries (Go, Python, PowerShell) or Terraform Provider for SANtricity.\n\n## Performance notes\n\nMy primary use case is read-caching. In casual testing (10-20 runs), BeeOND with RAID 0 performs very well (both read performance and latency), as I recommend it for environments where short downtime in case of a disk failure is tolerable (have a spare disk ready and in the chassis - it takes 30 seconds to replace a failed disk and can even be automated). On RAID 0 disk groups, I set volume segment size for MD volumes to 32 KiB and for data disk volumes to whatever matches my workload (example: 512 KiB for sequential).\n\nUse RAID 10 disk groups if you downtime (or data loss) prevention can justify additional resources. Have a \"global\" hot spare assigned.\n\n## BeeGFS notes\n\nAfter running one of the tests I noticed uneven utilization of data disks. I did not investigate since the cluster was already destroyed, but you may want to pay attention to this if you use multi-disk nodes.\n\n## License\n\n- See LICENSE.txt for original (upstream) `beeond` scripts\n- New code added in this repository: the MIT License (c) github.com/scaleoutsean, 2026\n- Documentation: CC BY 4.0, https://scaleoutsean.github.io\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscaleoutsean%2Fabove-and-beeond","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscaleoutsean%2Fabove-and-beeond","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscaleoutsean%2Fabove-and-beeond/lists"}