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.
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 speed | Best case (100 percent) | Realistic (about 70 percent) |
|---|---|---|
| 100 Mbps | About 93 days | About 132 days |
| 1 Gbps | About 9.3 days | About 13 days |
| 10 Gbps | About 22 hours | About 32 hours |
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.
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
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.
Network file shares
Gives you shared folders that behave like a network drive. Many servers and people can open the same share at once.
Blob storage with real folders
Blob storage with a feature called a hierarchical namespace, which turns name prefixes into true folders. Popular for analytics.
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.
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.
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
| Question | AzCopy | Storage Explorer |
|---|---|---|
| How you use it | Type commands or run scripts | Click, drag, and drop |
| Best at | Large, repeated, or automated transfers | Browsing, inspecting, and small manual jobs |
| Can run unattended | Yes, on a schedule or in a pipeline | No, a person must be at the screen |
| Learning curve | Moderate, because you learn the commands | Gentle, because it looks like a file manager |
| Server-to-server copy | Yes, data flows inside Azure | Yes, through its copy and paste feature |
| Other services | Blob, Files, Data Lake Gen2, plus sources like Amazon S3 | Blobs, files, queues, tables, Data Lake Gen2, and more |
| Cost | Free | Free |
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
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.
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.
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.
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
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
You submit the request
The front end validates your command and the credential handler prepares proof of identity.
Scanning begins
The enumerator starts listing the source and writes plan files describing each item.
Work is queued
The scheduler splits files into chunks and places them on the work queue.
Workers transfer in parallel
Many workers move chunks at the same time, retrying temporary failures with backoff.
Files are finalised
Blocks are committed, hashes are compared if requested, and plan files are updated to completed or failed.
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.
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.
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.
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.
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.
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
| Situation | Best method | Why |
|---|---|---|
| You, working on your own laptop | Entra ID sign-in with a data role | Short-lived tokens and central control |
| Scripts running inside Azure | Managed identity | No stored secret at all |
| Build pipelines outside Azure | Service principal with certificate | Non-interactive and revocable |
| Temporary access for an outsider | User delegation SAS, short expiry | Narrow scope and automatic expiry |
| Copying from Amazon S3 | AWS access keys for the source, Entra or SAS for Azure | Each 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
Sign in
Starts an Entra ID sign-in so later commands can use your identity. A matching logout removes the session.
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.
Make the destination match
Compares source and destination and copies only what is new or changed. It works in one direction only.
Delete data
Deletes blobs or files in bulk. Powerful and permanent unless soft delete is enabled, so use with care.
See what is there
Lists the contents of a container or share, which helps you check results from the command line.
Create a container or share
Creates an empty destination before you fill it.
Manage past runs
Lists jobs, shows details of one job, resumes an interrupted job, or cleans up old plan files.
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.
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.
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.
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.
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.
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.
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.
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.
| Symptom | Likely cause | What to try |
|---|---|---|
| Speed far below link capacity with many small files | Per-request overhead | Raise concurrency, or bundle small files into larger archives |
| Speed rises then falls in waves | Throttling at the server | Lower concurrency, spread names across prefixes |
| Computer becomes sluggish | Too much concurrency or memory use | Lower concurrency and buffer size |
| Fast start, slow tail | A few very large files remain | Normal; block parallelism helps, so check the link |
| Slow scanning before transfer begins | Huge number of items to list | Use a list of files, or split the job into folders |
| Disk at 100 percent busy | Slow source or destination disk | Use 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.
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
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
See your data
Navigate containers and virtual folders, search by name prefix, preview many file types, and view or edit properties and metadata.
Upload and download
Drag files or folders in and out, or use the toolbar. Copy and paste a container or folder between two accounts.
Generate SAS links
Create a link for a single blob or a whole container with chosen permissions and an expiry time.
Recover and version
Show soft-deleted items and restore them. View snapshots and versions, and promote an older version back to current.
Change tiers and leases
Move blobs between access tiers, rehydrate from Archive, and manage leases that lock a blob against changes.
Manage access
Edit stored access policies and, on Data Lake Storage Gen2, view and edit folder-level access control lists.
Queues and tables
Read and add queue messages, and view or edit table rows, which AzCopy cannot do.
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.
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
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.
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.
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.
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.
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.
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"]
The other tools, explained
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.
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.
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.
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.
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.
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.
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.
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
| Need | Good first choice | Reason |
|---|---|---|
| Drop a handful of files into a container | Storage Explorer | Fastest to do by hand |
| Nightly upload of changed files from a server | AzCopy sync on a schedule | Scriptable and efficient |
| Copy a whole container between two accounts | AzCopy | Server-to-server copy at scale |
| Move 200 TB over a 200 Mbps link | Data Box | Network would take years |
| Ingest from a dozen databases and files, with cleansing | Data Factory | Orchestration and transformation |
| Migrate many departmental file servers | Storage Mover | Managed tracking and agents |
| Inspect a queue or edit a table row | Storage Explorer | AzCopy does not handle these |
| Keep a copy of new blobs in another region forever | Object replication | Automatic 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.
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.
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
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.
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.
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.
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
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.
Storage metrics
Azure Monitor shows ingress, egress, transactions, latency, and error rates for the account. These reveal throttling and capacity trends.
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 see | Usual meaning | First things to check |
|---|---|---|
| 403 Forbidden or “authorization failure” | Identity or token not permitted | Data role assigned and propagated, SAS permissions and expiry, storage firewall, clock drift |
| 401 Unauthorized | Sign-in missing or expired | Sign in again, check token lifetime |
| 404 Not Found | Container or blob does not exist | Spelling, case sensitivity, correct account and container |
| 409 Conflict | Resource already exists or is leased | Existing blob with lease, existing container, overwrite setting |
| 503 Server Busy, timeouts | Throttling or transient trouble | Lower concurrency, retry later, spread load |
| Source changed during transfer | File modified while being read | Copy from a snapshot or after the application stops writing |
| Hash mismatch | Corruption or modification | Retry the file, check disk health, compare with original |
| Certificate or TLS errors | Proxy inspecting traffic | Trust the corporate certificate, check proxy settings |
A systematic way to debug
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.
Open the job log
Find the first error, not the last. Later errors are often side effects of the first.
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.
Check the other side
Look at the server metrics and logs to see whether Azure even received the request, and what it answered.
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.
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
Bulk then delta
Do one large first copy, then repeat small sync passes until cutover. It keeps the final downtime tiny.
Slice and parallelise
Divide the data into independent slices by folder or prefix and run several jobs or machines at once. Failures stay contained.
Landing zone
Upload into a staging container first, validate, then move or copy into the final container. Bad data never reaches production.
Server-side first
Whenever both sides are in the cloud, let the cloud move the data instead of pulling it through your laptop.
Identity over secrets
Use managed identities and Entra ID, so there is nothing to leak, rotate, or accidentally commit.
Dry run, then run
Always preview. Treat the preview output as a peer review of your own command.
Anti-patterns to avoid
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.
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.
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 type | What triggers it | How to keep it low |
|---|---|---|
| Storage capacity | Gigabytes kept per month, by tier | Choose the right tier at upload, use lifecycle rules |
| Operations | Every write, read, list, and delete, billed per set of 10,000 | Use fewer, larger files; avoid needless repeated listing |
| Data egress | Data leaving Azure to the internet or another region | Keep copies in the same region, avoid repeated downloads |
| Early deletion | Removing data before a tier’s minimum retention | Do not place short-lived data in Cool, Cold, or Archive |
| Rehydration | Reading back data from Archive | Plan reads, and keep frequently needed data out of Archive |
| Transfer compute | A virtual machine running your jobs | Shut 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
Estimate first
Do the bandwidth math and the operation count math before starting. Share the estimate with stakeholders.
Pilot with the ugliest data
Include your largest files, deepest folders, and strangest names in the pilot. Easy data teaches you nothing.
Cap bandwidth during business hours
Be a good neighbour on a shared network. Let the job run at full speed overnight.
Turn on safety nets before you start
Soft delete, versioning, and logging should be on before the first transfer, not after the first mistake.
Automate repeated work
Anything you do twice should be a script. Scripts are reviewable, repeatable, and teachable.
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.
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.
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.