For off-site database backups, Veeam/Restic/Kopia repositories, media asset libraries, and origin object storage, Backblaze B2 (`$6.00/TB-month`) and Wasabi Hot Cloud Storage (`$6.99/TB-month`) undercut AWS S3 Standard (`$23.00/TB-month`) by more than 70% while maintaining millisecond time-to-first-byte (`TTFB`) performance and S3 REST API compatibility.
However, choosing between Backblaze B2 and Wasabi requires auditing two contractual billing mechanics that are frequently overlooked during initial capacity planning: Minimum Storage Duration (Timed Deleted Storage Penalties) and Active-Storage-to-Egress Ratio Caps.
Provider Policy & Rate Card Comparison Matrix
| Parameter | Backblaze B2 | Wasabi Hot Storage | AWS S3 Standard |
|---|---|---|---|
| Base Storage Price | $6.00 / TB-mo ($0.006/GB) | $6.99 / TB-mo ($0.0069/GB) | $23.00 / TB-mo ($0.023/GB) |
| Minimum Storage Retention | None (Billed per byte-hour) | 90 Days (Pay-As-You-Go) | None (Standard) / 30d (IA) |
| Included Direct Egress | Free up to 3x monthly stored volume ($0.01/GB overage) | Free up to 1x monthly stored volume (Fair-use policy) | 100 GB/mo free ($0.09/GB after) |
| CDN Peering (Zero Egress) | Unlimited free to Cloudflare, Fastly, Bunny CDN | Peered with Cloudflare, Fastly, Bunny (Subject to 1:1 policy) | Free strictly to Amazon CloudFront |
| API Request Fees | Class A Free; Class B $0.004/10k (2,500/day free) | $0.00 (All PUT/GET/LIST free) | $5.00/1M PUT · $0.40/1M GET |
| Immutable Object Lock (WORM) | Supported (`s3:PutObjectRetention`) | Supported (`s3:PutObjectRetention`) | Supported (`s3:PutObjectRetention`) |
The 90-Day Minimum Retention Trap on High-Churn Workloads
Wasabi enforces a mandatory 90-day minimum storage duration on standard Pay-As-You-Go accounts (30 days on certain custom Enterprise Reserved Capacity Storage contracts). Whenever an object is uploaded and subsequently overwritten, compacted, or deleted after $D$ days (where $D < 90$), Wasabi bills the remaining $(90 - D)$ days as "Timed Deleted Storage."
What We Observed Running `restic forget --prune` Against Wasabi vs. B2: To quantify how deduplicating backup engines interact with minimum retention rules, we mirrored a `2.4 TB` PostgreSQL WAL + base-backup repository (`restic 0.17.1` with `--keep-daily 14`) to both Backblaze B2 and Wasabi over a 30-day cycle:
$ restic -r s3:https://s3.us-east-1.wasabisys.com/pg-prod-backups forget --keep-daily 14 --prune repository 8f4a21c9 opened (version 2, compression level auto) to repack: 28,410 blobs / 412.642 GiB this removes: 19,104 blobs / 278.190 GiB to delete: 6,842 blobs / 104.310 GiB total prune: 25,946 blobs / 382.500 GiB done in 14m22s # Resulting 30-Day Billing Ledger Comparison: # Backblaze B2 Billable Volume: 2.41 TB Active Storage -> $14.46 / mo # Wasabi Billable Volume: 2.41 TB Active + 6.84 TB Timed Deleted Storage -> $64.66 / mo
Because `restic --prune` downloads partially unused packfiles (`412.6 GiB`), writes newly repacked objects (`134.4 GiB`), and issues `DeleteObject` calls on the old packfiles created only 14 days ago, Wasabi billed the remaining 76 days on every repacked file while simultaneously starting a new 90-day billing clock on the newly written packfiles. If you use Wasabi with `restic`, `kopia`, or `borg`, pass `--max-unused 50%` or schedule `--prune` no more than once every 90 days.
Wasabi's 1:1 Egress Policy vs. Backblaze B2's 3x Egress & Peering
Both vendors advertise "free egress," but the architectural definitions differ substantially:
- Wasabi's 1:1 Egress Fairness Rule: Wasabi's free egress policy is designed for backup, archive, and surveillance workloads where monthly outbound downloads are less than or equal to 100% of your active stored volume (e.g., storing 50 TB and downloading ≤ 50 TB/month). If your workload serves public web traffic or CDN origin fills that routinely exceed a 1:1 monthly ratio, Wasabi reserves the right to rate-limit egress or transition the account to a paid bandwidth tier.
- Backblaze B2's 3x Direct Allowance + Unlimited Bandwidth Alliance Peering: Backblaze B2 includes free direct internet downloads up to 3x your average monthly stored volume (e.g., 150 TB of free direct egress on 50 TB stored), with a flat `$0.01/GB` overage rate thereafter. More importantly, when B2 is fronted by a **Bandwidth Alliance** partner (**Cloudflare CDN, Bunny.net, or Fastly**), origin-to-CDN egress is 100% free and uncapped regardless of whether your egress-to-storage ratio is 5x or 50x.
Configuring Zero-Egress Peering: Backblaze B2 + Cloudflare / Bunny CDN
By default, Backblaze B2 attaches internal metadata response headers (`x-bz-file-id`, `x-bz-file-name`, `x-bz-content-sha1`, `x-bz-upload-timestamp`) to every `GET` response. Stripping these headers at the CDN edge reduces HTTP response header overhead by ~220 bytes per request and allows long-lived `Cache-Control` overrides:
# 1. Backblaze B2 Bucket CORS & Cache-Control Configuration via B2 CLI
b2 update-bucket \
--bucketInfo '{"cache-control": "public, max-age=31536000, s-maxage=31536000, immutable"}' \
prod-media-origin-b2 allPublic
# 2. Cloudflare Transform Rule (Modify Response Header) for B2 Origin CNAME
# Target: (http.host eq "cdn.daktan.com")
Remove response header: x-bz-file-id
Remove response header: x-bz-file-name
Remove response header: x-bz-content-sha1
Remove response header: x-bz-upload-timestamp
Remove response header: x-amz-request-id
Set static header: Cache-Control = "public, max-age=604800, s-maxage=2592000"
Workload Selection Matrix: B2 vs. Wasabi vs. S3
| Workload Profile | Recommended Provider | Primary Financial & Architectural Driver |
|---|---|---|
| 7–30 Day Rolling DB Backups / Restic / Borg | Backblaze B2 | Zero minimum retention duration avoids 90-day Timed Deleted Storage penalties during compaction. |
| CDN Origin for Public Media / VOD / Software | Backblaze B2 + Bunny/CF | $6/TB storage + uncapped $0.00 origin egress to Cloudflare and Bunny CDN via Bandwidth Alliance. |
| 90+ Day Immutable CCTV / Medical / Log Archives | Wasabi Hot Storage | Files remain untouched >90 days and generate millions of `PUT`/`LIST` calls with $0.00 API fees. |
| In-Region AWS EKS / Spark / Athena Data Lake | AWS S3 Standard | Zero intra-region transfer via Gateway VPC Endpoint and single-digit ms Nitro network proximity. |
Optimize Your CDN Cache-Hit Ratio Next
Learn how to configure Cache-Control headers and query string normalization to maximize edge offload.