{"id":34593566,"url":"https://github.com/therealdreg/disk_fill_test","last_synced_at":"2026-05-26T22:37:58.217Z","repository":{"id":316395819,"uuid":"1063196755","full_name":"therealdreg/disk_fill_test","owner":"therealdreg","description":"CLI tool that fills a target drive with a single large file, showing live progress/ETA, then reads it back to verify data integrity via SHA-256. Reports precise write/read times and throughput, and deletes the test file by default","archived":false,"fork":false,"pushed_at":"2025-09-24T09:59:24.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-24T11:45:00.704Z","etag":null,"topics":["chatgpt","cross-platform","data-integrity","disk-fill","disk-verify","storage-benchmark","storage-test"],"latest_commit_sha":null,"homepage":"https://rootkit.es/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/therealdreg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["therealdreg"],"patreon":"dreg","custom":["https://www.paypal.me/therealdreg","https://www.paypal.me/therealdreg"]}},"created_at":"2025-09-24T09:47:49.000Z","updated_at":"2025-09-24T10:05:46.000Z","dependencies_parsed_at":"2025-09-24T11:45:02.843Z","dependency_job_id":null,"html_url":"https://github.com/therealdreg/disk_fill_test","commit_stats":null,"previous_names":["therealdreg/disk_fill_test"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/therealdreg/disk_fill_test","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/therealdreg%2Fdisk_fill_test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/therealdreg%2Fdisk_fill_test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/therealdreg%2Fdisk_fill_test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/therealdreg%2Fdisk_fill_test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/therealdreg","download_url":"https://codeload.github.com/therealdreg/disk_fill_test/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/therealdreg%2Fdisk_fill_test/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28001537,"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-12-24T02:00:07.193Z","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":["chatgpt","cross-platform","data-integrity","disk-fill","disk-verify","storage-benchmark","storage-test"],"created_at":"2025-12-24T11:17:33.282Z","updated_at":"2025-12-24T11:17:37.625Z","avatar_url":"https://github.com/therealdreg.png","language":"Python","funding_links":["https://github.com/sponsors/therealdreg","https://patreon.com/dreg","https://www.paypal.me/therealdreg"],"categories":[],"sub_categories":[],"readme":"# Disk Fill \u0026 Verify (Python) chatgpt x-)\n\nCLI utility to **saturate a target drive with one large file**, show **live progress/ETA**, then **read it back** to verify **bit-perfect integrity** via **SHA-256**. Reports precise write/read **time** and **throughput**, and deletes the test file by default (configurable with `--keep`). Cross-platform and optimized for high throughput with a producer/consumer pipeline.\n\n## Why\n\n* Practical stress test for external SSDs/HDDs, USB enclosures, SD cards, RAID/LVM volumes.\n* Detect silent corruption, flaky cables/controllers, and throttling under sustained load.\n* Get realistic throughput numbers using **random data** (avoids transparent compression).\n\n## Features\n\n* **Live progress:** percent, MiB written/read, current rate, ETA.\n* **Integrity check:** compares SHA-256 from write vs read (bit-for-bit validation).\n* **High performance:** large default block (1 GiB) + adjustable queue depth to overlap CPU/I/O.\n* **Sequential I/O hints on Windows** when available (`O_SEQUENTIAL`, `O_BINARY`).\n* **Safety:** forced flush to disk (`fsync`) on write completion.\n* **Portable:** works on Windows, macOS, and Linux.\n\n## Quick Start\n\n```bash\n# Fill E:\\, leave 512 MiB free by default, then verify and delete the file\npython disk_fill_verify.py E:\\\n\n# More aggressive settings and keep the test file\npython disk_fill_verify.py D:\\ --chunk-mib 2048 --reserve-mib 1024 --queue-depth 4 --keep\n```\n\n## CLI\n\n```text\nusage: disk_fill_verify.py target_path [--filename NAME]\n                                     [--chunk-mib N]\n                                     [--reserve-mib N]\n                                     [--queue-depth N]\n                                     [--keep]\n```\n\n| Option          | Default              | Description                                              |\n| --------------- | -------------------- | -------------------------------------------------------- |\n| `target_path`   | — (required)         | Destination directory or root (e.g., `E:\\`, `/mnt/ssd`). |\n| `--filename`    | `disk_fill_test.bin` | Output file name.                                        |\n| `--chunk-mib`   | `1024`               | I/O block size in MiB (bigger = fewer syscalls).         |\n| `--reserve-mib` | `512`                | MiB to leave free on the target volume.                  |\n| `--queue-depth` | `3`                  | Buffers in flight; increases CPU/I/O overlap.            |\n| `--keep`        | off                  | Keep the test file instead of deleting it.               |\n\n## How it works\n\n* A background producer generates random bytes (`os.urandom`) in big chunks.\n* The writer consumes those buffers, streams them sequentially to disk, and updates a running SHA-256.\n* After flushing to disk, the file is read back in the same chunk size, hashing the content again.\n* If sizes and hashes match, integrity is **OK**; otherwise, it reports **FAILED**.\n\n## Example Output\n\n```\n=== Test configuration ===\nDestination:  E:\\disk_fill_test.bin\nPlanned file size: 470,686 MiB\nI/O block:    1024 MiB\nReserve:      512 MiB\nQueue depth:  3\n==================================\nWrite:   42.13% | 198,057/470,686 MiB | 890.12 MiB/s | ETA 5m 12.34s\n...\n--- Write completed ---\nWritten: 470,686.48 MiB in 8m 49.20s (889.52 MiB/s)\nSHA-256 (write):  \u003chash\u003e\nRead :  100.00% | 470,686/470,686 MiB | 1,120.45 MiB/s | ETA 0m 00.00s\n--- Read completed ---\nRead:   470,686.48 MiB in 7m 00.10s (1,120.45 MiB/s)\nSHA-256 (read):   \u003chash\u003e\n\n✅ INTEGRITY OK\n\n=== Summary ===\nFile size:              470,686.48 MiB\nWrite time:             8m 49.20s  | 889.52 MiB/s\nRead time:              7m 00.10s  | 1,120.45 MiB/s\nIntegrity result:       OK\n```\n\n## Tips\n\n* Use a **large** `--chunk-mib` (e.g., 1024–4096) for fast SSDs.\n* Increase `--queue-depth` if CPU isn’t saturated and the device is fast.\n* Keep some reserve (`--reserve-mib`) so the system and other apps don’t run out of space.\n* On ultra-fast NVMe over USB, test different cables/ports to spot controller or PSU issues.\n\n---\n\nUse at your own risk on the **correct target path**. This tool writes a very large file and can fill the device if `--reserve-mib` is set too low.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftherealdreg%2Fdisk_fill_test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftherealdreg%2Fdisk_fill_test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftherealdreg%2Fdisk_fill_test/lists"}