Skip to main content
On this page

Coverage by target cloud

How the backends compare

Each row compares a capability of EFS with its adaptation on each backend. A dash means this row is not stated for that backend.

Infrastructure-only adaptation

On Google Cloud

How it works

Your pods share files through a Filestore ENTERPRISE instance. Tensor9 maps aws_efs_file_system to a google_filestore_instance with one file_shares NFS export on your VPC network. Many pods can mount the export at once and use ordinary POSIX file operations. Your applications read and write Filestore directly, and Google operates the storage. Three things differ from EFS and are covered below: the export uses NFS v3 rather than v4.1, capacity is provisioned rather than automatic, and the instance is regional across zones, as EFS Standard is.
On AWS your pods mount an EFS file system over NFS 4.1. On Google Cloud they mount a Filestore ENTERPRISE instance over NFS 3.On AWS your pods mount an EFS file system over NFS 4.1. On Google Cloud they mount a Filestore ENTERPRISE instance over NFS 3.

Your EFS file system becomes a Filestore ENTERPRISE instance that your pods mount directly over NFS v3.

Mount endpoint

EFS gives you a mount target in each availability zone. Filestore has one private IP address on your VPC network, shown as networks[].ip_addresses[0], and pods mount <ip>:/<share>. Code that read a per-zone mount target’s DNS name or IP address gets that one address instead. The mount targets’ security groups and fixed IP addresses are not kept.
EFS has a mount target in each availability zone. Filestore has one private IP address on your VPC network, and every pod mounts that address.EFS has a mount target in each availability zone. Filestore has one private IP address on your VPC network, and every pod mounts that address.

EFS’s per-zone mount targets become one private IP address that every pod mounts.

NFS protocol and locking

This mapping uses NFS v3; EFS uses NFS v4.1. Shared file access from many nodes, file ownership and POSIX mode bits work the same. Filestore also offers NFS v4.1, but this mapping does not use it. NFS v3 handles locks through the separate Network Lock Manager (NLM) protocol, while NFS v4.1 builds lease-based locking into the protocol and recovers clients differently. Test workloads that rely on locks or that reconnect after a node fails. NFS ACLs and delegations are not lost: EFS does not support them either.
The mapped NFS v3 export preserves shared POSIX access but uses different locking and client-recovery behavior from EFS.The mapped NFS v3 export preserves shared POSIX access but uses different locking and client-recovery behavior from EFS.

The mapped NFS v3 export preserves shared POSIX access but uses different locking and client-recovery behavior from EFS.

Capacity and performance

EFS grows and shrinks as files change. A Filestore ENTERPRISE instance has a provisioned capacity and bills on it. This mapping creates the instance at 1 TiB (1024 GiB), the minimum; it grows in steps up to 10 TiB, and you raise it as your data grows. Throughput and IOPS follow the tier and the provisioned capacity, so size the instance for storage and performance together. EFS’s bursting, elastic and provisioned throughput modes, and the older Max I/O performance mode, have no equivalent setting on the instance.
EFS grows with use and has no size. A Filestore ENTERPRISE instance has a provisioned capacity, created at 1 TiB and growing in steps to 10 TiB, and its throughput and IOPS follow the tier and capacity.EFS grows with use and has no size. A Filestore ENTERPRISE instance has a provisioned capacity, created at 1 TiB and growing in steps to 10 TiB, and its throughput and IOPS follow the tier and capacity.

EFS grows with use; a Filestore ENTERPRISE instance has a provisioned capacity, starting at 1 TiB.

Availability

Filestore ENTERPRISE replicates data across multiple zones in the region and has a published 99.99% availability SLA, so it covers the loss of a zone as EFS Standard does. This mapping always uses ENTERPRISE for that reason; the BASIC and ZONAL tiers keep data in a single zone.
EFS Standard is replicated across every availability zone in the region. Filestore ENTERPRISE is also replicated across zones in the region, with a 99.99% availability SLA.EFS Standard is replicated across every availability zone in the region. Filestore ENTERPRISE is also replicated across zones in the region, with a 99.99% availability SLA.

Like EFS Standard, Filestore ENTERPRISE is replicated across zones in the region.

Access points and POSIX identity

An EFS access point makes the server enforce a user and group ID and a root directory. Filestore has no access-point resource, and its NFS v3 export settings cannot force a per-export identity. Instead, the application mounts the root_directory as a subpath, and the pod’s securityContext (fsGroup, runAsUser) sets its identity. These settings are enforced by how each pod mounts the export, not by Filestore, so they do not give the per-application isolation an access point does. Only the file system’s primary access point is reflected; any others are not reproduced. Review permissions when several applications share an export.
Filestore has no access point. The access point's user and group IDs and root directory become a mount subpath and the pod's securityContext.Filestore has no access point. The access point's user and group IDs and root directory become a mount subpath and the pod's securityContext.

Filestore has no access point: its user, group and root directory are set by how the pod mounts the export.

Encryption and network access

Filestore encrypts stored data by default with a Google-managed key. A customer-managed key is not used: if your EFS file system names a kms_key_id, the instance still uses the Google-managed key. NFS v3 traffic is not encrypted, where EFS can mount over TLS. Pods reach the instance at its private address on your VPC, so the traffic stays on your private network. Filestore’s NFS v4.1 option supports Kerberos encryption, but it needs separate authentication and mount setup and is not part of this mapping.
Filestore encrypts stored data with a Google-managed key. An EFS customer key is not used. NFS v3 traffic is not encrypted and stays on the private VPC address.Filestore encrypts stored data with a Google-managed key. An EFS customer key is not used. NFS v3 traffic is not encrypted and stays on the private VPC address.

Stored data is encrypted with a Google-managed key; NFS v3 traffic is not encrypted.

Limitations

Shared POSIX access and regional, multi-zone storage work the same way. These differences affect protocol behaviour, capacity, encryption and permissions. Where AWS EFS and Filestore differ
  • NFS v4.1 is not supported. The export uses NFS v3, which handles locks through the separate NLM protocol and recovers clients differently. Test locking and reconnection during migration; shared POSIX access works the same.
  • Capacity behaves differently: it is provisioned. The instance is created at the 1 TiB (1024 GiB) minimum and bills on provisioned capacity, where EFS bills for data stored. You raise it in steps up to 10 TiB; throughput follows tier and capacity, with no separate throughput mode.
  • Encryption in transit is not supported. NFS v3 traffic is not encrypted the way an EFS TLS mount is. Pods reach the instance at a private IP on your VPC, so the traffic stays on your network.
  • Customer-managed encryption keys are not supported. An EFS kms_key_id is not used; the instance is encrypted at rest with the Google-managed key.
  • Access points behave differently: there is no access-point resource. The primary access point’s user, group and root directory become a mount subpath and the pod’s securityContext; Filestore’s NFS v3 export cannot force an identity. Additional access points are not reproduced.
  • Per-zone mount targets are not supported. Every mount uses the instance’s single private IP (networks[].ip_addresses[0]). The mount targets’ security groups and fixed IP addresses are not kept; the file tree is unchanged.
  • Lifecycle tiering and replication are not supported. EFS Infrequent Access and Archive tiers and cross-region replication have no Filestore equivalent; the instance stores everything on one provisioned tier. Filestore has its own backups and snapshots, which you manage separately.
  • You must declare the file system statically, in the root module. A file system created with count or for_each, or declared inside a child module, stops the deployment with an error. A count on its mount targets or access points works; they become the one instance.

Other considerations

Moving from AWS. The new instance starts empty; creating it does not copy EFS data. Stop writes while you copy files to the export, and preserve ownership, permissions and paths. Point the mount at the private export address, and test locks and client reconnection before you switch application mounts.

On Azure

How it works

Your pods share files through an Azure Files NFS v4.1 share, the same protocol version EFS uses. Tensor9 maps aws_efs_file_system to an azurerm_storage_share with enabled_protocol = "NFS" on a Premium FileStorage storage account. Many pods can mount the share at once and use ordinary POSIX file operations. Tensor9 creates the share; your applications read and write it directly, so throughput is the share’s own. Microsoft operates the storage. The share has a provisioned size rather than growing on its own, which the capacity section covers.
On AWS your pods mount an EFS file system over NFS 4.1. On Azure they mount an Azure Files NFS share on a Premium FileStorage account, also over NFS 4.1.On AWS your pods mount an EFS file system over NFS 4.1. On Azure they mount an Azure Files NFS share on a Premium FileStorage account, also over NFS 4.1.

Your EFS file system becomes an Azure Files NFS share that your pods mount directly, over the same NFS v4.1 protocol.

Mount endpoint

EFS gives you a mount target in each availability zone. Azure Files has one endpoint for the share, <account>.file.core.windows.net, and every mount uses it. Code that read a specific per-zone mount target’s DNS name or IP address gets that one endpoint instead. The mount targets’ security groups and fixed IP addresses are not kept. The share is reached through a private endpoint in your virtual network, and network rules block public access. The private endpoint does not encrypt the NFS connection; the encryption section covers that.
EFS has a mount target in each availability zone. On Azure these become one storage account and one share, reached at a single endpoint through a private endpoint in your virtual network.EFS has a mount target in each availability zone. On Azure these become one storage account and one share, reached at a single endpoint through a private endpoint in your virtual network.

EFS’s per-zone mount targets become one share endpoint, reached through a private endpoint in your virtual network.

Capacity and performance

EFS grows and shrinks as files change. An Azure premium share has a quota, from 100 GiB to 100 TiB, and bills on that provisioned size. This mapping creates the share at 100 GiB, the minimum. You raise the quota as your data grows. A premium share’s baseline IOPS and throughput grow with its quota, so size it for both data and performance. EFS’s bursting, elastic and provisioned throughput modes, and the older Max I/O performance mode, have no equivalent setting on the share.
EFS grows with use and has no size. An Azure premium share has a quota, created at 100 GiB, and its IOPS and throughput grow with that quota.EFS grows with use and has no size. An Azure premium share has a quota, created at 100 GiB, and its IOPS and throughput grow with that quota.

EFS grows with use; an Azure premium share has a quota, and its performance grows with that quota.

Access points and POSIX identity

An EFS access point makes the server enforce a user and group ID and a root directory. Azure Files has no access-point resource. Instead, the application mounts the root_directory as a subpath, and the pod’s securityContext (fsGroup, runAsUser) sets its identity. The share’s root-squash setting controls how a client’s root user is treated. These settings are enforced by how each pod mounts the share, not by the share itself, so they do not give the per-application isolation an access point does. Only the file system’s primary access point is reflected; any others are not reproduced. Review the mounts of applications that share a volume but need separate access.
Azure Files has no access point. The access point's user and group IDs and root directory become a mount subpath and the pod's securityContext, and the share's root-squash setting controls how a client's root user is treated.Azure Files has no access point. The access point's user and group IDs and root directory become a mount subpath and the pod's securityContext, and the share's root-squash setting controls how a client's root user is treated.

Azure Files has no access point: its user, group and root directory are set by how the pod mounts the share.

Encryption and network access

Azure Files encrypts stored data by default with a Microsoft-managed key. A customer-managed key is not used: if your EFS file system names a kms_key_id, the share still uses the Microsoft-managed key. Azure Files supports TLS encryption for NFS traffic. To use it, install and configure the AZNFS mount helper on your clients and turn on the storage account’s NFS encryption requirement. Keep the private endpoint and network rules as well; on their own they do not encrypt the connection.
Azure Files encrypts stored data with a Microsoft-managed key. TLS for NFS needs the AZNFS mount helper on clients, and the share is mounted through a private endpoint.Azure Files encrypts stored data with a Microsoft-managed key. TLS for NFS needs the AZNFS mount helper on clients, and the share is mounted through a private endpoint.

The share is encrypted at rest with a Microsoft-managed key; TLS for NFS needs the AZNFS mount helper.

Availability

EFS Standard replicates data across every availability zone in the region. This mapping creates the storage account as locally redundant storage (LRS), which keeps three copies within one zone. It protects against disk and node failures in that zone, but not against losing the whole zone. Azure also offers zone-redundant storage (ZRS) for premium shares in some regions, but this mapping does not select it. Plan recovery from a zone outage separately.
EFS Standard is replicated across every availability zone in the region. The Azure share this mapping creates is locally redundant, in a single zone.EFS Standard is replicated across every availability zone in the region. The Azure share this mapping creates is locally redundant, in a single zone.

EFS Standard spans every zone in the region; the share this mapping creates is locally redundant in one zone.

Limitations

Shared POSIX access over NFS v4.1 works the same way. These differences affect sizing, access control, encryption and recovery. Where AWS EFS and Azure Files differ
  • Capacity behaves differently: the share has a quota. The share is created at the 100 GiB minimum and bills on its provisioned size, where EFS bills for data stored. You raise the quota as data grows; throughput grows with the quota, with no separate throughput mode.
  • Customer-managed encryption keys are not supported. An EFS kms_key_id is not used; the share is encrypted at rest with the Microsoft-managed key.
  • You must configure TLS on clients. NFS encryption in transit needs the AZNFS mount helper on each client and the storage account’s encryption setting.
  • Zone redundancy is not supported. The storage account is locally redundant (LRS), within one zone, where EFS Standard spans every zone in the region.
  • Access points behave differently: there is no access-point resource. The primary access point’s user, group and root directory become a mount subpath and the pod’s securityContext, enforced by how the pod mounts rather than by the share. Additional access points are not reproduced.
  • Per-zone mount targets are not supported. Every mount uses the single <account>.file.core.windows.net endpoint. The mount targets’ security groups and fixed IP addresses are not kept; the file tree is unchanged.
  • Lifecycle tiering and replication are not supported. EFS Infrequent Access and Archive tiers and cross-region replication have no equivalent on the share. NFS shares support snapshots, but Azure Backup does not cover them; schedule snapshots and other backups yourself.
  • You must declare the file system without count or for_each. A file system created with count or for_each stops the deployment with an error. A count on its mount targets or access points works; they become the one share.

Other considerations

Moving from AWS. The new share starts empty; creating it does not copy EFS data. Stop writes while you copy files to the share, and preserve ownership, permissions and paths. Test your application’s mounts before you switch traffic.

On OCI

How it works

Your application shares files through an OCI File Storage export. Tensor9 creates an oci_file_storage_file_system, an oci_file_storage_mount_target and an oci_file_storage_export in your virtual cloud network (VCN). Pods mount the export directly at the mount target’s IP address and use ordinary POSIX file operations. Oracle operates the storage. Like EFS, the file system grows as data is written. Unlike EFS, it uses NFS v3 and lives in one availability domain rather than across the region.
On AWS your pods mount an EFS file system over NFS 4.1. On Oracle Cloud they mount an OCI File Storage export over NFS 3, at the mount target's IP address.On AWS your pods mount an EFS file system over NFS 4.1. On Oracle Cloud they mount an OCI File Storage export over NFS 3, at the mount target's IP address.

Your EFS file system becomes an OCI File Storage export that your pods mount directly over NFS v3.

Mount target and export

The file system holds the data. The mount target is a network interface with an IP address in your private subnet, in one availability domain; EFS’s per-zone mount targets all become this one address. The export publishes the file system at a path and applies its export_options. On AWS, the security groups on your mount targets decide who can mount. Those are not kept. Instead, the export allows read and write access from the deployment’s private subnet. Check that this matches the clients you meant to allow: a client in that subnet that your security groups excluded can now mount, and a client outside it that they allowed cannot.
An EFS file system and its per-zone mount targets become three OCI resources in your VCN: a file system that holds the data, a mount target in one availability domain, and an export that publishes the file system.An EFS file system and its per-zone mount targets become three OCI resources in your VCN: a file system that holds the data, a mount target in one availability domain, and an export that publishes the file system.

The file system holds the data, the mount target gives it an IP address, and the export publishes it.

Capacity and performance

OCI File Storage grows as files are written, up to 8 EiB, and bills for the data stored. As with EFS, there is no capacity to set before applications write. Throughput grows automatically with the amount of data stored. EFS’s bursting, elastic and provisioned throughput modes, and the older Max I/O performance mode, have no equivalent setting.
EFS grows with use and has no size. OCI File Storage also grows as you write, up to 8 EiB, with no capacity to set in advance.EFS grows with use and has no size. OCI File Storage also grows as you write, up to 8 EiB, with no capacity to set in advance.

Like EFS, OCI File Storage grows as you write, with no capacity to set in advance.

Access points and export options

The mapping takes anonymous_uid and anonymous_gid from the EFS access point’s posix_user and sets identity_squash = "ROOT". Requests from a client’s root user run as that user and group. Requests from other users keep their own IDs. An EFS access point applies its identity to every request, so on OCI a non-root client process is not forced to the access point’s user. The access point’s root_directory becomes the export path, which names the export but still publishes the whole file system; it does not limit clients to that directory. Mounting a subdirectory on the client does not add that limit either. Only the primary access point is mapped; any others are not reproduced. Use separate file systems when applications must be kept apart.
The access point's user and group IDs become the export's anonymous IDs with root squash, so requests from a client's root user run as that user and group. The export path names the export; it does not limit clients to a subdirectory.The access point's user and group IDs become the export's anonymous IDs with root squash, so requests from a client's root user run as that user and group. The export path names the export; it does not limit clients to a subdirectory.

Requests from a client’s root user take the access point’s IDs; the export path does not limit clients to a subdirectory.

NFS protocol and locking

The OCI export uses NFS v3; EFS uses NFS v4.1. Shared file access from many nodes, file ownership and permission bits work the same. NFS v3 handles byte-range locks through the separate Network Lock Manager (NLM) protocol, while NFS v4.1 builds lease-based locking into the protocol and recovers clients differently. Test locking and reconnection after a node fails. NFS ACLs and delegations are not lost: EFS does not support them either.
The mapped NFS v3 export preserves shared POSIX access but uses different locking and client-recovery behavior from EFS.The mapped NFS v3 export preserves shared POSIX access but uses different locking and client-recovery behavior from EFS.

Shared POSIX access works the same over NFS v3, but locking and client recovery differ from EFS.

Availability

EFS Standard keeps data across the availability zones in a region. An OCI file system and its mount target are in one availability domain, and the data is replicated within it. That protects against disk and storage-node failures, but not against losing the whole domain. OCI can replicate a file system asynchronously to another availability domain or region, set up separately. To recover outside the source domain, you need such a replica and a tested recovery procedure.
EFS Standard is replicated across availability zones in the region. An OCI file system and its mount target are in one availability domain, replicated within it.EFS Standard is replicated across availability zones in the region. An OCI file system and its mount target are in one availability domain, replicated within it.

EFS Standard spans the region; an OCI file system and its mount target are in one availability domain.

Encryption and network access

OCI File Storage encrypts stored data by default with an Oracle-managed key. A customer-managed key is not kept: if your EFS file system names a kms_key_id, the file system still uses the Oracle-managed key. For encrypted NFS traffic, install the oci-fss-utils package on clients, which mounts over TLS 1.2. Without it, traffic is not encrypted; the private subnet limits who can reach the mount target but does not encrypt the connection.
OCI File Storage encrypts stored data with an Oracle-managed key. An EFS customer key is not used. TLS for NFS needs the oci-fss-utils package on clients.OCI File Storage encrypts stored data with an Oracle-managed key. An EFS customer key is not used. TLS for NFS needs the oci-fss-utils package on clients.

Stored data is encrypted with an Oracle-managed key; TLS for NFS needs oci-fss-utils on clients.

Limitations

Shared POSIX access and automatic capacity growth work the same way. These differences affect identity, protocol behaviour, encryption and availability. Where AWS EFS and OCI File Storage differ
  • Access points behave differently: only a client’s root user is remapped. The export uses identity_squash = "ROOT" with the access point’s IDs, so other users keep their own IDs. The export path does not limit clients to the access point’s directory. Additional access points are not reproduced.
  • NFS v4.1 is not supported. The export uses NFS v3, which handles locks through the separate NLM protocol and recovers clients differently. Test locking and reconnection during migration; shared POSIX access works the same.
  • Region-wide availability is not supported. The file system and mount target are in one availability domain and replicated within it, so losing the whole domain is not covered the way EFS covers losing a zone.
  • Customer-managed encryption keys are not supported. An EFS kms_key_id is not used; the file system is encrypted at rest with the Oracle-managed key.
  • You must install oci-fss-utils for encryption in transit. OCI supports NFS over TLS 1.2 only through the oci-fss-utils client package. Without it, the mount relies on the private subnet for isolation, and traffic is not encrypted.
  • Mount-target security groups are not supported. The export allows read and write access from the deployment’s private subnet instead. Check that scope against the clients your security groups allowed.
  • Lifecycle tiering and replication are not supported. EFS Infrequent Access and Archive tiers are not reproduced. OCI snapshots, clones and asynchronous replication are set up separately; check the destination and recovery procedure for a domain or regional outage.
  • You must declare the file system and its parts without count or for_each. On OCI, a count or for_each on the file system, its mount targets or its access points stops the deployment with an error.

Other considerations

Moving from AWS. The new file system starts empty; creating it does not copy EFS data. Stop writes while you copy files to the export, and preserve ownership, permissions and paths. Test root and non-root client access, locking, reconnection and your recovery procedure before you switch production mounts.

On Private Kubernetes

Shared file access

A Kubernetes ReadWriteMany (RWX) NFS volume lets multiple pods access the same files, matching the shared POSIX access pattern used with EFS. The application mounts the volume and performs file operations through NFS; no Tensor9 adapter processes those reads and writes.

Storage configuration

The customer supplies the NFS server or RWX-capable storage provisioner and PersistentVolume. A private Kubernetes cluster does not have one universal managed file service or guaranteed RWX StorageClass, so this mapping uses the cluster’s storage arrangement rather than creating a separate file server for each EFS resource.

Capacity and availability

The customer manages capacity, high availability, backups, and recovery. Storage size follows the backing volume, and throughput depends on the NFS server and its storage. Encryption at rest comes from the backing storage rather than an EFS-managed key.

Migration

Provision the RWX storage, configure the application mount, and copy the data during a period when writes are stopped. Preserve file ownership, permissions, and paths, then test access from every pod that shares the volume. AWS EFS management APIs are not served by this mapping.

Debug this service

For requests through a service adapter, use Explain and request diagnostics to investigate the selected mapping. Follow the BYOC service-adapter debugging runbook to capture and interpret the diagnostic evidence. Service Catalog.