migrate · azure → dosya
Move a container off Azure Blob Storage in four commands.
Two remotes, one copy, one check. rclone reads from Blob Storage and writes to dosya.dev; nothing at the source is touched. When rclone check comes back clean, delete the container and stop the meter.
The run sheet
Fill in two names. Run it top to bottom.
Every line is safe to run twice. rclone skips whatever already matches, so a copy that stops can be started again with the same command. Nothing here deletes anything at Azure.
# the storage account name and one of its access keys, or sas_url=
$ rclone config create azure azureblob \
account=YOUR_STORAGE_ACCOUNT key=YOUR_ACCESS_KEY # dosya is built into rclone: pick it in rclone config, or in one line
$ rclone config create dosya dosya \
api_key=dos_YOUR_API_KEY workspace_id=ws_abc123
# no dosya in your provider list? the S3 gateway works on any rclone version
# S3 keys are separate from the API key: generate them in dashboard settings
$ rclone config create dosya s3 provider=Other \
access_key_id=DOSYAXXXXXXXXXXXXXXXX secret_access_key=your_s3_secret_key \
endpoint=https://api.dosya.dev/s3 region=us-east-1 force_path_style=true
# native paths are dosya:<folder>
# gateway paths put the workspace first: dosya:ws_abc123/<folder> $ rclone copy azure:my-container dosya:my-container --dry-run $ rclone copy azure:my-container dosya:my-container \
--transfers 8 --checkers 16 --fast-list --progress
# prove it landed: size and hash compared on both sides
$ rclone check azure:my-container dosya:my-container Before you press enter
Two things about each end.
Read once, then run. Everything here shows up in the log if you skip it, so nothing is lost, only time.
At Azure
- Rehydrate Archive blobs first. Cool and Cold tiers charge to read; Archive blobs cannot be read at all until rehydrated, and the copy stalls on them.
- Prefer a SAS URL. A SAS scoped to one container with read and list permissions is the least-privilege option. Set its expiry past the end of the copy.
At dosya.dev
- Empty files are refused. A 0-byte object is skipped with a warning and rclone check lists it, so you know which ones.
- Filenames stop at 255 characters. A longer key fails and shows up in the log; rename it at the source and run the copy again.
- Upload slots are per key. The Free plan allows 2 transfers in flight per API key, paid plans more. Above the cap rclone waits for a slot rather than failing, retrying every 5 seconds for up to 10 minutes.
Where Azure is the better fit
If your files are read by Azure Functions, App Service or a pipeline in the same region, Blob Storage is the right place and intra-region traffic is free. Move the files humans open and leave application data where the compute is.
Questions
Before you run it, answered.
- Is anything deleted in Azure?
- No. rclone copy only ever writes to dosya.dev; it never removes or changes anything at the source. Delete the container yourself once rclone check comes back clean.
- Can I use a SAS token instead of the account key?
- Yes. Create the remote with sas_url= instead of account= and key=. A SAS scoped to the container with read and list permissions is all the copy needs.
- Do I need a paid dosya.dev plan to migrate?
- No. The free plan has 5 GB and every protocol, rclone included. Copy one folder, run the check, and pick a plan when you know the size of what landed.
- What if the copy stops halfway?
- Run the same command again. rclone compares size and modification time, skips whatever already matches, and finishes the rest. rclone check at the end proves nothing was missed.
Copy one folder first.
5 GB free and every protocol on it. Run the sheet against one folder, read the check, then move the rest.