Data Movement Tools in Azure: AzCopy and Storage Explorer

Data Movement Tools in Azure: AzCopy and Storage Explorer

A beginner-friendly, book-style guide to moving files into, out of, and between Azure Storage accounts. Learn what each tool does, how it works inside, how to keep transfers fast, safe, and repeatable, and how to choose the right tool for the job.

Imagine you have just been told to move a company’s entire photo archive, ten years of invoices, and a few hundred thousand log files into the cloud by next Friday. You open your laptop, drag a folder into a browser window, and watch a progress bar crawl. Three hours later, the Wi-Fi drops, the transfer fails, and you cannot tell which files made it and which did not. This is the moment most people discover that moving data is a skill of its own.

Microsoft Azure gives you two free tools built exactly for this job. AzCopy is a small command-line program that moves huge amounts of data quickly and can be scripted and repeated. Azure Storage Explorer is a desktop application with windows, buttons, and drag-and-drop that lets you see and manage what lives inside your storage accounts. They are related, they complement each other, and knowing when to reach for each one will save you hours of waiting and a lot of worry.

This guide assumes you know nothing about either tool. Every new word is explained when it first appears, every big idea gets an everyday comparison, and the chapters build on each other step by step. By the end you will understand how the tools work on the inside, how to make them fast, how to keep your data safe while it travels, and how to decide between them and the other options Azure offers.

1Why Moving Data Is Harder Than It Looks

Before meeting the tools, let us understand the problem they solve. Copying a file feels trivial. Copying ten million files across the internet is a different sport entirely.

The simple idea and the hard reality

Data movement means taking information that lives in one place and making an exact copy of it in another place. The two places could be your laptop and the cloud, two different cloud accounts, or even two regions of the world. On the surface this is nothing more than “copy and paste.” In practice, four things make it hard: the amount of data, the distance it travels, the number of separate files, and the fact that something will always go wrong along the way.

When you copy one small document, none of these matter. When you copy a hundred terabytes made of forty million files, every one of them matters. A single dropped connection can waste a day. A single wrong permission can stop a job at midnight. A single tiny file multiplied by millions can be slower than one giant file of the same total size.

Analogy

Think of moving house. Carrying one box to a neighbour is easy. Moving a whole home means you need a truck, a plan for which room goes first, a list so nothing is forgotten, and a way to restart if the truck breaks down halfway. AzCopy is the moving truck with a clipboard. Storage Explorer is the walkthrough where you open boxes, peek inside, and rearrange things by hand.

Three goals every transfer must meet

Whatever tool you use, a good transfer achieves three goals at once. The first is speed: finishing in a reasonable time by using all the network capacity you have. The second is safety: the data arrives complete and unchanged, and nobody who should not see it can see it. The third is repeatability: you can run the same transfer again tomorrow, or resume it after a failure, without starting over or creating duplicates.

Most beginner mistakes come from chasing only one goal. People who chase speed forget about safety and leave a wide-open access link lying around. People who chase safety copy files one at a time by hand and never finish. People who ignore repeatability end up with a half-copied mess and no record of what happened.

Doing the math before you start

The most valuable habit in data movement is to estimate the time before you press start. The rule is simple. A network link measured in megabits per second (Mbps) or gigabits per second (Gbps) tells you how many bits cross the wire each second. Divide by eight to get bytes. A 1 Gbps link carries at best 125 megabytes per second, which is about 10.8 terabytes per day if it ran flat out all day long.

Real links never run at their full rated speed. Overhead, other users on the same network, and busy servers usually leave you with something like 60 to 80 percent of the headline number. The table below shows what that means for moving 100 terabytes.

Link speedBest case (100 percent)Realistic (about 70 percent)
100 MbpsAbout 93 daysAbout 132 days
1 GbpsAbout 9.3 daysAbout 13 days
10 GbpsAbout 22 hoursAbout 32 hours
10.8 TB
per day at best on a 1 Gbps link
1.08 TB
per day at best on a 100 Mbps link
~190 TiB
largest single block blob Azure supports
i
Tip

If your estimate says the transfer will take longer than a few weeks, stop and consider an offline option such as shipping a physical device. We cover those choices in a later chapter. The best data movement tool is sometimes a courier truck.

An illustrative example

Picture a hypothetical online retailer with 40 terabytes of product photos and order documents on servers in its own office. It has a 500 Mbps internet connection. At 70 percent efficiency, that link delivers about 44 megabytes per second, or roughly 3.8 terabytes per day. The first full copy would take around eleven days. After that, only the new and changed files need to be copied each night, which might be a few gigabytes. A good tool handles both jobs: the big first load and the small daily top-up. That pattern, big load first and small updates after, shows up again and again in this guide.

2The Azure Storage Landscape You Are Moving Into

A tool is only as useful as your understanding of the place it delivers to. This chapter introduces the vocabulary of Azure Storage in plain words.

The storage account: your warehouse

Everything in Azure Storage lives inside a storage account. A storage account is a named container for your data that sits in one Azure region, such as East US or West Europe. It has its own web address, its own security settings, and its own bill. Inside the account you can keep several different kinds of data, each handled by a separate service.

Analogy

A storage account is like a warehouse you rent. The warehouse has a street address, a lock, and a landlord who sends you a bill. Inside, different sections hold different kinds of goods: one for loose boxes, one for filing cabinets, one for message trays. You decide who gets a key to which section.

The services inside the account

Blob storage

Objects of any kind

Stores files such as photos, videos, backups, logs, and datasets. “Blob” stands for binary large object. This is the most common target for AzCopy.

Azure Files

Network file shares

Gives you shared folders that behave like a network drive. Many servers and people can open the same share at once.

Data Lake Storage Gen2

Blob storage with real folders

Blob storage with a feature called a hierarchical namespace, which turns name prefixes into true folders. Popular for analytics.

Queues and tables

Messages and simple records

Queues hold small messages for programs to process. Tables hold simple key and value rows. Storage Explorer can browse these, while AzCopy does not move them.

Containers, blobs, and the folder illusion

Inside the blob service, data is organised into containers. A container is the top-level bucket that holds blobs. Containers cannot be nested inside each other. A blob is simply one object with a name, such as invoices/2025/march/inv-001.pdf.

Here is a surprise that confuses almost every beginner. In a normal blob container, there are no real folders. The slashes in a blob name are just characters. Tools such as Storage Explorer draw them as folders to make life easier, but underneath, the container is a flat list of names. This matters for data movement because “renaming a folder” actually means copying and deleting every blob whose name starts with that prefix.

When you turn on the hierarchical namespace option, the account becomes a Data Lake Storage Gen2 account. Now folders are real objects, and renaming a folder is a single quick operation. Both AzCopy and Storage Explorer understand this difference and behave sensibly in either mode.

Three types of blobs

Blobs come in three flavours. Block blobs are built from blocks that can be uploaded in any order and then committed together. They are the default and the best fit for files, media, and backups. Append blobs only allow adding data to the end, which suits log files. Page blobs store data in fixed-size pages and are used mainly for virtual machine disks. AzCopy lets you choose the blob type when uploading, and for most work you will use block blobs.

Access tiers: hot, cool, cold, and archive

Not all data is read equally often. Azure lets you place each blob in an access tier that trades storage price against access price. The Hot tier costs more to store and less to read. The Cool and Cold tiers cost less to store but charge more to read and expect you to keep the data for a minimum time, roughly 30 days for Cool and 90 days for Cold. The Archive tier is the cheapest to store, expects about 180 days of retention, and keeps data offline, so you must wait to “rehydrate” a blob before reading it.

Analogy

Tiers work like a home. Your everyday dishes sit on the kitchen counter (Hot). Seasonal decorations sit in the hallway cupboard (Cool). Old tax papers live in a box in the attic (Cold). Boxes of memories you may never open again sit in a rented storage unit across town (Archive). The farther away, the cheaper the space and the slower the retrieval.

Why does this matter for moving data? Because the tier you choose at upload time affects your bill from day one. AzCopy can set the tier while it uploads, which is better than uploading everything as Hot and moving it later, because a later move can trigger extra charges.

Redundancy: how many copies Azure keeps

Azure keeps several copies of your data to protect against hardware failure. Locally redundant storage (LRS) keeps three copies inside one data centre. Zone-redundant storage (ZRS) spreads them across three separate zones in a region. Geo-redundant storage (GRS) adds a second region far away. You pick this setting on the storage account, not in the tool, but it shapes your plan: moving data into a geo-redundant account means Azure also copies it to the paired region in the background, which does not slow your upload but is worth knowing about.

3Meet the Two Tools: AzCopy and Storage Explorer

Both tools are free. Both talk to the same storage accounts. They simply have different personalities and different best uses.

What is AzCopy?

AzCopy is a command-line utility published by Microsoft for copying data to, from, and between Azure Storage accounts. “Command-line” means you type instructions into a text window instead of clicking buttons. It is a single small program with no installer: you download it, put it somewhere on your computer, and run it. It works on Windows, Linux, and macOS, and it is also available inside Azure Cloud Shell, the browser-based terminal in the Azure portal.

AzCopy is built for scale and automation. It can move many files at the same time, it breaks big files into pieces and sends the pieces in parallel, it retries what fails, and it remembers the state of each job so you can resume after an interruption. Because it is just a program, you can place it inside a script, schedule it to run every night, or call it from an automated build pipeline.

The current major version is called AzCopy v10. Older versions such as v8 and v7 are retired, so if you find an old blog post that mentions them, treat the details with caution.

What is Azure Storage Explorer?

Azure Storage Explorer is a free desktop application for Windows, macOS, and Linux. It shows your storage accounts as a tree on the left and the contents of whatever you select on the right, much like the file manager on your own computer. You can upload and download by dragging, create and delete containers, edit properties, generate access links, and look inside blobs, file shares, queues, and tables. Azure also offers a similar browser-based experience called Storage browser inside the Azure portal, which is handy when you cannot install software.

Storage Explorer is built for people. It is the best way to look around, to check that a transfer worked, to fix one file, or to share a single blob with a colleague. A key fact to remember is that Storage Explorer uses AzCopy under the hood for its blob and file transfers. When you drag a folder into Storage Explorer, the heavy lifting is done by AzCopy, with the graphical app acting as a friendly front desk.

Analogy

AzCopy is a freight forklift that works through the night following a written schedule. Storage Explorer is the glass-walled office on the warehouse floor where a manager can see every shelf, walk over, pick up one box, and read its label. The manager’s office even calls the same forklift when a big job comes in.

Side-by-side comparison

QuestionAzCopyStorage Explorer
How you use itType commands or run scriptsClick, drag, and drop
Best atLarge, repeated, or automated transfersBrowsing, inspecting, and small manual jobs
Can run unattendedYes, on a schedule or in a pipelineNo, a person must be at the screen
Learning curveModerate, because you learn the commandsGentle, because it looks like a file manager
Server-to-server copyYes, data flows inside AzureYes, through its copy and paste feature
Other servicesBlob, Files, Data Lake Gen2, plus sources like Amazon S3Blobs, files, queues, tables, Data Lake Gen2, and more
CostFreeFree
i
Note

The tools are free, but the storage and the operations they cause are not. Reading, writing, and listing blobs all count as billable operations, and data leaving Azure to the internet or another region can cost money. We return to cost in the best practices chapter.

Related helpers you may meet

You will see two other names in documentation. The Azure CLI is a general command-line tool for managing Azure, and its storage copy command actually calls AzCopy for the heavy work. Azure PowerShell offers similar commands for people who prefer that language. If you already live in one of these, you can often stay there and still get AzCopy’s speed.

4AzCopy Architecture and Components

Even though AzCopy is a single file, inside it works like a small factory with several departments. Knowing the departments makes errors and settings much easier to understand.

flowchart LR
  CLI["AzCopy command line front end"] --> JM["Job Manager"]
  AUTH["Credential handler"] --> JM
  JM --> ENUM["Enumerator and scanner"]
  ENUM --> PLAN["Job plan files on local disk"]
  PLAN --> SCHED["Transfer scheduler"]
  SCHED --> POOL["Worker pool and chunk queue"]
  POOL --> SRC["Source location"]
  POOL --> DST["Destination location"]
  JM --> LOG["Log writer"]
  POOL --> LOG
Figure 4.1: The main internal parts of AzCopy and how a job flows through them

The figure shows a job moving from left to right. Let us walk through each part in turn.

The command-line front end

This is the part you talk to. It reads the words you type, such as which action you want, where the source is, where the destination is, and which options you chose. It checks that your request makes sense and then hands a clean job description to the rest of the program. If you mistype an option, this is the department that complains.

The credential handler

Before anything moves, AzCopy must prove to Azure that you are allowed to do this. The credential handler figures out which method you chose: a signed-in Microsoft Entra ID identity, a managed identity, a service principal, or a shared access signature (SAS) token attached to the web address. It attaches the right proof to every request. Chapter 6 covers these methods in detail.

The Job Manager

Every copy, sync, or remove request becomes a job with a unique identifier. The Job Manager owns the life of that job. It creates it, tracks progress, counts successes and failures, and answers when you ask “how is job number so-and-so doing?” Because jobs have identifiers, you can list them, inspect them, and resume them later.

The enumerator and scanner

To copy a folder of files, AzCopy must first know what is in the folder. The enumerator walks through the source, whether that is a local disk, a container, or another cloud, and produces a list of items to transfer. The clever part is that it does this at the same time as transferring. It does not wait to finish listing a million files before starting to send the first one. This overlap keeps the network busy from the first second.

Job plan files

As the scanner finds items, AzCopy writes a plan describing each transfer into small files on your local disk. These plan files live in a hidden folder named .azcopy inside your user home directory. The plan records which files are pending, in progress, completed, or failed. This is the memory that makes resuming possible. If the program crashes or you close the laptop, the plan still knows where things stood.

The transfer scheduler and worker pool

The scheduler decides which pieces of work run next. Each file may be broken into chunks, and each chunk becomes a unit of work placed on a queue. A worker pool is a set of tiny parallel workers, each of which picks up a chunk, fetches it from the source, and writes it to the destination. The number of workers is the concurrency, and it is the single biggest dial for speed.

The log writer

Every important event is written to a log file named after the job identifier, in the same .azcopy folder. The log records what was attempted, what failed, and why. When something goes wrong at three in the morning, this log is your detective’s notebook.

Analogy

Think of an airport baggage system. The check-in desk (front end) reads your ticket. The security officer (credential handler) confirms your identity. The dispatcher (Job Manager) assigns your trip a tag number. Scanners (enumerator) read each bag. A printed manifest (plan files) lists every bag and its status. Belts and loaders (workers) move bags in parallel. A black box recorder (log writer) notes everything. If the power fails, the manifest tells staff exactly which bags still need loading.

i
Tip

Know where your .azcopy folder is. When a job fails, the log file named with the job identifier explains the failure in plain text. Looking there first solves most mysteries within a minute.

5How AzCopy Works Inside: Chunks, Parallelism, and Recovery

This chapter follows a large file on its journey so you can see exactly why AzCopy is fast and why it can survive interruptions.

Why big files are cut into blocks

Uploading a 50 gigabyte file as one long stream would be slow and fragile. If the connection died at 49 gigabytes, you would start from zero. Azure block blobs solve this by letting a file arrive as many separate blocks. AzCopy slices the file into blocks, uploads many blocks at the same time over separate connections, and finally sends a “commit” message that tells Azure to assemble the blocks into one blob in the right order.

The service allows up to 50,000 blocks per blob and each block can be as large as 4,000 mebibytes. Multiply those numbers and you get the roughly 190 tebibyte ceiling for a single blob mentioned earlier. AzCopy chooses a block size automatically based on the file size, and you can override it if you have a reason.

Analogy

Sending a very large jigsaw puzzle by post is easier as many small envelopes than as one huge crate. If one envelope is lost, you resend only that envelope. At the other end, a helper follows a numbered list to put the pieces in the right order. Blocks and the commit step work the same way.

sequenceDiagram
  participant Disk as Local disk
  participant AZ as AzCopy workers
  participant Blob as Azure Blob service
  Disk->>AZ: Read block 1, 2, 3 and more in parallel
  AZ->>Blob: Put Block 1
  AZ->>Blob: Put Block 2
  AZ->>Blob: Put Block 3
  Blob-->>AZ: Acknowledge each block
  AZ->>AZ: Retry any block that failed
  AZ->>Blob: Put Block List to commit
  Blob-->>AZ: Blob is now complete
Figure 5.1: How one large file is uploaded as parallel blocks and then committed

Many small files are a different challenge

A single huge file is limited by bandwidth: how many bits per second the wire can carry. A million tiny files are limited by something else, the number of requests per second. Each small file needs its own set of conversations with the server, and the time spent talking can exceed the time spent carrying data. For this reason, a folder of ten million 10-kilobyte files can take far longer than one 100-gigabyte file, even though the totals are similar. AzCopy handles this by running many files in parallel, but the request rate that Azure Storage allows still sets a ceiling.

Retries and the idea of idempotency

Networks are messy. Packets get lost, servers say “I am busy, try again,” and wireless connections hiccup. AzCopy treats these as normal events. When a chunk fails with a temporary error, it waits a short time and tries again, and it lengthens the wait after each failure. This pattern is called exponential backoff, and it prevents a flood of angry retries from making an overloaded server even slower.

Retrying is safe because most storage operations are idempotent, a long word meaning that doing the same thing twice leaves the same result as doing it once. Uploading block number 7 twice just replaces block 7 with identical data. This property is why a robust tool can be so relentless about retrying.

Integrity checking with hashes

How do you know the copy is identical to the original? The answer is a hash, a short fingerprint calculated from a file’s contents. If even one bit changes, the fingerprint changes. AzCopy can calculate an MD5 fingerprint of each local file during upload and store it with the blob. On download, it can recompute the fingerprint and compare. If they differ, the file is flagged as failed rather than silently accepted. Turning these checks on costs a little time but gives strong confidence in important data.

The life of a job, step by step

1

You submit the request

The front end validates your command and the credential handler prepares proof of identity.

2

Scanning begins

The enumerator starts listing the source and writes plan files describing each item.

3

Work is queued

The scheduler splits files into chunks and places them on the work queue.

4

Workers transfer in parallel

Many workers move chunks at the same time, retrying temporary failures with backoff.

5

Files are finalised

Blocks are committed, hashes are compared if requested, and plan files are updated to completed or failed.

6

A summary is printed

You see counts of completed, failed, and skipped items, plus the job identifier for later inspection.

Resuming a job after an interruption

Because the plan files remember every item’s state, AzCopy can resume a job. You list your jobs, find the identifier, and ask AzCopy to resume it. Only the unfinished items are retried. You can also ask it to resume while skipping or retrying only failed items, which is useful when you have fixed the cause of the failure.

!
Watch out

AzCopy does not store your SAS tokens in the plan files, for security reasons. When you resume a job that used SAS tokens, you must supply them again. Forgetting this is one of the most common reasons a resume attempt fails with an authorization error.

Server-to-server copies: the data never visits you

When both the source and the destination are in Azure Storage, or when the source is a supported cloud such as Amazon S3, AzCopy can ask the destination service to pull the data directly from the source. The bytes travel across the provider networks, not through your laptop. Your machine only sends small instructions. This is why a laptop on a slow hotel connection can still orchestrate a massive account-to-account copy: the laptop is the conductor, not the orchestra.

Analogy

It is like asking a shop in one city to ship goods directly to a shop in another city, rather than collecting the goods yourself and carrying them across. You only make the phone call. The trucks do the work.

6Proving Who You Are: Authentication and Authorization

Before Azure lets a single byte in or out, it asks two questions. Who are you, and are you allowed to do this? This chapter explains how AzCopy and Storage Explorer answer both.

Authentication versus authorization

Authentication is proving your identity, like showing a passport at a border. Authorization is the list of things that identity is allowed to do, like the visa stamped inside the passport. A person can be perfectly authenticated and still be refused because their visa does not cover the action they attempt. Many beginner errors that show as “403 Forbidden” are authorization problems, not sign-in problems.

Analogy

Picture an office building. The front desk checks your photo ID (authentication). Your badge then opens only certain doors, such as the third floor but not the server room (authorization). If you stand in front of the server room door with a valid ID and a badge that does not open it, the door still stays shut.

Method one: Microsoft Entra ID sign-in

Microsoft Entra ID (formerly known as Azure Active Directory) is the identity system that holds your work or school account. With AzCopy, you sign in once with a login command, and AzCopy then uses short-lived tokens issued to you. No secret ever sits inside a file or a script. This is the method Microsoft recommends for people, because access can be controlled centrally, revoked instantly, and audited.

Signing in is only half the story. You also need a role assignment that grants data permissions. The most common roles for blobs are Storage Blob Data Reader (read and list), Storage Blob Data Contributor (read, write, and delete), and Storage Blob Data Owner (everything, including setting access rules on Data Lake folders). A role can be assigned at the level of the storage account, a single container, or even a resource group or subscription above them.

!
Watch out

Being the Owner or Contributor of a subscription does not automatically let you read or write the data inside a storage account. Those roles control the management plane, which is about creating and configuring resources. Data access needs a data plane role such as Storage Blob Data Contributor. After you assign a role, wait a few minutes for it to take effect.

Method two: shared access signatures (SAS)

A shared access signature is a long web address with a special token attached. The token states what is allowed, for how long, and from which network addresses. Anyone who holds the link can do exactly what the token permits, without signing in. SAS tokens are handy for giving a contractor temporary access or for automated jobs that cannot sign in interactively.

There are three kinds. A user delegation SAS is signed using Entra ID credentials, so it inherits the safety of your identity system and is the preferred kind. A service SAS grants access to one service, such as one container, and is signed with the account key. An account SAS can cover several services and is also signed with the account key. The key-signed kinds are powerful, so their lifetime should be short and their permissions narrow.

Analogy

A SAS link is like a hotel key card that you can program. You set which room it opens, on which dates, and nothing else. You hand it to a guest, and they never need to visit the front desk. The risk is that anyone who finds a dropped card can use it until it expires.

Method three: managed identities and service principals

Automated jobs need to sign in without a human. Two options exist. A managed identity is an identity Azure itself creates and attaches to a resource such as a virtual machine. The machine can sign in as that identity without any password stored anywhere. A service principal is an application identity you create yourself, authenticated by a secret or a certificate. Both can be given the same data roles as a person. When your scripts run inside Azure, a managed identity is the safest choice because there is no secret to leak.

What about the account key?

Every storage account has two powerful access keys, which act like master passwords for the whole account. AzCopy intentionally does not accept account keys. This is a deliberate safety choice that nudges you toward Entra ID or SAS. Storage Explorer, by contrast, can use an account key when you attach an account by name and key, and it can also fetch a key on your behalf if your Azure role is allowed to list them. Many security teams turn off key-based access on storage accounts entirely, in which case only identity-based access and user delegation SAS tokens work.

Choosing the right method

SituationBest methodWhy
You, working on your own laptopEntra ID sign-in with a data roleShort-lived tokens and central control
Scripts running inside AzureManaged identityNo stored secret at all
Build pipelines outside AzureService principal with certificateNon-interactive and revocable
Temporary access for an outsiderUser delegation SAS, short expiryNarrow scope and automatic expiry
Copying from Amazon S3AWS access keys for the source, Entra or SAS for AzureEach cloud checks its own side

One more detail worth knowing: Azure Files has historically leaned more on SAS in AzCopy than Blob storage does. Newer releases add identity-based options for file shares, so check the current official documentation before you plan a file share transfer.

7AzCopy in Action: The Core Operations

AzCopy has a small set of verbs. Learn these few and you can express almost any data movement task.

The main commands, in plain words

login

Sign in

Starts an Entra ID sign-in so later commands can use your identity. A matching logout removes the session.

copy

Copy data

The workhorse. Uploads, downloads, and copies between accounts or from other clouds. It can copy a single file or a whole folder tree.

sync

Make the destination match

Compares source and destination and copies only what is new or changed. It works in one direction only.

remove

Delete data

Deletes blobs or files in bulk. Powerful and permanent unless soft delete is enabled, so use with care.

list

See what is there

Lists the contents of a container or share, which helps you check results from the command line.

make

Create a container or share

Creates an empty destination before you fill it.

jobs

Manage past runs

Lists jobs, shows details of one job, resumes an interrupted job, or cleans up old plan files.

env and bench

Inspect and test

The env command shows the settings that influence AzCopy. The bench command runs a speed test against a storage location with generated data.

The four directions of copy

Think of copy as having four directions, and each one has slightly different behaviour.

1

Upload: local to Azure

AzCopy reads your disk and sends blocks to Azure. Your upload speed and disk speed are the limits. Data entering Azure is not charged for bandwidth.

2

Download: Azure to local

AzCopy fetches blocks and writes them to disk. Your download speed and disk write speed matter. Data leaving Azure to the internet can incur egress charges.

3

Account to account

Both ends are in Azure. The destination pulls from the source directly, so your laptop only orchestrates. Cost depends on whether the accounts are in the same region.

4

Other clouds to Azure

AzCopy can pull from Amazon S3 and Google Cloud Storage into Blob storage. You supply the source cloud’s credentials, usually through environment variables, and Azure fetches the objects.

Copy versus sync: a crucial difference

Copy transfers everything you point it at, and by default it overwrites files that already exist at the destination. You can change that by telling it to skip existing files, to overwrite only when the source is newer, or to ask you each time. Sync first compares the two sides and then transfers only the differences. By default it compares the last-modified time, and a hash comparison mode is available for stricter checking.

Sync can also remove files at the destination that no longer exist at the source, but only if you ask for that with a delete option. This is an important safety valve. Without it, sync only ever adds and updates. With it, sync makes the destination an exact mirror, which means a mistake in the source, such as an accidentally emptied folder, can propagate as deletions.

Analogy

Copy is like photocopying a whole binder every time. Sync is like a diligent assistant who flips through both binders, notices that only pages 12 and 40 changed, and replaces just those pages. If you also say “and shred any page I removed,” the assistant will do that too, so be sure about your instructions.

Useful options you will reach for

  • Recursive: include everything inside subfolders, not just the top level.
  • Include and exclude patterns: filter by file name pattern, such as only images or everything except temporary files.
  • Dry run: show what would happen without doing it. This is the single best habit for safe operations.
  • Block blob tier: choose Hot, Cool, Cold, or Archive at upload time.
  • Put MD5 and check MD5: store hashes on upload and verify them on download.
  • Cap on megabits per second: limit bandwidth so you do not starve other users of the network.
  • Log level: choose how detailed the log should be, from quiet to chatty.
  • List of files: supply a text file naming exactly which items to move, useful when you already know the set.
  • Follow symbolic links: by default, shortcut-like links are skipped, and this option tells AzCopy to follow them.
i
Tip

Always run a new copy or sync with the dry-run option first, read the output, and only then run it for real. It costs seconds and prevents the classic mistake of copying to the wrong container or deleting the wrong prefix.

Special content: permissions and metadata

Files carry more than their bytes. They have names, timestamps, metadata labels, and, on file shares, permissions. AzCopy preserves metadata and, for Azure Files, can preserve SMB attributes, timestamps, and security descriptors if you ask. For Data Lake Storage Gen2, newer versions can carry access control information between accounts. These options matter during migrations, where users expect their folder permissions to still make sense on the other side.

A hypothetical scenario

A design agency keeps 6 terabytes of finished project files on an office server. It signs in with Entra ID, creates a container, and runs a first copy at night with a bandwidth cap so staff can still use the internet during the day. After the first week, the nightly job switches to sync so only changed files move. When a laptop is lost, the agency downloads a few projects from Azure. The same tool serves backup, restore, and migration.

8Making Transfers Fast: Performance and Scalability

Speed comes from understanding where the bottleneck is. This chapter teaches you to find it, and then to loosen it.

The chain of limits

A transfer is a chain of steps, and the whole chain moves only as fast as its slowest link. The chain includes the source disk, your computer’s processor and memory, your network card, your office network, your internet connection, the Azure network, and finally the storage account itself. Making one link ten times faster does nothing if another link is the real limit.

Analogy

Imagine filling a swimming pool through a garden hose attached to a big tap. Replacing the tap with a bigger one does not help. The hose is the narrow part. Find the hose first.

Know your workload: big files or many files

Large files

  • Limited mainly by bandwidth.
  • Block-level parallelism keeps the pipe full.
  • Fewer requests, so lower operation costs.
  • Usually reach the highest throughput.

Many tiny files

  • Limited by request rate and per-file overhead.
  • Listing and scanning take real time.
  • More operations, so higher transaction costs.
  • Often benefits from packing files into archives first.

The dials you can turn

Concurrency controls how many transfers run at the same moment. AzCopy picks a sensible default that scales with the number of processor cores and tunes itself while running. You can raise or lower it through an environment setting. Higher values help on fast links with many files. Too high a value can overwhelm a small computer or trigger throttling at the server.

Block size controls how large each block is. Larger blocks mean fewer requests, which suits large files on fast links. Smaller blocks suit unreliable links, because a failed block costs less to retry. The automatic choice is good for most work.

Bandwidth cap deliberately limits speed. People sometimes forget that going slower can be the right call: capping at 70 percent of a shared office link keeps video calls working during a daytime migration.

Buffer memory is the amount of computer memory AzCopy may use to hold blocks in flight. If the machine is short of memory, reduce it. If you have plenty, increasing it can help throughput on very fast links.

Throttling: when Azure says “slow down”

Azure Storage publishes scalability targets, which are limits on how much traffic one account and one partition can handle. Storage divides blob names into ranges, and a heavy burst against one narrow range can hit the ceiling. When that happens, the service answers with “server busy” messages (HTTP status 503) or timeouts. AzCopy reads these, backs off, and retries, so the job slows but does not fail. If you see large amounts of throttling in the log, spread the load, reduce concurrency, or request higher limits from Azure support when your business case calls for it.

Measure before you tune

AzCopy includes a benchmark mode that uploads and downloads generated data to a target container so you can see the speed your setup can reach, without involving real files. Run it from the machine that will do the real transfer. If the benchmark is fast but the real job is slow, your source disk or your file mix is the cause. If the benchmark is slow too, look at the network or the computer itself.

SymptomLikely causeWhat to try
Speed far below link capacity with many small filesPer-request overheadRaise concurrency, or bundle small files into larger archives
Speed rises then falls in wavesThrottling at the serverLower concurrency, spread names across prefixes
Computer becomes sluggishToo much concurrency or memory useLower concurrency and buffer size
Fast start, slow tailA few very large files remainNormal; block parallelism helps, so check the link
Slow scanning before transfer beginsHuge number of items to listUse a list of files, or split the job into folders
Disk at 100 percent busySlow source or destination diskUse a faster disk or reduce parallel reads

Placing the machine near the data

Distance adds delay. If you are copying between accounts, run the command from anywhere, because the data does not pass through you. If you must upload from on-premises, consider the nearest Azure region and, for sustained heavy needs, a dedicated private connection such as ExpressRoute, which avoids the shared public internet. Another approach is to run AzCopy on a virtual machine inside Azure in the same region as the storage account, especially when the source is another cloud, because the pulled data then crosses fewer networks.

i
Note

Scaling up one machine has limits. For very large migrations, teams often run AzCopy on several machines at once, each handling a different slice of the data, such as different top-level folders. Because jobs are independent, this scales almost linearly until you meet the storage account’s own limits.

9Azure Storage Explorer: Architecture and Features

Now we turn to the friendly side. Storage Explorer packs a surprising amount of power into a window that looks like an ordinary file manager.

flowchart TB
  USER["Person at the keyboard"] --> UI["Storage Explorer desktop app"]
  UI --> CONN["Sign in and connection manager"]
  UI --> TREE["Resource tree and detail panes"]
  UI --> ACT["Activities queue"]
  CONN --> ENTRA["Microsoft Entra ID"]
  TREE --> API["Storage service calls"]
  ACT --> AZ["Bundled AzCopy engine"]
  API --> STORE["Azure Storage account"]
  AZ --> STORE
Figure 9.1: Storage Explorer as a friendly front end over the storage service and AzCopy

The pieces of the application

The connection manager handles how you reach your storage. You can sign in with your Azure account, and Storage Explorer then lists every subscription and storage account your identity can see. You can also attach a single resource using a connection string, an account name with a key, a SAS link, or a link to a public container. A local emulator called Azurite is supported too, which lets developers practise with a pretend storage account on their own computer.

The resource tree on the left shows accounts, then services such as blob containers, file shares, queues, and tables. Selecting any node shows its content on the right. Because the tree reads from the storage service directly, what you see is always the live state, not a cached picture.

The Activities pane tracks transfers and long operations. Uploads, downloads, and copies appear there with progress, speed, and counts of successes and failures. Failed items can be retried from this pane, and you can often open a detailed log. Behind the scenes, this queue hands the heavy work to the bundled AzCopy engine.

What you can do with it

Browse

See your data

Navigate containers and virtual folders, search by name prefix, preview many file types, and view or edit properties and metadata.

Transfer

Upload and download

Drag files or folders in and out, or use the toolbar. Copy and paste a container or folder between two accounts.

Share

Generate SAS links

Create a link for a single blob or a whole container with chosen permissions and an expiry time.

Protect

Recover and version

Show soft-deleted items and restore them. View snapshots and versions, and promote an older version back to current.

Tune

Change tiers and leases

Move blobs between access tiers, rehydrate from Archive, and manage leases that lock a blob against changes.

Secure

Manage access

Edit stored access policies and, on Data Lake Storage Gen2, view and edit folder-level access control lists.

Inspect

Queues and tables

Read and add queue messages, and view or edit table rows, which AzCopy cannot do.

Develop

Work against the emulator

Connect to Azurite for local testing, then switch to a real account with the same tool.

Two ways to authorize inside Storage Explorer

When you sign in with your Azure account, Storage Explorer can reach data in two ways. It can use your identity and data roles directly, which is the safest option. Or, if your account has permission to list account keys, it may fall back to using a key behind the scenes. The practical lesson is that “I can see the storage account in the tree” does not mean “I can open its containers.” If you only hold a management role, you may see the account but get an error opening a container until someone grants you a data role.

The browser-based sibling

The Azure portal includes Storage browser, a lighter web version of the same idea. It needs no installation, which makes it ideal on locked-down machines. It is less capable for very large transfers because the browser sits in the middle, so treat it as a viewing and light editing tool.

Analogy

If AzCopy is the night shift forklift driver, Storage Explorer is the ground-floor customer service counter. Customers can see their goods through the glass, ask for one item, request a receipt, or reorganise a shelf. For a single request the counter is faster than writing a work order for the night shift.

10Using Storage Explorer Well: Daily Workflows and Safe Habits

A good tool used carelessly still causes damage. These workflows and habits keep Storage Explorer helpful rather than hazardous.

Getting connected the right way

For everyday use, sign in with your organisation account and let the tool discover your subscriptions. If you only need one account, you can filter the subscription list so your tree stays tidy. Use a connection string or account key only when no identity option exists, and treat those secrets like passwords. Storage Explorer stores connection details in the operating system’s secure credential store, but anyone who can use your logged-in computer can use the connections, so lock your screen.

Four common daily tasks

1

Check that a transfer worked

After AzCopy finishes, open the container in Storage Explorer, compare counts and sizes, and spot-check a few files. Folder statistics help confirm totals.

2

Share one file temporarily

Right-click a blob, choose the option to generate a SAS, pick read-only permission and a short expiry such as a few hours, and send the link.

3

Recover something deleted

If soft delete is enabled, switch the view to show deleted items, select the blob, and undelete it. Do this soon, because soft-deleted data expires after the retention period.

4

Fix a mislabelled file

Open properties, change the content type or metadata, and save. A wrong content type is a classic cause of web browsers downloading an image instead of showing it.

Be careful with delete and overwrite

Graphical tools make destructive actions feel casual. A right-click and a confirm dialog can delete a container holding millions of blobs. Before deleting, ask three questions. Is soft delete or versioning enabled so I can recover? Am I connected to the account I think I am? Is this the production environment or the test one? Many painful incidents begin with a person deleting the right folder in the wrong account.

!
Watch out

Storage Explorer shows all your accounts in one tree, often including both test and production. Rename or colour-code your connections where possible and read the account name in the title bar before any destructive action.

Large jobs inside a graphical tool

Storage Explorer can handle big transfers, since AzCopy powers them. But there are practical limits. The app must stay open and the computer must stay awake. A crash of the application interrupts the transfer, though the Activities pane can usually retry unfinished items. There is no schedule, no script, and no way to run it on a server without a screen. If a job will run for many hours or must be repeated, graduate to AzCopy.

Settings worth knowing

The settings let you adjust transfer concurrency, configure a proxy if your company network requires one, and tune how the app signs in. If uploads are overwhelming a shared office connection, lowering the concurrency setting is a gentle fix. If your company inspects traffic with a proxy that re-signs certificates, you may need to import that certificate into the application so connections are trusted.

A hypothetical day

A support engineer at a software company gets a ticket: a customer cannot download a report. The engineer opens Storage Explorer, finds the container for that customer, sees that the blob’s content type is wrong, fixes it in properties, then generates a one-hour read-only link and pastes it into the ticket. The whole task takes four minutes with no commands. This is exactly where a graphical tool shines.

Use the counter for a single request, and the forklift for a warehouse.

11Choosing the Right Tool: AzCopy, Storage Explorer, and Other Options

AzCopy and Storage Explorer are two tools in a larger toolbox. Knowing when to use something else is a mark of real experience.

flowchart TD
  A["You need to move data"] --> B{"How much and how often"}
  B -->|"A few files, one time, by hand"| C["Storage Explorer"]
  B -->|"Many files, large, or repeated"| D["AzCopy"]
  B -->|"Tens of TB and a slow network"| E["Offline Data Box family"]
  B -->|"Transforms, schedules, many sources"| F["Azure Data Factory pipelines"]
  B -->|"Managed on-premises file migration"| G["Azure Storage Mover"]
Figure 11.1: A simple decision map for choosing a data movement approach

The other tools, explained

Offline transfer

Azure Data Box family

Microsoft ships you a rugged storage device. You fill it locally, ship it back, and Microsoft loads the data into your account. Sizes range from small disks to devices holding many terabytes, and a heavy-duty model reaches about a petabyte. Best when your network is slow or the data is enormous.

Pipelines

Azure Data Factory and Synapse pipelines

A managed service for scheduled, orchestrated data movement that can also transform data between dozens of sources. Best when movement is part of a bigger data workflow, not just a copy.

Managed migration

Azure Storage Mover

A managed service that helps migrate on-premises file shares into Azure Storage, with agents, projects, and tracking handled for you. Best for planned file server migrations at organisational scale.

Hybrid

Azure File Sync

Keeps an on-premises Windows file server synchronised with an Azure file share continuously, so Azure becomes the central copy. This is ongoing synchronisation, not a one-off move.

Scripting

Azure CLI and PowerShell

General-purpose automation tools. They manage resources and can move small to medium amounts of data, and the CLI’s storage copy command uses AzCopy under the hood.

Windows file tools

Robocopy and similar

Traditional Windows copy tools can work against mounted Azure file shares, and are useful when you need to preserve Windows-specific attributes. They are not suited to Blob storage.

Built-in feature

Object replication

A storage account feature that automatically copies new blobs from one account to another in the background. It is a policy, not a transfer tool, and it does not bring along data that already existed before the rule.

Code

Storage SDKs and REST API

Programming libraries for building data movement into your own applications when you need full control, at the price of writing and maintaining the code.

A practical comparison

NeedGood first choiceReason
Drop a handful of files into a containerStorage ExplorerFastest to do by hand
Nightly upload of changed files from a serverAzCopy sync on a scheduleScriptable and efficient
Copy a whole container between two accountsAzCopyServer-to-server copy at scale
Move 200 TB over a 200 Mbps linkData BoxNetwork would take years
Ingest from a dozen databases and files, with cleansingData FactoryOrchestration and transformation
Migrate many departmental file serversStorage MoverManaged tracking and agents
Inspect a queue or edit a table rowStorage ExplorerAzCopy does not handle these
Keep a copy of new blobs in another region foreverObject replicationAutomatic and policy driven

The time rule of thumb for offline devices

Go back to the math in chapter 1. If the estimated network transfer time is measured in weeks or months, and a shipped device could arrive, be filled, and return in about the same or less, then offline wins. The ship-and-load approach has a fixed schedule that does not depend on your internet speed. Many teams combine approaches: ship a device for the first giant bulk load, then use AzCopy over the network to sync the changes made while the device was in transit.

Analogy

If you need to move a library of books to another city, driving a van of boxes beats posting each book separately. But once the van arrives, you still post the new books published since you packed it. Offline devices are the van, and AzCopy sync is the post.

i
Tip

Product names and features in this area evolve. Before committing a large budget to a specific service, check the current Azure documentation for supported sources, size limits, and pricing, because details change over time.

12The Data Flow and Lifecycle of a Real Migration

Large migrations succeed because of preparation, not because of speed. This chapter walks through the lifecycle from first idea to final sign-off.

flowchart LR
  A["Assess"] --> B["Plan"]
  B --> C["Prepare Azure"]
  C --> D["Pilot"]
  D --> E["Bulk load"]
  E --> F["Delta sync"]
  F --> G["Verify"]
  G --> H["Cutover"]
  H --> I["Decommission"]
  F --> F
Figure 12.1: The stages of a migration, with delta sync repeating until cutover

Stage 1: Assess the data you actually have

Count before you move. How many files? How large in total? What is the size of the biggest file? How are the files spread across folders? What file names exist that might cause trouble, such as names with unusual characters, very long paths, or names that differ only by capital letters? Blob names are case sensitive, while Windows file systems usually are not, so two files that Windows treats as the same name could collide or surprise you. Also ask which data is old and rarely read, because that data may belong in a cooler tier from day one.

Stage 2: Plan the destination

Decide on the storage account design. How many accounts? Which region? Which redundancy level? Will you turn on the hierarchical namespace? Which container layout will make sense in five years? Choosing a clean naming scheme now saves enormous pain later, because renaming in a flat blob namespace means copying everything again. Decide on lifecycle rules, such as moving data to Cool after 30 days and to Archive after a year.

Stage 3: Prepare Azure

Create the account and containers. Assign data roles to the identity that will run the transfer. Configure the firewall and private network access so that the machine doing the transfer can reach the account. Enable soft delete and versioning so a mistake can be undone. Decide how you will authenticate the scripts. Make sure logging and monitoring are on before the first byte flows.

Stage 4: Run a pilot

Transfer a small but representative slice, perhaps one percent of the data including the largest files and the strangest file names. Measure speed. Check results by comparing counts, sizes, and hashes. Fix surprises while the stakes are low. A pilot also lets you give the business a realistic completion date instead of an optimistic guess.

Stage 5: The bulk load

Run the main transfer, often across nights and weekends and with a bandwidth cap to protect daytime users. Break the job into logical slices, such as one top-level folder per job, so that a problem affects only one slice and so that you can run slices in parallel on different machines. Keep every job identifier and log file.

Stage 6: Delta sync until cutover

While the bulk load ran, users kept working, so the source has changed. Run sync jobs repeatedly. Each pass moves only what changed since the last one, so each pass is shorter. Eventually a pass is so short that you can freeze the source briefly for a final sync. This repeating loop is shown by the arrow pointing back to the same box in the figure.

Stage 7: Verify

Compare counts and total sizes between source and destination. Sample files and compare hashes. Check that metadata and content types look right. Run a trial restore of a few items. Verification is not the same as “the tool said it finished.” A tool can report success on what it was asked to copy, but it cannot tell you that you forgot to ask for a folder.

Stage 8: Cutover and decommission

Switch applications and users to the new location during an agreed window. Keep the old data untouched for a safety period, such as 30 to 90 days, then retire it. Document what you did, because the next person, possibly you in a year, will thank you.

Analogy

Think of moving a restaurant to a new building. You inspect the new kitchen first (prepare), cook a test dinner for friends (pilot), move the big equipment (bulk load), carry over the last ingredients on opening morning (delta sync), taste the food to check nothing is wrong (verify), open the doors (cutover), and only later return the old keys (decommission).

What flows where during a transfer

It helps to picture the data path clearly. For an upload, bytes flow from the source disk, through AzCopy’s memory buffers, over your network and the internet, to the Azure front end, and into storage, where they are written to several copies according to your redundancy setting. Control messages, such as authentication and block commits, flow alongside. For an account-to-account copy, the control messages come from your machine, but the bytes flow only inside the cloud. Understanding this tells you what to fix when something is slow: for uploads, look at your side; for account-to-account copies, look at the service limits.

13Security: Protecting Data in Motion and at Rest

Data movement briefly creates risk, because information leaves its normal protected home and travels. Good habits shrink that risk to almost nothing.

Encryption in transit and at rest

AzCopy and Storage Explorer talk to Azure over secure HTTPS connections, which means the data is encrypted while it travels. Once it lands, Azure Storage encrypts all data at rest automatically, using Microsoft-managed keys by default. Organisations with stricter rules can use customer-managed keys stored in Azure Key Vault. You do not need to encrypt files yourself before uploading, though some teams do so for extra protection of highly sensitive material.

Least privilege: only what is needed

Least privilege means giving each identity the minimum access required for its job and no more. A nightly upload job needs write access to one container, not owner rights on the whole account. A reporting job that only downloads needs read access. Assign roles at the narrowest sensible scope, and review them regularly. Roles granted for a one-off migration should be removed when the migration ends.

Treat SAS tokens like cash

  • Prefer user delegation SAS tokens over account-key-signed ones.
  • Set the shortest practical expiry. Hours, not months.
  • Grant only the permissions needed, such as read and list but not write or delete.
  • Restrict by network address when the client has a stable address.
  • Never paste SAS links into chat channels, tickets, or public repositories. Search engines and bots scan these places.
  • For service SAS tokens, use a stored access policy so you can revoke a token without rotating the account key.
!
Watch out

Shell history and log files can quietly collect secrets. A command line containing a SAS token may be saved in your terminal history, and a URL with a token may appear in a log. Clean up, avoid pasting tokens into shared screens, and prefer identity-based sign-in where you can.

Network controls

A storage account has a built-in firewall that can restrict access to chosen networks and addresses. A private endpoint gives the account a private address inside your virtual network, so traffic never crosses the public internet. When these controls are on, your transfer machine must be inside an allowed network, or its address must be on the allow list. A very common surprise is a perfectly valid sign-in that still fails with an authorization error, because the storage firewall blocked the machine’s network address. Always check the firewall when “it worked from my other computer.”

Turning off shared keys

The strongest posture is to disable shared key authorization on the storage account entirely, so only Entra ID and user delegation SAS work. This removes the master-password risk. Do this after confirming that all tools and applications that need access have identity-based options. Storage Explorer then relies on your signed-in identity rather than keys.

Protecting against mistakes and attacks

Security also means surviving mistakes and malicious deletion. Turn on soft delete for blobs and containers so deleted items can be recovered for a retention period. Turn on blob versioning so overwrites keep previous versions. Consider immutable storage, which makes data write-once, for records that must not change. Use resource locks to prevent accidental deletion of the whole storage account. Together these form a safety net that matters especially when sync with deletion is in use.

Analogy

Soft delete is the recycle bin on your computer. Versioning is the history feature in a document editor. Immutability is a sealed envelope that no one, not even the owner, can reopen until a set date. Locks are the guard over the building’s main door. You hope never to need any of them, and you are glad they exist on the day you do.

Auditing who did what

Enable diagnostic logging on the storage account so that read, write, and delete operations are recorded, with the identity or token used. When something strange happens, such as a sudden spike in deletes, those logs tell you who did it and from where. Send them to a central log store with alerts, so someone is told within minutes rather than discovering the problem next quarter.

14Monitoring, Logging, and Troubleshooting

Things will go wrong. The difference between a bad night and a quick fix is knowing where to look.

Three places to look

Client side

AzCopy logs and job summary

The log for each job lists every failed item with the reason. The job show command gives counts, and the jobs resume command retries unfinished work.

Server side

Storage metrics

Azure Monitor shows ingress, egress, transactions, latency, and error rates for the account. These reveal throttling and capacity trends.

Audit trail

Resource and diagnostic logs

Show which identity performed which operation, and also how requests were authorized. These help with both security and blame-free debugging.

Reading common errors

Most failures fall into a few families, and learning to recognise them makes you fast.

What you seeUsual meaningFirst things to check
403 Forbidden or “authorization failure”Identity or token not permittedData role assigned and propagated, SAS permissions and expiry, storage firewall, clock drift
401 UnauthorizedSign-in missing or expiredSign in again, check token lifetime
404 Not FoundContainer or blob does not existSpelling, case sensitivity, correct account and container
409 ConflictResource already exists or is leasedExisting blob with lease, existing container, overwrite setting
503 Server Busy, timeoutsThrottling or transient troubleLower concurrency, retry later, spread load
Source changed during transferFile modified while being readCopy from a snapshot or after the application stops writing
Hash mismatchCorruption or modificationRetry the file, check disk health, compare with original
Certificate or TLS errorsProxy inspecting trafficTrust the corporate certificate, check proxy settings

A systematic way to debug

1

Read the summary

How many items failed and what share of the job is that? A few failures often point to bad file names. All failures point to authorization or network.

2

Open the job log

Find the first error, not the last. Later errors are often side effects of the first.

3

Reproduce on one file

Try a single small file with the same settings. If it works, the problem is in volume or specific files. If it fails, the problem is in setup.

4

Check the other side

Look at the server metrics and logs to see whether Azure even received the request, and what it answered.

5

Fix and resume

Correct the cause, supply any SAS tokens again, and resume the job rather than starting over.

Tracking progress without watching the screen

For long jobs, you do not want to stare at a console. Run AzCopy through a scheduler or pipeline that captures its output, and parse the final summary for failure counts. Many teams alert if the number of failed transfers is above zero, or if a nightly sync has not completed by a certain hour. Pair this with storage metrics alerts, for example when the error rate or the throttling percentage rises sharply.

i
Tip

Keep a short run book for your transfer jobs: where they run, how they authenticate, where logs live, how to resume, and who to call. A one-page note turns a midnight emergency into a ten-minute task for anyone on the team.

Clock drift and other sneaky causes

Signed tokens depend on time. If the clock on your machine is several minutes wrong, tokens may appear to be not yet valid or already expired, and authorization fails mysteriously. Other sneaky causes include very long file paths that exceed operating system limits, files locked by another program, antivirus software scanning every file AzCopy touches, and laptops going to sleep in the middle of a job. Check these when the usual suspects are innocent.

15Design Patterns and Anti-patterns

A design pattern is a proven solution to a recurring problem. An anti-pattern is a tempting approach that keeps causing trouble. Here are the ones every data mover should know.

Patterns worth adopting

Pattern

Bulk then delta

Do one large first copy, then repeat small sync passes until cutover. It keeps the final downtime tiny.

Pattern

Slice and parallelise

Divide the data into independent slices by folder or prefix and run several jobs or machines at once. Failures stay contained.

Pattern

Landing zone

Upload into a staging container first, validate, then move or copy into the final container. Bad data never reaches production.

Pattern

Server-side first

Whenever both sides are in the cloud, let the cloud move the data instead of pulling it through your laptop.

Pattern

Identity over secrets

Use managed identities and Entra ID, so there is nothing to leak, rotate, or accidentally commit.

Pattern

Dry run, then run

Always preview. Treat the preview output as a peer review of your own command.

Anti-patterns to avoid

ANTI-PATTERN 01Avoid
Context

A team needs to mirror a production container to a backup container every night and uses sync with the delete option enabled.

The trap

An accidental cleanup script empties the source container at midnight. The sync job then dutifully deletes everything in the backup, because its job is to make the destination match the source. By morning, both copies are gone.

The better way

Run backup syncs without deletion, or enable soft delete, versioning, and immutability on the backup account. Keep the backup in a separate account with separate permissions, so a mistake in one place cannot reach the other.

ANTI-PATTERN 02Avoid
Context

A script needs access to storage, and the author wants it to work quickly, so an account SAS with every permission and a five-year expiry is generated and pasted into the script.

The trap

The script is committed to a shared code repository. The token is now public to everyone with repository access, and it cannot be cheaply revoked because it is signed with the account key.

The better way

Use a managed identity or service principal with a narrow data role. If a token is truly needed, use a short-lived user delegation SAS generated at run time.

ANTI-PATTERN 03Avoid
Context

A migration involves twenty million small log files, each a few kilobytes. The team points AzCopy at the root and waits.

The trap

The job spends enormous time scanning and making millions of requests. It runs slowly, costs a surprising amount in operation charges, and leaves the team with a million tiny blobs that are slow to read later.

The better way

Bundle small files into larger archives before upload, or change the producing application so it writes larger batches. Fewer, larger objects are cheaper and faster for both movement and later analysis.

More anti-patterns in brief

  • Using a graphical tool for a week-long job. The app and the laptop become single points of failure.
  • Skipping verification. “No errors shown” is not proof that everything arrived.
  • Running with maximum permissions “just for now.” Temporary broad access has a habit of becoming permanent.
  • Hardcoding the account name and container in many scripts. Use a single configuration source, so changes happen in one place.
  • Ignoring the tier at upload time. Uploading everything as Hot and fixing later can create avoidable charges.
  • Forgetting the firewall. A locked-down account refuses even valid credentials from an unlisted network.

16Best Practices, Cost Awareness, and Common Mistakes

This chapter gathers the habits that separate smooth migrations from stressful ones, and shows where the money goes so there are no surprises on the bill.

Where the cost comes from

Moving data touches several kinds of charges. Understanding them helps you plan, and none of them requires you to memorise price lists, since prices change by region and over time.

Cost typeWhat triggers itHow to keep it low
Storage capacityGigabytes kept per month, by tierChoose the right tier at upload, use lifecycle rules
OperationsEvery write, read, list, and delete, billed per set of 10,000Use fewer, larger files; avoid needless repeated listing
Data egressData leaving Azure to the internet or another regionKeep copies in the same region, avoid repeated downloads
Early deletionRemoving data before a tier’s minimum retentionDo not place short-lived data in Cool, Cold, or Archive
RehydrationReading back data from ArchivePlan reads, and keep frequently needed data out of Archive
Transfer computeA virtual machine running your jobsShut it down after the migration ends

Data entering Azure is generally not charged for bandwidth, which is good news for uploads. But operations are charged, so a migration of a hundred million small files costs more in operations than a migration of a hundred large files with the same total size. This is another reason to bundle small files when you can.

Habits that pay off

1

Estimate first

Do the bandwidth math and the operation count math before starting. Share the estimate with stakeholders.

2

Pilot with the ugliest data

Include your largest files, deepest folders, and strangest names in the pilot. Easy data teaches you nothing.

3

Cap bandwidth during business hours

Be a good neighbour on a shared network. Let the job run at full speed overnight.

4

Turn on safety nets before you start

Soft delete, versioning, and logging should be on before the first transfer, not after the first mistake.

5

Automate repeated work

Anything you do twice should be a script. Scripts are reviewable, repeatable, and teachable.

6

Verify and document

Compare counts, sizes, and sample hashes. Write down what you ran, with job identifiers.

Common mistakes, in plain words

  • Trusting a default overwrite. A copy can replace newer files at the destination with older ones. Check overwrite behaviour before running.
  • Mixing up source and destination. The order matters. Read the dry-run output out loud.
  • Forgetting trailing path details. Copying a folder and copying the contents of a folder differ, and the result can be one extra level of nesting. Test on a small sample.
  • Not planning for file name problems. Characters that are legal on one system may be awkward on another, and very long paths can fail. Scan names in the assessment stage.
  • Letting the machine sleep. A laptop that hibernates at 2 a.m. stops your job. Change power settings or use a server.
  • Forgetting that sync is one-directional. Changes made only at the destination are not brought back, and with deletion enabled they may be removed.
  • Ignoring time zones and clocks. Sync decisions based on modified time depend on clocks being sensible.
  • Believing speed numbers from marketing. Measure on your own network with your own data.
i
Tip

Write down the three numbers that define your job: total bytes, total file count, and largest file size. Almost every design decision in this guide follows from those three numbers.

Keeping the tools up to date

AzCopy is a single file, so updating is as simple as replacing it with the latest download. New versions fix bugs, improve speed, and add support for new storage features. Storage Explorer prompts you when an update is available. In scripts that run unattended, pin a specific version and test upgrades deliberately rather than letting a surprise change appear on a Saturday night.

17Real-World Usage Scenarios

The following scenarios are illustrative composites that show how the ideas combine. The names are invented, and the numbers are chosen to teach, not to describe any real company.

Scenario 1: A media company archives old footage

A video production house has 300 terabytes of finished footage on aging tape and disk arrays. Their internet link is 1 Gbps, which would need over a month at realistic speeds. They order Data Box devices for the bulk of the archive and ship them. Meanwhile, they use AzCopy over the network to upload current projects, directly into the Cool tier. After the devices are loaded, a lifecycle rule moves footage untouched for a year into Archive. Storage Explorer is used by editors to find and restore individual clips.

Scenario 2: A retailer’s nightly backup

An online retailer keeps order PDFs on a file server. A scheduled task on that server runs an AzCopy sync each night with a managed identity or a service principal, uploading new and changed files to a container with soft delete and versioning enabled. The job does not use the delete option. A monitoring alert fires if the failed count is above zero. Once a quarter, an engineer practises restoring a random sample with Storage Explorer to prove that backups truly work.

Scenario 3: Consolidating two cloud accounts after a merger

After a merger, two companies hold data in separate storage accounts in different subscriptions. An engineer signs in with an identity that has the right data roles in both, and runs account-to-account copies. The bytes flow inside Azure, so the engineer’s laptop barely participates. The engineer slices the work by top-level container, runs several jobs in parallel, and verifies each slice before deleting anything from the old account.

Scenario 4: A data science team pulls from another cloud

A research team keeps public datasets in Amazon S3 and wants them near their Azure compute. They run AzCopy on a virtual machine in the same Azure region as the destination account, supplying read-only AWS credentials. The destination pulls data directly from S3, the team applies an Archive-friendly layout, and they remove the temporary AWS credentials as soon as the job completes.

Scenario 5: A support engineer fixes a customer issue

A customer cannot open a document link. A support engineer opens Storage Explorer, finds the blob, sees that its SAS-based link expired, generates a new read-only link valid for a day, and sends it. The same engineer notices several blobs with a wrong content type and fixes them in bulk by editing properties. No scripts, no tickets to another team.

Scenario 6: A developer tests locally, then goes live

A developer builds an application that stores uploads in blob storage. During development, they connect Storage Explorer to the Azurite emulator on their laptop, inspect what the application writes, and clean up test data. When the application is ready, they connect the same tool to the real test account and later to production, with different identities and clear connection names to avoid mixing them up.

What these scenarios share

In every case, the winning move is choosing a tool to match the job rather than forcing one tool to do everything. The graphical tool handles looking, fixing, and sharing. The command-line tool handles volume, repetition, and automation. An offline device handles sheer size when the network is the limit. And in every case, the safety nets of identity-based access, soft delete, verification, and logging are on before the work begins.

18Frequently Asked Questions

Short answers to the questions beginners ask most often.

Q1Are AzCopy and Storage Explorer really free?
Yes, both can be downloaded and used at no charge. You still pay for the storage you use, the operations that tools perform, and any data leaving Azure that is billed as egress.
Q2Do I need to install AzCopy?
No installer is needed. You download the single program file for your operating system, place it in a folder, and optionally add that folder to your system path so you can call it from anywhere. It is also already available inside Azure Cloud Shell.
Q3Why can I see my storage account but not open its containers?
You probably have a management role but not a data role. Ask an administrator to assign a role such as Storage Blob Data Reader or Contributor at the account or container level, and wait a few minutes for it to apply. Also check that the storage firewall allows your network.
Q4Can AzCopy use the storage account key?
No. AzCopy accepts Microsoft Entra ID based sign-in and shared access signature tokens, but not the account key. Storage Explorer can use account keys when you attach an account manually, although identity-based access is safer.
Q5What is the difference between copy and sync?
Copy sends everything you point it at, with options for what to do when files already exist. Sync compares both sides and sends only the differences, and it can optionally delete destination items that are missing at the source. Use copy for first loads and sync for repeated updates.
Q6My transfer stopped halfway. Do I start over?
Usually not. AzCopy keeps plan files that record each item’s state. Find the job in your job list and resume it. If the original job used SAS tokens, you must supply them again because they are not stored.
Q7How can I be sure the files arrived unchanged?
Compare counts and total sizes, and use hash options so AzCopy stores and checks MD5 fingerprints. For important data, also restore a small sample and compare it to the original.
Q8Does data pass through my computer when I copy between two accounts?
No. In an account-to-account copy, the destination pulls the data directly from the source inside the cloud, and your computer only sends instructions. This is why such copies can be very fast even from a slow connection.
Q9Why are millions of small files so slow?
Each file needs its own requests, and the number of requests per second is limited. Overhead dominates over actual data movement. Combining small files into larger archives, or raising concurrency within sensible limits, helps.
Q10Can AzCopy move queues and tables?
No. AzCopy focuses on Blob storage, Azure Files, and Data Lake Storage Gen2 content. Storage Explorer can browse and edit queues and tables, and other services or code can move that kind of data in bulk.
Q11Is it safe to run sync with the delete option?
It is safe only when you are sure the source is always correct and when recovery features such as soft delete and versioning are on. A mistake at the source will be copied faithfully as deletions at the destination. Always preview with a dry run.
Q12When should I use Data Box instead?
When the estimated network transfer time is very long, such as weeks or months, or when the link is slow or unreliable. A shipped device has a predictable timeline regardless of your internet speed. Many teams then use AzCopy to catch up the changes that happened during shipping.
Q13Can I schedule AzCopy to run every night?
Yes. Because it is a command-line program, you can call it from a scheduled task on Windows, a scheduled job on Linux, or an automated pipeline. Use a managed identity or service principal so no person needs to sign in.
Q14Does Storage Explorer use AzCopy?
Yes, for its blob and file transfers it relies on AzCopy internally, which is why the two tools share much of their performance and behaviour. Storage Explorer adds the graphical interface and management features around it.
Q15What is the biggest single file I can store?
A block blob can reach roughly 190 tebibytes, which comes from up to 50,000 blocks of up to 4,000 mebibytes each. Practical limits are usually your time and network, not this ceiling.
Q16Why did my valid sign-in still fail with a forbidden error?
The most common reasons are a missing data role, a role that has not yet taken effect, an expired or too-narrow SAS token, the storage firewall blocking your network address, or a wrong clock on your computer.
Q17Should I upload as Hot and change the tier later?
Generally choose the intended tier at upload time. Changing tiers later causes extra operations, and moving data out of colder tiers early can trigger early deletion or rehydration charges.
Q18Can I use these tools if my company forbids installing software?
You can use Storage browser in the Azure portal for light work, and Azure Cloud Shell for AzCopy commands, both without installing anything. For heavy transfers, ask your administrators for approval of the standalone tools or for a managed alternative.

19Summary and Key Takeaways

You began with the problem that moving data is harder than it looks, and you now have a complete map: the storage you are moving into, two complementary tools, how they work inside, how to make them fast and safe, and how to choose among all the options.

Think of the whole subject as a small logistics company. AzCopy is the freight team that works at scale, on a schedule, with a clipboard that survives power cuts. Storage Explorer is the front counter where people look, fix, and share. Data Box is the truck for loads too big for the road. Identity, least privilege, soft delete, and logging are the locks, insurance, and cameras that make the whole operation trustworthy.

Key Takeaways

  • Estimate before you move. Total bytes, file count, and largest file decide your tool, your time, and your cost. If the network math says weeks or months, consider an offline device.
  • Use the right tool for the job. Storage Explorer is best for browsing, inspecting, and small manual tasks. AzCopy is best for large, repeated, and automated transfers, and Storage Explorer itself relies on AzCopy for blob and file transfers.
  • Understand AzCopy’s inner workings. It splits files into blocks, transfers them in parallel, retries failures with backoff, records progress in plan files, and can resume a job after interruption, though SAS tokens must be supplied again.
  • Prefer identity over secrets. Use Microsoft Entra ID, managed identities, and user delegation SAS tokens with narrow roles and short lifetimes, and remember that AzCopy does not accept account keys.
  • Tune by finding the bottleneck. Large files are limited by bandwidth, many small files by request rate. Adjust concurrency, block size, and bandwidth caps, and benchmark before guessing.
  • Follow a lifecycle and verify. Assess, plan, prepare, pilot, bulk load, delta sync, verify, cut over. Always dry run first and prove the result with counts, sizes, and sample hashes.
  • Build safety nets before the first byte. Turn on soft delete, versioning, firewalls or private endpoints, and diagnostic logging, and treat sync with deletion as a powerful tool that needs respect.