migrate · b2 → dosya
Move a bucket off Backblaze B2 in four commands.
Two remotes, one copy, one check. rclone reads from B2 and writes to dosya.dev; nothing at the source is touched. When rclone check comes back clean, delete the bucket 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 B2.
# an application key with read access to the bucket
$ rclone config create b2 b2 \
account=YOUR_KEY_ID key=YOUR_APPLICATION_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 b2:my-bucket dosya:my-bucket --dry-run $ rclone copy b2:my-bucket dosya:my-bucket \
--transfers 8 --checkers 16 --fast-list --progress
# prove it landed: size and hash compared on both sides
$ rclone check b2:my-bucket dosya:my-bucket 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 B2
- Scope the key to one bucket. Application keys can be limited to a single bucket and to read-only. Make one for the copy and delete it after.
- Old versions stay behind. rclone reads the current version of each file. Hidden and previous versions are not copied, which is usually what you want.
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 B2 is the better fit
If you serve terabytes to a CDN, B2's free egress to its CDN partners and its storage pricing are hard to beat, and dosya.dev is not an origin for a video pipeline. Keep B2 as the archive tier and move the files people actually open.
Questions
Before you run it, answered.
- Is anything deleted at B2?
- No. rclone copy only ever writes to dosya.dev; it never removes or changes anything at the source. Delete the bucket yourself once rclone check comes back clean.
- 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.
- Will folder structure and modification times survive?
- Yes. rclone copies paths as they are and dosya.dev keeps the original modification time on upload, so a later rclone sync sees the files as unchanged.
- 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.