Skip to content

Block Stores

A block store defines where flexFS stores file data blocks. Each block store maps to a bucket (or container) in a cloud object storage service. Volumes reference a block store by ID — all data blocks for that volume are stored in the configured bucket and prefix.

FieldFlagTypeRequiredDescription
idintegerautoUnique identifier (auto-assigned)
provider_code--providerCodestringcreateProvider code (e.g., aws, gcp)
region_code--regionCodestringcreateRegion code (e.g., us-east-1)
block_api_code--apiCodestringcreateStorage API protocol: s3, gcs, azure, oci
bucket--bucketstringcreateStorage bucket or container name
bucket--namespacestringociObject storage namespace; required for oci, rejected for every other API
prefix--prefixstringKey prefix within the bucket (relocation-guarded; see caution below)
username--usernamestringS3: access key. Azure: storage account. OCI: JSON identity. GCS: unused
password--passwordstringS3: secret key. Azure: account key. OCI: PEM private key. GCS: service account JSON
address--addressstringObject storage endpoint; overrides the backend’s default. See each backend below

The provider_code, region_code, and block_api_code are immutable after creation. Credentials (username, password), the endpoint address, the prefix, and the OCI --namespace can be updated. configure.flexfs deliberately does not offer --bucket on update; a bucket name can only be changed through the REST API, and is guarded as described below.

Terminal window
configure.flexfs create block-store \
--providerCode aws \
--regionCode us-east-1 \
--apiCode s3 \
--bucket my-flexfs-bucket \
--prefix flexfs \
--username $USERNAME \
--password $PASSWORD

GCS uses the native Cloud Storage API. Pass a service account JSON key as --password, or omit credentials entirely to use the workload’s application default credentials:

Terminal window
configure.flexfs create block-store \
--providerCode gcp \
--regionCode us-central1 \
--apiCode gcs \
--bucket my-flexfs-bucket \
--prefix flexfs \
--password "$(cat service-account.json)"

--address is not needed for standard GCS. Set it only to reach a restricted VIP (restricted.googleapis.com) or a local emulator.

--username is the storage account name and --password its access key:

Terminal window
configure.flexfs create block-store \
--providerCode azure \
--regionCode eastus \
--apiCode azure \
--bucket my-flexfs-container \
--prefix flexfs \
--username $USERNAME \
--password $PASSWORD

The endpoint defaults to the public commercial cloud, <account>.blob.core.windows.net. Reaching a sovereign cloud, Azure Stack, or a custom domain requires --address, given as the full service host including the account label:

Terminal window
configure.flexfs create block-store \
--providerCode azure \
--regionCode usgovvirginia \
--apiCode azure \
--bucket my-flexfs-container \
--username $USERNAME \
--password $PASSWORD \
--address $USERNAME.blob.core.usgovcloudapi.net

The Azurite emulator addresses the account in the path rather than as a subdomain, so give --address that form:

Terminal window
configure.flexfs create block-store \
--providerCode azure \
--regionCode local \
--apiCode azure \
--bucket my-flexfs-container \
--username devstoreaccount1 \
--password $AZURITE_KEY \
--address http://127.0.0.1:10000/devstoreaccount1

Azure is the only API whose --address may carry a path. For the others the bucket is a separate field, so a path there is rejected as a likely pasted bucket URL.

OCI requires --namespace in addition to --bucket:

Terminal window
configure.flexfs create block-store \
--providerCode oci \
--regionCode us-ashburn-1 \
--apiCode oci \
--bucket my-flexfs-bucket \
--namespace my-tenancy-namespace \
--prefix flexfs \
--username $USERNAME \
--password $PASSWORD

To correct a namespace on an existing OCI block store:

Terminal window
configure.flexfs update block-store <id> --namespace my-tenancy-namespace

For S3-compatible stores like MinIO, Wasabi, or Ceph RGW, use the s3 API code with a custom --address:

Terminal window
configure.flexfs create block-store \
--providerCode minio \
--regionCode local \
--apiCode s3 \
--bucket flexfs \
--prefix data \
--username $USERNAME \
--password $PASSWORD \
--address minio.example.com:9000

Credentials, the address, the prefix, and the OCI --namespace can be updated on an existing block store. The prefix and the bucket name are relocation-guarded, as described above.

Terminal window
configure.flexfs update block-store <id> \
--username $USERNAME \
--password $PASSWORD
Terminal window
configure.flexfs update block-store <id> --address new-endpoint.example.com
Terminal window
configure.flexfs list block-stores

The list view shows id, provider_code, region_code, block_api_code, address, bucket, and prefix. Credentials are not shown in list output.

Terminal window
configure.flexfs show block-store <id>

The full detail view includes all fields. The password field is included in the output — treat it as sensitive.

Terminal window
configure.flexfs delete block-store <id>

The prefix field determines the key prefix for all blocks stored by volumes using this block store. Using different prefixes within the same bucket allows multiple block stores to share a single bucket:

Terminal window
# Production block store
configure.flexfs create block-store \
--providerCode aws --regionCode us-east-1 --apiCode s3 \
--bucket shared-bucket --prefix prod
# Staging block store (same bucket, different prefix)
configure.flexfs create block-store \
--providerCode aws --regionCode us-east-1 --apiCode s3 \
--bucket shared-bucket --prefix staging

For storage backends that require explicit credentials:

BackendUsernamePassword
Amazon S3AWS access key IDAWS secret access key
Google Cloud Storage(unused)Service account JSON key (leave empty for application default credentials)
Azure Blob StorageStorage account nameStorage account access key
Oracle Cloud (oci API)JSON identity document: tenancy_ocid, user_ocid, region, key_id, key_fingerprintPEM-encoded RSA private key
S3-compatibleAccess keySecret key