The one question that decides it
Before looking at any service, ask how the application reads and writes the data:
| The application talks to storage as... | Azure service family |
|---|---|
Objects over HTTPS (REST, SDK, abfss://) | Blob Storage / Data Lake Storage Gen2 |
| A network drive or mount (SMB or NFS) | Azure Files, Azure NetApp Files |
| A local disk attached to a VM | Managed disks, Elastic SAN |
| A message queue between components | Queue Storage |
| A simple key-value table | Table Storage |
| A parallel file system for HPC / AI training | Azure Managed Lustre |
Get the access pattern right and most of the other choices (performance, cost, backup) follow from it. Pick the wrong family and no amount of tuning fixes it.
Storage accounts: the container for four services
Blob, Files, Queue and Table all live inside a storage account. The account sets the name (<name>.blob.core.windows.net), the redundancy, the network rules and the default access tier.
| Account kind | Services | Disk type | Use it for |
|---|---|---|---|
Standard general-purpose v2 (StorageV2) | Blob, Data Lake, Files, Queue, Table | HDD-backed | The default for almost everything |
Premium block blobs (BlockBlobStorage) | Block and append blobs | SSD | Low-latency object workloads, many small writes, analytics hot zones |
Premium file shares (FileStorage) | Azure Files only | SSD | Production SMB/NFS shares, FSLogix, databases on shares |
Premium page blobs (StorageV2, Premium SKU) | Page blobs only | SSD | Rare; unmanaged VHDs in legacy setups |
General-purpose v1 and legacy BlobStorage accounts still exist, but don't create new ones; upgrade them to v2.
Redundancy options
| SKU | Copies kept | Survives |
|---|---|---|
| LRS | 3 copies in one datacenter | Disk or rack failure |
| ZRS | 3 copies across availability zones | Loss of one zone |
| GRS / RA-GRS | LRS here + LRS in the paired region (RA = readable secondary) | Region outage (after failover) |
| GZRS / RA-GZRS | ZRS here + LRS in the paired region | Zone loss and region outage |
Premium accounts support LRS and, in many regions, ZRS. Geo-redundancy is Standard only. For how failover works, see Azure Storage geo-redundancy and failover.
Warning
Redundancy is not backup. If someone deletes a container, the delete is replicated to every copy. Turn on soft delete and versioning as well; see recovering deleted blobs and containers.
Blob Storage: objects at any scale
Blob Storage holds unstructured data as objects in containers. There are three blob types:
- Block blobs: files, images, backups, logs, Parquet. This is 99% of usage.
- Append blobs: optimised for appending only, such as log files written by many writers.
- Page blobs: random-access 512-byte pages; the format behind VHDs.
Access tiers
| Tier | Typical data | Minimum retention before early-deletion charge |
|---|---|---|
| Hot | Read or written often | None |
| Cool | Read rarely, needs instant access | 30 days |
| Cold | Read very rarely, needs instant access | 90 days |
| Archive | Offline; must be rehydrated before reading (hours) | 180 days |
Storage gets cheaper as you go down the table, but reads and transactions get more expensive. Archive is supported on LRS, GRS and RA-GRS accounts, not on ZRS or GZRS. Automate the moves with lifecycle rules: Azure Blob lifecycle management and access tiers.
# Move one blob to Cool, and rehydrate an archived blob with high priority
az storage blob set-tier --account-name stdata01 --container-name reports \
--name 2025/q4.parquet --tier Cool --auth-mode login
az storage blob set-tier --account-name stdata01 --container-name archive \
--name 2019/ledger.csv --tier Hot --rehydrate-priority High --auth-mode login
Key features
- Soft delete for blobs and containers, versioning, point-in-time restore.
- Immutable storage (time-based retention and legal hold) for WORM compliance.
- Object replication between accounts, change feed, blob index tags.
- Static website hosting from the
$webcontainer. - Entra ID RBAC (
Storage Blob Data Reader/Contributor), SAS tokens, private endpoints.
Use it for: backups and archives, media, application uploads, log retention, static websites, landing zones for data pipelines.
Data Lake Storage Gen2: Blob with folders and ACLs
Data Lake Storage Gen2 is not a separate service. It is a StorageV2 account with hierarchical namespace (HNS) enabled. That gives you:
- Real directories: renaming or deleting a folder is one atomic operation, not millions of blob copies.
- POSIX-style ACLs on folders and files, on top of RBAC.
- The
abfss://driver used by Spark, Databricks, Synapse and Fabric shortcuts. - Optional NFS 3.0 and SFTP endpoints.
az storage account create -g rg-data -n stlakeprod01 -l centralindia \
--kind StorageV2 --sku Standard_ZRS --hns true \
--min-tls-version TLS1_2 --allow-blob-public-access false
Tip
Decide on HNS when you create the account. An existing account can be upgraded, but the upgrade is one-way and some Blob features behave differently with HNS, so test first.
Use it for: data lakes, lakehouse (Delta, Iceberg), Databricks and Synapse workloads, big-data analytics. See storage options for Databricks.
Azure Files: managed file shares
Azure Files gives you SMB and NFS shares without running a file server.
| Option | Protocols | Media | Notes |
|---|---|---|---|
| Standard shares (in StorageV2) | SMB, REST | HDD | Tiers: transaction optimised, hot, cool |
Premium shares (FileStorage) | SMB, NFS 4.1, REST | SSD | Consistent low latency; NFS requires Premium |
Key features: identity-based SMB auth (on-premises AD DS, Entra Domain Services or Entra Kerberos for hybrid identities), share snapshots, Azure Backup integration, and Azure File Sync, which caches a share on Windows file servers on-premises.
# Premium account + NFS share (NFS needs a private endpoint or service endpoint, not public access)
az storage account create -g rg-app -n stfilesprem01 -l centralindia \
--kind FileStorage --sku Premium_ZRS --https-only false
az storage share-rm create -g rg-app --storage-account stfilesprem01 \
--name appdata --quota 1024 --enabled-protocols NFS --root-squash RootSquash
--https-only false is needed only because NFS 4.1 does not use HTTPS; keep the account private with network rules.
Warning
SMB uses TCP 445, which many ISPs and corporate networks block. Users connecting from home usually need a VPN or private connectivity.
Use it for: lift-and-shift file servers, shared app configuration, user profiles (FSLogix for AVD), container persistent volumes that need ReadWriteMany.
Managed disks: block storage for VMs
Managed disks are virtual disks attached to one VM (or several, with shared disks).
| Disk type | Best for | Notes |
|---|---|---|
| Ultra Disk | Top-tier databases (SQL Server, Oracle, SAP HANA) | IOPS and throughput set separately and changeable live; not an OS disk |
| Premium SSD v2 | Most production databases and busy apps | Pick size, IOPS and MB/s independently; not an OS disk; zonal |
| Premium SSD | Production VMs, OS disks | Performance tied to disk size; supports bursting |
| Standard SSD | Web servers, dev/test, light apps | Cheaper, consistent but lower performance |
| Standard HDD | Backups, rarely used data | Lowest cost, highest latency |
az disk create -g rg-db -n sqldata01 -l centralindia --zone 1 \
--sku PremiumV2_LRS --size-gb 512 \
--disk-iops-read-write 8000 --disk-mbps-read-write 300
Also worth knowing: ephemeral OS disks (stored on the host, free, lost on reallocation; good for stateless scale sets and AKS nodes), shared disks for clustered workloads such as SQL Server FCI, and disk snapshots for quick restore points. Right-sizing guidance: managed disks and Premium SSD v2.
Use it for: VM OS disks, databases on IaaS VMs, any application that expects a local drive letter or mount.
Queue Storage and Table Storage
Queue Storage is a simple, cheap message queue over HTTPS. Messages are up to 64 KB, and a queue can hold millions of messages. Use it to decouple a web front end from background workers. If you need ordering, sessions, topics or dead-lettering, use Azure Service Bus instead.
Table Storage is a NoSQL key-attribute store addressed by PartitionKey and RowKey. It is cheap and fast for lookups by key, but it has no secondary indexes. If you need global distribution or secondary indexes, use Azure Cosmos DB for Table (same API).
az storage queue create --account-name stapp01 --name orders --auth-mode login
az storage table create --account-name stapp01 --name devicestatus --auth-mode login
Use them for: job queues, simple event hand-off, device or session state, audit records looked up by key.
Specialist storage services
| Service | What it is | Use it for |
|---|---|---|
| Azure NetApp Files | Enterprise NAS (NFSv3, NFSv4.1, SMB, dual-protocol) with Standard, Premium and Ultra service levels; instant snapshots and cross-region replication | SAP HANA, Oracle on NFS, EDA/HPC, large VDI estates, apps that need very low file latency |
| Azure Elastic SAN | Pooled block storage presented over iSCSI, shared by many VMs or AKS | Consolidating many disks, migrating on-premises SAN workloads |
| Azure Managed Lustre | Managed Lustre parallel file system that can import from and export to Blob | HPC, AI/ML training that reads huge datasets in parallel |
| Azure Container Storage | Volume orchestration for AKS on top of disks, Elastic SAN or local NVMe | Stateful containers that need fast persistent volumes |
For a deeper comparison of the file and block options, read choosing between Blob, Files, NetApp Files, disks and Elastic SAN.
Which storage for which workload
| Workload | First choice | Why |
|---|---|---|
| Backups, archives, compliance copies | Blob (Cool/Cold/Archive) + immutability | Cheapest per GB, WORM policies |
| Data lake / lakehouse | Data Lake Storage Gen2 (ZRS) | HNS, ACLs, abfss:// for Spark |
| Website images, downloads, static site | Blob (Hot) + Front Door/CDN | HTTP access, scales automatically |
| Windows file server migration | Azure Files (+ File Sync) | SMB with AD permissions, no server to patch |
| AVD user profiles (FSLogix) | Azure Files Premium or NetApp Files | Low latency at logon storms |
| SQL Server / Oracle on VMs | Premium SSD v2 or Ultra Disk | Tunable IOPS and throughput |
| SAP HANA, high-performance NFS | Azure NetApp Files or Ultra Disk | Certified, very low latency |
| AKS ReadWriteOnce volumes | Managed disks (CSI) | Fast, one pod at a time |
| AKS ReadWriteMany volumes | Azure Files (NFS Premium) or NetApp Files | Shared across pods |
| Background job hand-off | Queue Storage (or Service Bus) | Decouples producers and workers |
| AI training datasets | Blob/ADLS + Managed Lustre cache | Cheap capacity plus parallel reads |
| Dev/test VMs | Standard SSD | Good enough, much cheaper |
Quick checklist before you create anything
- Access pattern: object, file (SMB/NFS), block, queue or table?
- Performance: is Standard enough, or do you need Premium / Premium SSD v2 / Ultra?
- Redundancy: LRS for dev, ZRS for production, GZRS when you need a regional DR copy.
- Tiering: will the data cool down? Add lifecycle rules on day one.
- Security: disable public blob access and shared key where possible, use private endpoints and Entra ID RBAC. Baseline: Azure Storage account secure baseline.
- Protection: soft delete, versioning, Azure Backup or snapshots, depending on the service.
- Cost: check the current pricing page for capacity, transactions, egress and early-deletion charges; transaction costs often surprise teams more than capacity.
Prevent it next time
- Put the decision table above into your landing zone design document so teams pick storage by workload, not by habit.
- Enforce the basics with Azure Policy: allowed SKUs, secure transfer, no public blob access, minimum TLS 1.2.
- Review storage monthly with Azure Advisor and Cost Management to catch Hot data that should be Cool, and oversized Premium disks.