Skip to main content

What I Would Do Differently in My Next Azure Storage Migration

What I Would Do Differently in My Next Azure Storage Migration

Seven lessons drawn from real Azure file share migrations. Not theory — the specific decisions that cost time, created risk, or produced regret. With illustrated improved processes for each one.

By Francis Avorgbedor | Azure Engineer  ·  July 11, 2026  ·  17 min read  ·  Azure Files · Migration · Lessons
FA
Francis Avorgbedor
Azure Engineer  ·  SEVENAI  ·  Azure Field Notes
7
Things I would change on the next migration
3
Days of rework caused by the SID estimation mistake alone
4
Days added to upload phase by the bandwidth oversight
0
Of these mistakes I expect to make twice

Ihave now written the case study of the 15TB QNAP-to-Azure migration, the lessons learned post, the behind-the-scenes architecture guide, and the why-we-moved story. Each of those posts describes what happened. This one describes what I would change. There is a difference between a migration that completed successfully and a migration that was executed well. Our migrations complete successfully. They are not always executed as well as they could be. This post is the honest account of the gaps — the things I knew better but did not do, the things I did not know and had to learn, and the things I will do first on the next engagement before anything else.

I am writing this for two audiences. The first is engineers planning their first Azure storage migration who want to avoid the specific mistakes that are not obvious from documentation. The second is engineers who have already run a migration and recognise some of what follows from their own experience. Both groups will find something useful here. Neither group will find reassuring fiction about everything going smoothly.

Lesson 01
I would run Azure Migrate discovery before writing a single line of Terraform

On the QNAP migration, we built the target infrastructure — storage accounts, file shares, Private Endpoints, sync groups — based on a manual inventory we assembled over two days from QNAP's admin portal and a PowerShell script against the file shares. The inventory was accurate. It was also incomplete: it told us sizes and file counts, but did not tell us access patterns, did not classify shares by activity level, and did not surface the 23 files with illegal characters until Day 22 of the upload phase.

What I did — and why it cost us

Manual inventory via QNAP admin portal + PowerShell. Took two days. Missed access frequency data (which would have changed tier selection for two shares). Missed illegal filenames (found 22 days too late). Missed automated tier recommendations (we estimated manually and got two shares wrong initially).

✓ What I would do instead

Deploy Azure Migrate appliance on day one. It runs agentlessly, discovers all SMB and NFS shares automatically, captures storage consumed, file counts, and access patterns, classifies each share as Ready/Conditional/Not Ready for Azure Files, and provides per-share tier recommendations. Discovery completes in hours. Everything downstream — Terraform design, tier selection, wave planning — is driven by real data rather than estimates.

Figure 1 — Azure Migrate vs manual inventory: what each gives you
MANUAL INVENTORY (WHAT WE DID)✓ Share sizes and file counts✗ Access frequency data — guessed tier✗ Illegal filename scan — found Day 22✗ Tier recommendations — manual estimate✗ Readiness classification — none2 days · incomplete · 2 tier corrections neededAZURE MIGRATE (NEXT TIME)✓ Share sizes and file counts✓ Access patterns — correct tier first time✓ Compatibility issues surfaced — Day 1✓ Per-share tier recommendation✓ Ready / Conditional / Not Ready statusHours · complete · drives all downstream decisions
Lesson 02
I would estimate SID remap time by file count and unique ACL entries — not by share count

This is the mistake that cost us the most time on the QNAP migration. We had eight shares to remap. We estimated two days for SID mapping. It took six. Finance alone ran for eleven hours on the icacls script. The estimation error was not about the difficulty of the task — it was about the unit of measurement. We estimated by number of shares. We should have estimated by number of files with non-standard ACLs.

The wrong estimation formula

8 shares × 0.25 days/share = 2 days. Wrong. Finance had 1.4M files with 847 unique ACL entries. icacls processes approximately 2,000 entries per minute. 847 entries × (1.4M files ÷ average inheritance depth) = 11 hours for Finance alone.

✓ The correct estimation formula

Run this PowerShell query on each share before estimation. Use the output to calculate realistic remap time. Budget contingency for shares with high ACL complexity — Finance and HR shares in professional services environments consistently have more complex permission structures than any estimate suggests.

Figure 2 — SID remap estimation: the correct pre-migration query and formula
# Run BEFORE estimation — on Windows Server after Phase 3 RoboCopy$share= "D:\SyncRoot\Finance"$files= (Get-ChildItem $share -Recurse -File).Count$uniqueACLs= (Get-ChildItem $share -Recurse |Get-Acl | Select -Expand Access |Select IdentityReference -Unique).Count# Hours estimate = ($files × $uniqueACLs × 0.0001) / 2000Write-Host "Est hours: $(($files * $uniqueACLs * 0.0001) / 2000)"ESTIMATION FORMULAFiles: from Get-ChildItem -RecurseUnique ACLs: from Get-Acl outputRate: ~2,000 remap ops/minFinance: 1.4M files × 847 ACLs= ~11 hours at 2K ops/min+ 50% contingency = 16.5hrsIMPACT OF CORRECT ESTIMATION:Run script on ALL shares during discovery · Sum total hours · Add 50% buffer · Schedule overnight runs · No surprise weekend overruns
Lesson 03
I would configure Private Endpoints and verify connectivity before registering the AFS agent — every time

We configured Private Endpoints after the Azure File Sync agent was already registered and syncing. This required a sync pause and full agent re-registration — an hour of work that should have been zero. The correct sequence is always: Private Endpoints → connectivity test → then agent registration. Azure Files traffic should never traverse the public internet in a production deployment.

What we did — wrong order

Provisioned storage → Registered AFS agent → Configured Private Endpoints → Re-registered agent (1 hour rework). Azure Files synced over public internet for 3 days before Private Endpoints were in place.

✓ Correct order — next time

Provisioned storage → Private Endpoints → Test-NetConnection to verify private IP resolves → AD auth → Storage Sync Service → AFS agent registration. Zero re-registration. Zero public internet traversal.

Figure 3 — Correct provisioning sequence: Private Endpoint verification step before AFS agent
1. StorageAccounts +File shares2. PrivateEndpointsFIRST3. Verify PETest-NetConnectionprivate IP resolves4. AD AuthAD ConnectKerberos5. Sync SvcStorage Sync+ Groups6. AFSAgentRegister serverStep 3 is the gate — do not proceed to Step 6 until Test-NetConnection confirms private IP resolution
Verify Private Endpoint before AFS agent registration# Run from Windows Server — confirm storage account resolves to private IP Test-NetConnection -ComputerName <storageaccount>.file.core.windows.net -Port 445
# Expected: TcpTestSucceeded = True AND RemoteAddress = 10.x.x.x (private IP) # If RemoteAddress = public IP: Private Endpoint DNS not configured correctly — fix before proceeding
Lesson 04
I would use Storage Mover for archive shares and Azure File Sync only for active hybrid shares

We used Azure File Sync for all eight shares — including Archive2022 and Archive2023, which are read-only after migration, never written to, and accessed less than once per quarter. AFS is designed for continuously synced, actively used file shares. Deploying it for read-only archives means maintaining a sync infrastructure that provides no benefit — the archives are never updated, so the continuous sync capability of AFS generates zero value. Storage Mover is the correct tool for one-time archive migrations.

Figure 4 — Tool assignment by share type: the decision I would make differently
ACTIVE SHARESFinance · Projects · HRShared · Media · BackupsWritten daily by usersHybrid access neededCloud tiering beneficialAzure File Sync+ RoboCopy initial copyContinuous sync · cloud tieringARCHIVE SHARESArchive2022 · Archive2023Read-only after migrationAccess <1× per quarterNo writes everContinuous sync = zero valueAzure Storage MoverOne-time migrationNo ongoing agent overheadWHAT WE DID — WRONGUsed Azure File Sync for ALL 8 sharesIncluding both archive sharesAFS agent manages 8 sync groupsinstead of 6Server endpoint health to monitorfor data that never changesWasted: agent complexity · monitoringoverhead · sync group slotsNext time: Storage Mover for archives
Lesson 05
I would measure actual WAN bandwidth and factor the client's traffic shaping — then double the upload timeline estimate

We estimated the Phase 4 AFS upload based on 500Mbps line capacity. We did not measure the actual available upload bandwidth during business hours, and we did not ask about the client's existing traffic shaping policies. The result: AFS upload throughput dropped to approximately 60GB per day during business hours (from 200GB+ overnight), and Phase 4 ran four days longer than the plan. The fix is a two-hour measurement exercise on day one of the project.

Our estimation error

Estimated: 500Mbps × 24hrs × 11 days = 15TB transferred in 11 days. Actual: business-hours throttling + existing traffic shaping cut average throughput in half. Result: 15 days, not 11. Client maintenance window had to be pushed one week.

✓ The pre-project bandwidth measurement I would run first
Figure 5 — Bandwidth measurement process: the 2-hour exercise that saves days of estimation error
Step 1: Line speedspeedtest-cli or iPerf3to Azure region endpointMeasure upload onlyNot downloadRecord: Mbps actualStep 2: Business hoursRepeat measurement at9am, 12pm, 3pmOften 40–60% of night rateExisting traffic shapingcompetes with AFS uploadStep 3: Ask IT policyDoes client have QoS?Traffic shaping? SD-WAN?Will AFS be throttled?Configure AFS bandwidthschedule to match policyStep 4: CalculateDay hours GB: speed(biz) × 9hrsNight hours GB: speed(night) × 15hrsDaily total × days = dataset sizeAdd 50% buffer for sync overheadThis is your realistic timelineTotal time to complete: 2 hours · Saves: 2–5 days of estimation error and schedule renegotiation
Lesson 06
I would provision the Windows Server intermediate in Azure — not on-premises

We used an on-premises Windows Server as the Azure File Sync intermediate. This meant the initial RoboCopy ran over the 10GbE local network (fast — 300MB/s), but the AFS upload from the Windows Server to Azure Files ran over the 500Mbps WAN link (the bottleneck). If we had provisioned the Windows Server as an Azure VM in the same region as the target storage accounts, the AFS sync between the Azure VM and Azure Files would have run at intra-Azure speeds — effectively unlimited — rather than WAN upload speeds. The only WAN transfer would have been the initial RoboCopy from the QNAP to the Azure VM, which would still have been the bottleneck, but the subsequent sync would have been dramatically faster.

What we did — on-premises Windows Server

QNAP → WinSrv (10GbE, fast) → Azure Files (500Mbps WAN, slow). The WAN was the bottleneck for 100% of the data. 11 days for upload phase.

✓ Next time — Azure VM as intermediate

QNAP → Azure VM (500Mbps WAN, same bottleneck for initial copy) → Azure Files (intra-Azure, essentially free). Post-initial-copy delta syncs run at intra-Azure speed. Cutover delta takes minutes, not hours.

Figure 6 — On-premises vs Azure VM intermediate: where the bottleneck moves
WHAT WE DID — ON-PREMISES SERVERQNAPSource10GbE LANFASTWin ServerOn-prem500Mbps WANBOTTLENECKAzureFilesWAN is bottleneck for 100% of 15TBInitial copy: 11 daysCutover delta: 47 minutesTotal WAN transfer: 15TB+NEXT TIME — AZURE VM INTERMEDIATEQNAPSource500Mbps WANOnce onlyAzure VMSame regionIntra-Azure~UnlimitedAzureFilesWAN only for initial copy — all sync intra-AzureInitial copy: same (WAN still limits this)Cutover delta: minutes not hoursPost-upload sync: near-zero latency
Lesson 07
I would set up monitoring and alerts before the first byte moves — not after the first problem appears

We configured monitoring reactively. The AFS sync error alert was not in place when the 23 silently skipped files accumulated over 22 days. The storage account IOPS alert was not in place when one share briefly throttled during a high-traffic hour. The Azure Backup alert was not configured until after cutover. Each of these gaps meant we discovered problems by checking dashboards manually rather than being notified automatically. The monitoring configuration takes two hours. Run it before Phase 3, not after cutover.

Figure 7 — The monitoring stack that should be in place before Phase 3 starts
ALERTS TO CONFIGURE BEFORE PHASE 3 — IN ORDER OF CRITICALITYCRITICALAFS sync errors > 0Event Viewer FileSync log · daily or Alert rule on error event countSilently skipped files — never self-resolvesHIGHAFS sync job stalled >60minAzure Monitor · ItemsNotSyncing metric > 0 for 60minJob stall = silent — check or alertCRITICALStorage account IOPS > 85% sustainedAzure Monitor Metrics · Transactions metric on storage accountThrottling = intermittent user errorsHIGHUpload throughput <40% expected >30minAFS telemetry · bytes uploaded per minute in Azure MonitorStalled transfer = missed deadlineMEDIUMAzure Backup job failedAzure Backup alerts · built-in notification on job failureConfigure before cutover, not afterLOWStorage capacity >80% of quotaAzure Monitor · UsedCapacity metric on each file shareIncrease quota before users hit ceiling
The most important alert — AFS files not syncing (run before Phase 3)# Azure CLI — create alert rule on ItemsNotSyncing metric az monitor metrics alert create \
  --name "afs-items-not-syncing" \
  --resource-group <rg> \
  --scopes <storage-sync-service-resource-id> \
  --condition "count ItemsNotSyncing > 0" \
  --window-size 5m \
  --evaluation-frequency 1m \
  --severity 1 \
  --action-group <action-group-id>
# This alert fires within 5 minutes of ANY file being skipped # Without it: silently skipped files accumulate for days before you notice

"A migration that completed successfully is not the same as a migration that was executed well. The first tells you the data got there. The second tells you it got there without unnecessary risk, rework, or lost sleep."

— Francis Avorgbedor | Azure Field Notes, July 2026
The seven changes — quick reference
Change 01
Deploy Azure Migrate before writing Terraform
Automated discovery gives you access patterns, tier recommendations, and illegal filename flags in hours. Every downstream decision is better for it.
Change 02
Estimate SID remap by file count and unique ACL entries
Run the Get-Acl query on each share before estimation. Budget by (files × unique ACLs) ÷ 2,000 entries/min. Add 50% contingency.
Change 03
Private Endpoints before AFS agent — Test-NetConnection as the gate
Run Test-NetConnection and confirm the private IP resolves before registering the AFS agent. Non-negotiable every time.
Change 04
Storage Mover for archives, AFS only for active hybrid shares
Continuous sync infrastructure for read-only archives generates zero value and adds unnecessary agent complexity.
Change 05
Measure actual WAN bandwidth at business hours — then double the estimate
Two hours of measurement at the start of the project prevents four days of schedule renegotiation at the end of it.
Change 06
Azure VM as intermediate — not on-premises Windows Server
Moves the WAN bottleneck to apply only once. Post-initial-copy delta syncs run at intra-Azure speed. Cutover deltas take minutes.
Change 07
Full monitoring stack configured before Phase 3 starts
Five alert rules in two hours. Discovers skipped files in minutes rather than days. Never configure monitoring reactively on a data migration.
The principle
Measure first, configure second, migrate third
Every item on this list is a variation of the same mistake: starting the technical work before the measurement work was complete. On the next migration, the first two weeks are measurement and planning. Not a line of Terraform until the data says we understand what we are working with.

Get the Azure field notes — every week

Real retrospectives, honest engineering, specific fixes. Written by Francis Avorgbedor.

Popular posts from this blog

The Cloud Incumbent: AWS Bedrock Hosts Every Frontier Model and Amazon Is Betting on Neutrality

The Cloud Incumbent: AWS Bedrock Hosts Every Frontier Model and Amazon Is Betting on Neutrality AWS at $37.6 billion quarterly revenue, growing 28%. $13 billion invested in Anthropic. A $100 billion Anthropic-to-AWS commitment. Trainium with $225 billion in customer revenue commitments. The most quietly powerful AI strategy in the race. By Francis Avorgbedor | Azure Engineer  ·  July 4, 2026  ·  14 min read  ·  Amazon · AWS · Cloud AI 74 SEVENAI Momentum Score — Rank #5 $37.6B AWS Q1 2026 revenue — 28% YoY growth ▲ Fastest in 15 quarters $13B Total Amazon investment in Anthropic to date ▲ Strategic anchor 100K+ Customers running Claude on AWS Bedrock ▲ Distribution moat Amazon's AI strategy is built on a thesis that every other Magnificent Seven company is testing against — and that Amazon is uniquely positioned to win regardless of the outcome. The thesis is neutrality. In a race where Microsoft has bet on OpenAI, Google has bet on Gemini, and Meta has bet...

The Importance of Content Marketing in 2026: Building Trust, Driving Leads and Growing Your Business

 The Importance of Content Marketing in 2026: Building Trust, Driving Leads and Growing Your Business Content marketing is not a passing trend – it has become the backbone of modern marketing and sales strategies. Companies that consistently educate and engage their audience with blogs, videos , podcasts and other formats are seeing measurable results in brand awareness, lead generation and revenue. By 2026, content marketing is no longer optional: over 82 % of companies use it and more than 54 % plan to increase their investment . In today’s competitive landscape, high‑quality, customer‑focused content builds trust, attracts qualified prospects and nurtures loyalty throughout the buyer journey. Pervasive adoption and why it matters Widespread usage: Research shows that 73 % of B2B marketers and 70 % of B2C marketers include content marketing in their strategies . Within organisations, dedicated content teams are becoming the norm; 73 % of major o...

How to Reset an Azure Virtual Machine to Factory Settings Using a Managed Disk

How to Reset an Azure Virtual Machine to Factory Settings Using a Managed Disk Azure does not have a single "factory reset" button. What it does have is something better: the OS Disk Swap — a method that swaps out the corrupted or misconfigured OS disk for a clean Windows Server managed disk without deleting the VM, its NICs, its IP addresses, or any attached data disks. Here is how it works, when to use it, and the exact steps to execute it safely. FA Francis Avorgbedor Azure Engineer July 16, 2026 15 min read Azure VMs · Windows Server · Real-World Fix 3 Methods to achieve a clean Windows Server installation on an existing Azure VM ~15min Typical OS Disk Swap duration — VM retains its NICs, IPs, and data disks throughout 0 Data disks affected by an OS Disk Swap — data disks remain attached and untouched 1 Snapshot of the original OS disk you must take before starting — no exceptions Introduction Why Azure Does Not Have a Simple Factory Reset — and What to Do Instead On a ph...
  A slow or unstable internet connection can be incredibly frustrating, but many common issues can be resolved with a bit of troubleshooting. This guide will walk you through a series of steps to diagnose and fix your internet connection. Step 1: Basic Checks & Restarting Your Equipment Often, the simplest solutions are the most effective. Check Cables:  Ensure all cables connected to your modem and router are securely plugged in. This includes the power cables, the Ethernet cable connecting your modem to your router (if you have separate devices), and the cable coming from your internet service provider (ISP) – usually coaxial or fiber optic. Restart Your Modem and Router:  This is the golden rule of internet troubleshooting. Unplug  both your modem and router from their power sources. Wait for at least  30 seconds . This allows the devices to fully power down and clear their temporary ...

Can I Update My Old Computer to Windows 11 — and How Much Will It Cost?

Can I Update My Old Computer to Windows 11 — and How Much Will It Cost? Your i7, 16GB RAM, 512GB SSD machine is powerful enough to run Windows 11 comfortably. The TPM 2.0 and Secure Boot wall is a security checkbox, not a performance ceiling. Here are two proven ways to get past it, what each one costs, and what you are trading away by doing so. $0 Cost of the Windows 11 licence if your existing Windows 10 is genuine — the upgrade remains free in 2026 2 Proven methods to bypass TPM 2.0 and Secure Boot — Rufus (easy) and Registry edit (manual) 25H2 Current Windows 11 version — all known bypass methods tested and confirmed working as of July 2026 Oct 2025 Windows 10 end of life — no more security updates. Staying on Windows 10 now carries real risk. First — Check Your BIOS Before Anything Else You Might Not Actually Need a Bypass Before running any bypass, open your BIOS and look at two settings. Many computers that fail the Windows 11 compatibility check have TPM 2.0 present in the hard...

Azure Files vs Azure NetApp Files: Which One Should You Choose?

Azure Files vs Azure NetApp Files: Which One Should You Choose? Performance tiers, protocol support, dual-protocol capability, pricing models, SAP/Oracle/HPC suitability, data management features, and the decision framework that maps each workload type to the right service — with step-by-step setup procedures for both. FA Francis Avorgbedor Azure Engineer July 15, 2026 20 min read Azure Storage · Architecture 4 Azure Files tiers: Premium SSD, Standard Hot, Cool, Tx Optimized 3 ANF performance tiers: Standard, Premium, Ultra — all SSD-backed 4TiB ANF minimum provisioning — significant cost floor for small workloads Dual ANF serves the same data via SMB and NFS simultaneously — AF cannot Introduction Two Services, One Surface Area — Completely Different Purposes Microsoft offers two fully managed, enterprise-grade file storage services in Azure. They share a surface area — both serve file shares over standard protocols, both run on managed infrastructure, and both integrate with Microsof...
 Digital Marketing Trends and Strategies for SMBs in 2026 Small and mid‑sized businesses (SMBs) are competing in an environment where digital marketing changes faster than ever. The rise of artificial intelligence (AI), voice search and social commerce are reshaping how customers discover, evaluate and purchase products. To succeed, SMBs must understand the trends shaping 2026 and implement strategies that build trust, visibility and conversion—without breaking the budget. AI becomes the backbone of digital marketing AI‑driven personalization is now standard. Advances in machine learning mean even small businesses can personalize messaging at scale. Twilio’s research shows that 92 % of companies use AI‑driven personalization to drive growth . AI tools automate tasks like content creation, segmentation and performance analysis, freeing owners to focus on strategy . AI marketing tools are accessible. According to a U.S. Chamber of Commerce report cited by Thryv, 58...
 Social Media Monetization for Beginners Social media platforms offer numerous avenues for monetization, even for beginners without specialized skills. The key lies in understanding different strategies, creating valuable and authentic content, and consistently engaging with an audience. Here are the primary ways one can monetize social media: • Direct Monetization Methods     ◦ Sponsored Posts and Brand Partnerships: Once you build a decent following, companies will pay you to promote their products or services through your posts, stories, or videos. These often involve a fixed fee per post or campaign and require you to demonstrate influence and an active community. It's crucial to promote products you genuinely like and to be transparent with disclosures about paid partnerships.     ◦ Affiliate Marketing: This involves promoting other companies' products or services using unique links. You earn a commission when someone makes a purchase through your link. Pla...
Creating user profiles for Entra-joined Azure Virtual Desktops (AVD) primarily involves configuring FSLogix Profile Containers . This ensures that user profiles are portable and persistent across sessions, even though the session hosts are Entra-joined. Here's a step-by-step guide: Step 1: Prepare Your Storage for FSLogix Profiles You'll need a file share that can be accessed by your AVD session hosts and where user profile disks will be stored. Azure Files is a common and recommended solution for this. Create an Azure Storage Account : Go to the Azure portal, search for "Storage accounts," and click "Create." Choose your subscription and resource group. Give it a unique name (e.g., avdprofilesstorage). Select a region. For performance, consider "Premium" with "File shares" as the account kind, or "Standard" with "ZRS" or "GRS"...
Building Online Presence : A Skill-Free Income Guide Building a strong online presence is fundamental for generating income without prior skills, and it involves several key strategies, from mindset to practical execution. Foundational Mindset Shifts for Success Developing the right mindset is the starting point for building an online presence, influencing your motivation and ability to overcome challenges. • Embrace Learning and Adaptability Your ability to succeed online without specific skills starts with believing that change is possible and that you can learn as you go. The digital world changes rapidly, so being open to trying new methods and adapting your approach is crucial to keep moving forward. • Persistence Over Perfection View setbacks as opportunities to learn rather than failures, which helps build resilience. Recognize that success comes from persistence, not perfection. Small, consistent wins build confidence. • Focus on What You Control Concentrate on your effort, att...