Object Storage FAQ
Object storage FAQ
Frequently asked questions about Quake AI Object Storage. For core concepts, see the Object Storage overview and concepts page. For step-by-step instructions, see the how-to guides. For moving data from another provider, see the migration guides.
Getting started#
What is Quake AI Object Storage, and what is it backed by?
Quake AI Object Storage provides S3-compatible storage for unstructured data: files, backups, media, archives, data lakes, and static assets. It is backed by OpenStack Swift with a Ceph storage backend. The platform exposes both the native Swift API and an S3-compatible API. Data is replicated across multiple storage nodes automatically; you do not manage RAID arrays or backup jobs for durability.
Each dedicated vCPU subscription does not include a bundled object-storage allotment on the current named packs. Object storage is a per-TB add-on. See Resource tiers and the pricing reference.
Source: Object Storage concepts
What is a bucket, and how does it differ from a "container"?
They are the same thing. In OpenStack Swift terminology, the top-level namespace for objects is called a container. Quake AI uses bucket as the primary user-facing term, matching the S3 vocabulary your tools already expect. If you see "container" in API responses, CLI output, or Swift documentation, it refers to the same concept. Neither term means a Docker container.
Source: Object Storage concepts: Buckets and containers callout
What S3 tools and SDKs work with Quake AI?
Any S3-compatible client works once you point it at the Quake AI endpoint and supply an S3 credential pair. Confirmed working tools:
- AWS CLI: pass
--endpoint-url https://object.<region>.rumble.cloudon every command; set the region tous-east-1for SigV4 signing regardless of your Quake AI region. - s3cmd: configure
host_baseandhost_bucketin~/.s3cfg; a pre-filled.cfgfile is available when you create credentials in the console. - rclone: configure a remote with
type = s3,provider = Ceph, and your region endpoint. - MinIO Client (
mc):mc alias set rumble https://object.<region>.rumble.cloud ... - boto3 (Python): pass
endpoint_urltoboto3.client("s3", ...). - restic: use the S3 backend pointed at the Quake AI endpoint.
S3 credentials (access key + secret key) are separate from OpenStack application credentials. Generate them via API > S3 Credentials in the console or with openstack ec2 credentials create.
Source: Create S3 credentials, Migration tools comparison, Object Storage concepts: S3 API compatibility
What is the S3-compatible endpoint hostname?
The S3-compatible endpoint hostname uses the object. prefix in each region:
| Region | S3 endpoint |
|---|---|
| us-east-1 | https://object.us-east-1.rumble.cloud |
| us-east-2 | https://object.us-east-2.rumble.cloud |
| us-west-1 | https://object.us-west-1.rumble.cloud |
Use the same hostname for the AWS CLI (--endpoint-url), boto3 (endpoint_url), rclone (endpoint), and any other S3 client. When signing requests with SigV4, set the region to us-east-1 regardless of which Quake AI region you target.
Common mistake from AWS migrators: trying s3.<region>.rumble.cloud. That hostname returns DNS NXDOMAIN. The platform's S3 gateway answers only on object.<region>.rumble.cloud.
Source: Mount S3 storage: Endpoints table, Create S3 credentials
Which S3 features does Quake AI Object Storage support?
Core S3 operations:
| Feature | Notes |
|---|---|
| PUT / GET / DELETE objects | Standard S3 operations via SigV4 signing |
| Multipart uploads | Initiate, upload parts, complete, abort |
| Bucket and object ACLs | GET / PUT ACL on buckets and objects |
| Object versioning | Enable, suspend, list versions, delete markers |
| Server-side encryption | SSE-C (customer-provided) and SSE-OMK (platform-managed) |
| Object tagging | GET / PUT / DELETE object tags |
| Server-side copy | Within the same endpoint |
| Presigned URLs | Time-limited download/upload via SigV4 |
| CORS configuration | Per-bucket CORS rules |
| Batch delete | Multiple objects in a single request |
Design alternatives:
| Feature | Alternative |
|---|---|
| Lifecycle policies (transition/expiration) | Use rclone delete --min-age on a cron schedule |
| Event notifications (SNS/SQS/Lambda) | Poll with rclone check --one-way or handle at the application layer |
| Bucket policies (JSON policy documents) | Use Swift container ACLs (X-Container-Read) or S3 ACLs |
| Storage classes (Standard/IA/Glacier) | All data is stored on a single tier |
| Static website hosting | Front your bucket with Nginx or Caddy on a Quake AI VM |
| S3 Select | Download objects and query locally |
| Object Lock / WORM | Contact Quake AI support for compliance workloads |
Source: Plan your migration: S3 feature compatibility
Core concepts#
How is object storage different from block storage? When should I use each?
| Object storage | Block storage (volumes) | |
|---|---|---|
| Access model | HTTP S3/Swift API | Block device mounted to one instance |
| Best for | Backups, media, static assets, data lakes, archives | Databases, application state, OS disks |
| Scalability | Petabyte-scale, no filesystem limits | 1 GiB–29,800 GiB per volume |
| Performance | High throughput for large sequential reads/writes | Low-latency random I/O |
| Sharing | Accessible from anywhere with credentials | Attached to one instance at a time |
| Modification | Immutable (overwrite or version) | In-place reads and writes |
Use object storage when your application treats files as whole units (upload once, read many times). Use block storage when your application needs a filesystem with random read/write access, such as a database or OS disk.
Source: Object Storage concepts: When to use object storage
How does versioning work, and what are the key behaviors?
Versioning keeps every version of every object in a bucket. When you overwrite or delete an object, the previous version is retained. You can list, retrieve, or restore any historical version via the S3 API.
Key behaviors to know before enabling:
- Each object version counts against your storage quota.
- Deleting an object in a versioned bucket adds a delete marker; the object still exists in previous versions.
- Once enabled, versioning can only be suspended, not removed.
- The Quake AI console shows only the current version; all versions are visible via S3 API calls.
- Versioning is configured via the S3-compatible API, there is no versioning toggle in the console.
Enable versioning with s3cmd setversioning s3://my-bucket enable or aws s3api put-bucket-versioning --bucket my-bucket --versioning-configuration Status=Enabled --endpoint-url "https://object.us-east-1.rumble.cloud".
Source: Enable versioning
How does server-side encryption work? What are SSE-C and SSE-OMK?
Quake AI offers two server-side encryption modes. Both use AES-256 and encrypt only object data, not object metadata.
-
SSE-C (customer-provided keys): You supply a 256-bit Base64-encoded key with each upload and download request. Quake AI never stores your key; it applies encryption on write and removes the key from memory. HTTPS is mandatory. If you lose the key, the object is permanently unrecoverable. Use SSE-C when compliance requires you to maintain exclusive control of encryption keys.
-
SSE-OMK (object management keys): Quake AI manages the encryption keys. Each object is encrypted with a unique key; the key itself is encrypted with a root key that Quake AI rotates on a schedule. No special headers are required on download. Use SSE-OMK for simplicity when key management is not a compliance requirement.
You can configure a bucket to apply SSE-OMK automatically to all new objects using aws s3api put-bucket-encryption.
Source: Server-side encryption: SSE-C and SSE-OMK
How does CORS work for buckets, and what are the common mistakes?
CORS (Cross-Origin Resource Sharing) lets browser scripts on one origin access objects on your Quake AI bucket from another origin. Configure per-bucket CORS rules as a JSON policy (AWS CLI) or XML (s3cmd).
Apply a CORS policy:
# AWS CLI (JSON)
aws s3api put-bucket-cors --bucket your-bucket \
--cors-configuration file://cors.json
# s3cmd (XML only)
s3cmd setcors /path/to/cors.xml s3://your-bucketQuake AI-specific pitfall: CORS preflight requests are not authenticated. You must include the tenant ID in the URL provided to browsers for each resource:
https://object.<region>.rumble.cloud/<tenant_id>:bucket/<object>For example: https://object.us-east-2.rumble.cloud/gT2jQ9uX8pA4vY7fH3kL6dN5mB1rC:bucket/image.jpg
Common mistakes: using a wildcard * for AllowedOrigins, forgetting to account for preflight OPTIONS requests, omitting custom headers from AllowedHeaders, and specifying the wrong protocol or port in origins.
Source: CORS setup
Can I mount object storage as a local drive or filesystem?
Yes. The recommended tool is rclone, which is cross-platform (Windows, macOS, Linux), open source, and actively maintained.
| Client | Platforms | Notes |
|---|---|---|
| rclone | All | Recommended; CLI mount and NFS mount |
| Cyberduck | Windows, macOS | Free GUI; pre-built Quake AI profiles available |
| s3fs | Linux, macOS | FUSE-based |
Configure rclone with type = s3, provider = Ceph, and your region endpoint, then run rclone mount quakeai:my-bucket/ /mnt/s3bucket.
Important: Only allow one system to mount a bucket as writable at a time. Concurrent writes from multiple systems can cause data loss (last writer wins). Enable versioning as a safety net if multiple systems need write access.
Source: Mount S3 storage
How do I access object storage over FTP, FTPS, or SFTP?
Object storage does not expose FTP/SFTP natively. The supported path is to set up a gateway VM that mounts your bucket using s3fs and then runs an FTP/SFTP server on top of that mount.
The recommended approach uses an Ubuntu 24.04 VM with s3fs to mount the bucket at /opt/s3storage, then exposes the mount over SFTP (which works without extra configuration on Ubuntu), FTPS (via vsftpd with SSL), or FTP (via vsftpd, but only within a private VPC: FTP sends passwords in plaintext).
Quake AI strongly recommends SFTP or direct S3 for internet-facing transfers. FTP should only be used on private VPC networks. For Windows or other OS-based gateways, rclone mount works identically.
Source: FTP, FTPS, and SFTP access
Access control policies#
How do I make a bucket publicly readable?
Apply a public-read policy using the S3-compatible API. The simplest policy grants s3:GetObject to Principal: "*" (all users):
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "PublicReadGetObject",
"Principal": "*",
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3::$tenant:$bucket/*"]
}]
}Replace $tenant with your project name and $bucket with the bucket name. Apply with s3cmd setpolicy policy.json s3://my-bucket or aws s3api put-bucket-policy --bucket my-bucket --policy file://policy.json --endpoint-url "https://object.us-east-1.rumble.cloud". You can also toggle public access in the console under Storage > Object Storage > Edit Container.
Source: Public read policy example, Grant access control
Why does my public bucket URL return 404 from the browser after I apply a public-read policy?
Anonymous URLs on the Quake AI S3 gateway require a tenant prefix in the path. Without it the gateway returns 404 Not Found even when the bucket policy grants public read.
The URL pattern is:
https://object.<region>.rumble.cloud/<tenant_id>:<bucket>/<key>For example, with a project ID of gT2jQ9uX8pA4vY7fH3kL6dN5mB1rC and a bucket named assets:
https://object.us-east-1.rumble.cloud/gT2jQ9uX8pA4vY7fH3kL6dN5mB1rC:assets/logo.pngFind your tenant ID with openstack token issue -f value -c project_id or in the Quake AI portal under the project's settings. The bucket-policy ARN format (arn:aws:s3::<tenant>:<bucket>) already encodes the tenant; the URL the browser fetches must match that scope at the path level. The same prefix applies to CORS preflight requests; see CORS setup for the cross-origin specifics.
Source: Public read policy example, Create S3 credentials, CORS setup
How do I make a bucket read-only for a specific user?
Use a read-only policy that explicitly allows s3:GetObject and s3:ListBucket, and denies all write and delete actions for the specified user. The policy references the user as an ARN in the form arn:aws:iam::$tenant:user/$user.
Warning: The strict read-only policy (read-only-policy.mdx) locks out write access so strongly that the policy itself cannot be removed without admin assistance. If you need the ability to self-revert the policy later, use the user-reversible read-only policy instead, which additionally grants s3:DeleteBucketPolicy and s3:PutBucketPolicy to the named user.
Remove any lifecycle policies before applying either read-only variant.
Source: Read-only policy example, User reversible read-only policy example
How do I restrict bucket access to specific IP addresses?
Use an IP whitelist (source IP) policy with the aws:SourceIp condition. Two variants are available:
- Block all access except from a known IP: uses
Effect: DenywithNotIpAddresscondition onPrincipal: "*". - Allow public read only from a known IP: uses
Effect: AllowwithIpAddresscondition ons3:GetObjectforPrincipal: "*".
Both use a CIDR block (e.g., 1.2.3.4/32 for a single IP). The Resource array covers both the bucket and its objects (arn:aws:s3:::YourBucket and arn:aws:s3:::YourBucket/*).
Source: IP whitelist policy example
How do I allow public read on a bucket but restrict access beyond that?
Use the restricted public read policy, which grants s3:GetObject to Principal: "*" on all objects in the bucket, but does not grant s3:ListBucket. This lets anyone who knows an object's URL download it, while preventing enumeration of bucket contents.
The policy structure is identical to the public-read policy but intentionally omits ListBucket:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "PublicReadGetObject",
"Principal": "*",
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3::$tenant:$bucket/*"]
}]
}For even finer-grained control (granting different permissions to different users), use the grant-access-control how-to, which shows a multi-statement policy granting read/write to one user and read-only to another.
Source: Restricted public read policy example, Grant access control
Where do I set CORS rules, lifecycle policies, or bucket policies in the Console?
The Console exposes only basic bucket operations (create, delete, public-access toggle, file browse, upload, download). CORS configuration, JSON bucket policies, versioning, and per-user access grants live on the S3-compatible API; configure them with aws s3api, s3cmd, or another S3 client.
Available in the Console:
- Create and delete buckets
- Toggle the bucket's Public Access flag at create time or via the row's Update Access action
- Browse, upload, and download objects inside a bucket
- Delete individual objects from a bucket
Requires the S3 API or CLI:
| Operation | Command |
|---|---|
| CORS rules | aws s3api put-bucket-cors |
| JSON bucket policies (public-read, IP whitelist, read-only) | aws s3api put-bucket-policy |
| Versioning | aws s3api put-bucket-versioning |
| Server-side encryption configuration | aws s3api put-bucket-encryption |
| Multi-user access grants | See Grant access control |
Quake AI Object Storage does not implement lifecycle rules (object transition and expiration) on any surface. Implement retention with rclone delete --min-age on a schedule. The full design-alternatives table sits in the "Which S3 features does Quake AI Object Storage support?" entry above.
Source: Grant access control, CORS setup, Public read policy example
Operations and troubleshooting#
Why do Object Storage API curl examples fail before the first request?
Application-credential openrc files do not export the token or protocol-specific URLs that Swift and S3 API examples use. Export them in the same shell before you run curl:
export OS_TOKEN="$(openstack token issue -f value -c id)"
export OS_PROJECT_ID="$(openstack token issue -f value -c project_id)"
export OS_SWIFT_S3_URL="https://object.${OS_REGION_NAME}.rumble.cloud"
export OS_SWIFT_URL="${OS_SWIFT_S3_URL}/swift/v1/AUTH_${OS_PROJECT_ID}"On macOS, avoid bare swift post in tutorials: the system Swift compiler shares that command name. Prefer the curl API paths in the how-to guides or run OpenStack CLI commands from a Linux shell.
Source: Upload a file, Service endpoints
Why am I getting a 403 or 401 error when calling the S3 API?
The quick triage table from the access runbook:
| Symptom | Most likely cause |
|---|---|
InvalidAccessKeyId | EC2 credentials do not exist or wrong project scope |
SignatureDoesNotMatch | Wrong region in SigV4, clock skew, or wrong endpoint |
Access Denied | Correct credentials but wrong project, or container ACL blocks access |
The most important distinction: EC2 (S3) credentials and OpenStack application credentials are different. Application credentials authenticate the OpenStack API; they do not work as S3 access keys. You must create EC2 credentials for S3 access via openstack ec2 credentials create.
EC2 credentials are project-scoped: a key from one project cannot access buckets in another project.
SigV4 signing: always set the S3 region to us-east-1 regardless of which Quake AI region you use. Wrong region produces SignatureDoesNotMatch even when the key pair is valid.
Resolution steps:
openstack ec2 credentials list, confirm credentials exist with the correctproject_id.- If none exist:
openstack ec2 credentials create. - Set the region to
us-east-1in your S3 client config. - Set the endpoint from an environment variable; do not hardcode it.
- Test:
aws s3 ls --endpoint-url "${YOUR_ENDPOINT}". - If
SignatureDoesNotMatchpersists after verifying region and endpoint, regenerate credentials.
Escalate if regenerated credentials with correct project and verified SigV4 settings still return 401/403, or if multiple projects fail simultaneously (possible platform identity or gateway issue).
Source: Object storage access troubleshooting, Create S3 credentials
Why do large file uploads fail, and how do I fix it?
Objects larger than 5 GB require multipart upload. Common failure modes:
| Symptom | Cause |
|---|---|
EntityTooLarge | Single-part upload attempted on an object > 5 GB |
| Transfer stalls or times out | Network timeout during part upload, or stale incomplete multipart upload |
| Errors on objects > a certain size | Swift S3 gateway segment size limits differ from AWS S3's 5 GB per-part maximum |
Resolution:
For AWS CLI, multipart kicks in automatically for objects larger than 8 MB. Confirm it is working with --debug. For boto3, set TransferConfig(multipart_threshold=8 * 1024 * 1024, multipart_chunksize=16 * 1024 * 1024) explicitly.
List and abort stale multipart uploads:
aws s3api list-multipart-uploads --bucket YOUR_BUCKET --endpoint-url "${YOUR_ENDPOINT}"
aws s3api abort-multipart-upload --bucket YOUR_BUCKET --key YOUR_KEY \
--upload-id YOUR_UPLOAD_ID --endpoint-url "${YOUR_ENDPOINT}"For large or resumable transfers, rclone is the recommended tool. It handles multipart and retries automatically. For objects well above 50 GB, split into smaller objects or use a dedicated bulk transfer tool.
Source: Object storage access troubleshooting: Large file upload failure
Migration#
Which migration tool should I use?
Five tools cover the common migration and backup scenarios. Choose based on your primary requirement:
| Scenario | Recommended tool | Why |
|---|---|---|
| Full migration from another S3-compatible provider | rclone | Direct cloud-to-cloud, no local staging, parallel transfers, checksum verification |
| Custom metadata must be preserved | MinIO Client (mc) | Only tool that copies x-amz-meta-* headers between providers |
| Encrypted, deduplicated backups | restic | Built-in AES-256 encryption, content-defined chunking, retention policies |
| AWS-centric workflow | AWS CLI | Familiar, but requires local staging for cross-provider transfers |
| Simple file-level backup | rclone | rclone copy with cron: reliable, cross-platform |
Neither rclone, the AWS CLI, nor s3cmd preserves custom x-amz-meta-* metadata during cross-provider copies. Use MinIO Client if metadata must survive the transfer.
Source: Migration tools comparison, Plan your migration
What is the recommended path to migrate from AWS S3?
AWS offers free data transfer out when migrating away, so there are no egress fees for this path.
The recommended tool is rclone, which copies directly between endpoints without local staging. Configure both AWS and Quake AI as rclone remotes, then:
- Run an initial
rclone copy aws:my-source-bucket quakeai:my-bucket(usecopy, notsync, for the initial pass, safer, no deletions). - Schedule daily
rclone syncdelta passes until you are ready to cut over. - On cutover: run a final
rclone sync, update your application's S3 endpoint, keep the AWS source for 30 days as a rollback target.
Features that do not transfer and need remediation before migrating: lifecycle policies, event notifications, S3-format JSON bucket policies, and S3 Replication rules. All objects land on a single storage tier on Quake AI (no storage class transitions needed).
If objects have custom x-amz-meta-* headers, use MinIO Client's mc mirror instead of rclone.
Source: Migrate from AWS S3, Coming from AWS: Object storage
What is the recommended path to migrate from Google Cloud Storage?
Use rclone with a GCS service account JSON key file. Configure the GCS remote with type = google cloud storage and the Quake AI remote with type = s3, provider = Ceph.
GCS-specific considerations:
- Egress cost: GCS charges per-GB egress and does not run a free migration program. Confirm current rates on the Google Cloud Storage pricing page.
- Storage classes: Objects in Nearline, Coldline, or Archive have minimum storage duration charges (30, 90, and 365 days). Deleting them before the minimum incurs an early deletion fee.
- IAM permissions: GCS IAM roles do not translate to Swift ACLs. Re-apply access controls on Quake AI after migration.
- Lifecycle rules: Not supported on Quake AI; implement retention with
rclone delete --min-age.
Source: Migrate from Google Cloud Storage
What is the recommended path to migrate from Azure Blob Storage?
Use rclone with an Azure SAS token or service principal. Configure the Azure remote with type = azureblob.
Azure-specific considerations:
- Egress cost: Azure charges per-GB egress and does not run a free migration program. Confirm current rates on the Azure bandwidth pricing page.
- Archive tier: objects in Azure Archive must be rehydrated before copying (up to 15 hours, per-GB fee).
- Access tiers: Hot, Cool, Cold, and Archive all land on a single tier on Quake AI.
- RBAC/ABAC: Azure Entra ID policies do not translate to Swift ACLs. Re-apply access controls using the Quake AI grant-access-control how-to.
- Lifecycle policies: not supported on Quake AI; implement with external tooling.
Note: In Azure terminology, "containers" hold "blobs." On Quake AI, "buckets" (also called containers) hold "objects." The rclone config calls the Azure side azure:my-source-container.
Source: Migrate from Azure Blob Storage
What is the recommended path to migrate from Backblaze B2?
B2 supports both its native API and an S3-compatible API; rclone handles both with direct cloud-to-cloud transfer.
Use the B2-native rclone remote (type = b2) for the source. It has faster listing operations than B2's S3-compatible endpoint.
B2-specific considerations:
- Egress: B2 charges per-GB for direct egress. Via the Cloudflare Bandwidth Alliance, egress is free up to 3× your stored data per day, so a Cloudflare-fronted bucket migrates without egress charges. Confirm current rates on the Backblaze B2 pricing page.
- File caps: B2 allows up to 10 million files per bucket; plan parallel transfers and checkpoint progress near this limit.
- Lifecycle rules: do not transfer; implement retention with
rclone delete --min-age.
Source: Migrate from Backblaze B2
What is the recommended path to migrate from Wasabi?
Both Wasabi and Quake AI use S3-compatible APIs, so rclone copies directly without local staging. Configure a Wasabi remote with type = s3, provider = Wasabi and the region-specific endpoint.
Wasabi-specific considerations:
- Egress: Wasabi does not charge for egress, provided your egress stays below your total stored data volume. Migrate while data is still stored on Wasabi.
- 90-day minimum storage: Wasabi bills each object for at least 90 days. Deleting after migration may not immediately save money. Keep the Wasabi source for at least 90 days; if objects are already past the minimum, a 30-day holdover is sufficient.
Source: Migrate from Wasabi
What is the recommended path to migrate from Hetzner Object Storage?
Both Hetzner Object Storage and Quake AI use S3-compatible APIs backed by Ceph, making this one of the simplest migration paths. Configure an rclone remote with type = s3, provider = Other and the Hetzner region endpoint (fsn1, nbg1, or hel1).
Hetzner-specific considerations:
- No egress fees: outbound transfer is included in the Hetzner plan.
- Custom metadata: rclone and s3cmd do not preserve
x-amz-meta-*headers during cross-provider copies. Use MinIO Client if metadata must be preserved. - 100-bucket limit: Hetzner limits accounts to 100 buckets; Quake AI does not impose a hard bucket limit.
Source: Migrate from Hetzner Object Storage
What is the recommended path to migrate from DigitalOcean Spaces?
DigitalOcean Spaces and Quake AI both use S3-compatible APIs. Configure an rclone remote with type = s3, provider = DigitalOcean and the Spaces endpoint for your region (nyc3, sfo3, ams3, etc.).
DigitalOcean-specific considerations:
- Egress: DigitalOcean includes a per-subscription outbound transfer allowance for Spaces and charges per-GiB for overage. Confirm current allowances and rates on the DigitalOcean Spaces pricing page.
- CDN: the built-in Spaces CDN is not available on Quake AI. Front your Quake AI bucket with Cloudflare or CloudFront after migration.
- Billing: Spaces billing ends only when all Spaces are deleted. Delete Spaces after the 30-day holdover period to stop charges.
- Terminology: DO calls each bucket a "Space." The rclone workflow is identical to any S3-compatible source.
Source: Migrate from DigitalOcean Spaces, Coming from DigitalOcean: Object storage
How do I use Quake AI as a backup target without fully migrating?
You do not need to migrate your primary storage to use Quake AI as an off-site backup destination. Quake AI works well as the "one off-site copy" in a 3-2-1 strategy (three copies, two media types, one off-site).
Two tools cover the main patterns:
- rclone: file-level backups with
rclone copyon a cron schedule. Usecopy(notsync) for backups so local deletions do not propagate to the backup bucket. Supports PostgreSQL, MySQL, and SQLite dump scripts. - restic: encrypted, deduplicated backups with built-in AES-256 encryption and retention policies (
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune). Encrypt before upload; server-side encryption is an additional optional layer.
Object storage on Quake AI is a per-TB add-on, and each dedicated vCPU subscription includes 1 TB at no additional cost. Backups within the included allowance do not add to the bill. For current rates, see the canonical Quake AI pricing page.
Source: Back up to Quake AI, Plan your migration: Quake AI storage cost
How do I keep Quake AI synchronized with another provider on an ongoing basis?
Use rclone in active-passive replication mode: your application writes to the primary provider, and a cron job on a small Quake AI VM syncs changes to Quake AI on a schedule. Quake AI acts as a read-only replica and failover target.
rclone sync primary:my-bucket quakeai:my-bucket-replica \
--transfers 16 --checkers 32 \
--log-file /var/log/rclone-sync.log --log-level INFOFor hourly replication, add that command to cron. Use --bwlimit to cap bandwidth during business hours.
For failover: point your application at the Quake AI endpoint, then reverse the sync direction once the primary recovers. After both sides are in sync, revert the application endpoint.
For selective sync (only specific prefixes), use --include "/backups/**" --include "/media/**".
Note: rclone bisync (bidirectional) is marked experimental and can cause data loss on edge cases. Use append-only naming patterns or prefix partitioning for workloads that write to both sides independently.
Source: Multi-cloud sync
Pricing, quotas, availability, and support#
What regions is object storage available in?
Object storage runs in all three Quake AI regions and exposes one S3-compatible endpoint per region:
object.us-east-1.rumble.cloudobject.us-east-2.rumble.cloudobject.us-west-1.rumble.cloud
Each endpoint serves an independent bucket namespace; a bucket created in one region is not visible from another. No automatic cross-region replication exists. To replicate objects across regions, use a tool from Migration tools comparison (rclone, AWS CLI, or MinIO Client) and run it on a schedule. See Regions for the platform-wide region table.
Source: Regions and availability, Mount S3 storage: Endpoints table, Migration tools comparison: Quake AI configuration
What is the SLA for object storage?
The contractual durability target, availability target, and credit schedule are published as part of Quake AI's commercial terms at rumble.cloud/legal. The Service Level Agreement page explains how to read those terms and how to file a credit claim. Storage-layer replication (the multi-node Ceph cluster behind the S3 API) protects against hardware-level loss within a region. For cross-region durability, replicate objects to a bucket in a second region with the tool of your choice.
Source: Service Level Agreement, Object Storage concepts: Storage layer replication
How do I get help if something is broken?
For most access problems, start with the runbook:
- Object storage access troubleshooting: S3 403/401 errors, credential confusion (
InvalidAccessKeyId,SignatureDoesNotMatch), and large file upload failures (EntityTooLarge).
Before opening a support ticket, gather this evidence (redact all secrets and access keys):
| Artifact | Command |
|---|---|
| EC2 credential rows | openstack ec2 credentials list |
| Active project | openstack project show YOUR_PROJECT_NAME -c id |
| S3 list test (redacted) | aws s3 ls --endpoint-url "${YOUR_ENDPOINT}" --debug 2>&1 | tail -20 |
| Incomplete multipart uploads | aws s3api list-multipart-uploads --bucket YOUR_BUCKET --endpoint-url "${YOUR_ENDPOINT}" |
| Failure time (UTC) | date -u |
If the runbook does not resolve the issue, open a support ticket with the evidence above. Get help is the canonical decision tree for picking the right starting point based on the symptom, and Support ticket evidence collection is the full evidence checklist.
Source: Get help, Object storage access troubleshooting: Collecting evidence for support tickets
See also#
- Object Storage overview: getting started, how-to index, reference links
- Object Storage concepts: deep background on how object storage works, S3 API compatibility, and access control
- Object Storage how-to guides: step-by-step instructions for every common operation
- Create S3 credentials: generate EC2 credentials for S3-compatible tools
- Grant access control: bucket policy structure, apply via CLI or API
- Enable versioning: enable, suspend, and manage object versions
- Mount S3 storage: rclone, Cyberduck, and s3fs
- Server-side encryption: SSE-C and SSE-OMK implementation guide
- CORS setup: configure per-bucket CORS rules
- FTP, FTPS, and SFTP access: S3 gateway VM setup
- Object storage access troubleshooting: 403/401 errors and large upload failures
- Plan your migration: S3 compatibility matrix, egress cost table, validation checklist
- Migration tools comparison: rclone, AWS CLI, s3cmd, MinIO Client, restic
- Migrate from AWS S3: provider-specific cutover guide
- Migrate from Google Cloud Storage
- Migrate from Azure Blob Storage
- Migrate from Backblaze B2
- Migrate from Wasabi
- Migrate from Hetzner Object Storage
- Migrate from DigitalOcean Spaces
- Back up to Quake AI: 3-2-1 backups with rclone and restic
- Multi-cloud sync: active-passive replication and failover
- Coming from AWS: service-by-service mapping including S3 → Swift
- Coming from DigitalOcean: Spaces → Swift mapping