- Fixed 4 broken markdown links (bad relative paths in See Also sections) - Corrected n8n port binding to 127.0.0.1:5678 (matches actual deployment) - Updated SnapRAID article with actual majorhome paths (/majorRAID, disk1-3) - Converted 67 Obsidian wikilinks to relative markdown links or plain text - Added YAML frontmatter to 35 articles missing it entirely - Completed frontmatter on 8 articles with missing fields Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.6 KiB
title, domain, category, tags, status, created, updated
| title | domain | category | tags | status | created | updated | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| rsync — Fast, Resumable File Transfers | opensource | dev-tools |
|
published | 2026-04-02 | 2026-04-02 |
rsync — Fast, Resumable File Transfers
Problem
Copying large files or directory trees between drives or servers is slow, fragile, and unresumable with cp. A dropped connection or a single error means starting over. You also want to skip files that already exist at the destination without re-copying them.
Solution
rsync is a file synchronization tool that only transfers what has changed, preserves metadata, and can resume interrupted transfers. It works locally and over SSH.
Installation (Fedora)
sudo dnf install rsync
Basic Local Copy
rsync -av /source/ /destination/
-a— archive mode: preserves permissions, timestamps, symlinks, ownership-v— verbose: shows what's being transferred
Trailing slash on source matters:
/source/— copy the contents of source into destination/source— copy the source directory itself into destination
Resume an Interrupted Transfer
rsync -av --partial --progress /source/ /destination/
--partial— keeps partially transferred files so they can be resumed--progress— shows per-file progress and speed
Skip Already-Transferred Files
rsync -av --ignore-existing /source/ /destination/
Useful when restarting a migration — skips anything already at the destination regardless of timestamp comparison.
Dry Run First
Always preview what rsync will do before committing:
rsync -av --dry-run /source/ /destination/
No files are moved. Output shows exactly what would happen.
Transfer Over SSH
rsync -av -e ssh /source/ user@remotehost:/destination/
Or with a non-standard port:
rsync -av -e "ssh -p 2222" /source/ user@remotehost:/destination/
Exclude Patterns
rsync -av --exclude='*.tmp' --exclude='.Trash*' /source/ /destination/
Real-World Use
Migrating ~286 files from /majorRAID to /majorstorage during a RAID dissolution project:
rsync -av --partial --progress --ignore-existing \
/majorRAID/ /majorstorage/ \
2>&1 | tee /root/raid_migrate.log
Run inside a tmux or screen session so it survives SSH disconnects:
tmux new-session -d -s rsync-migrate \
"rsync -av --partial --progress /majorRAID/ /majorstorage/ | tee /root/raid_migrate.log"
Check Progress on a Running Transfer
tail -f /root/raid_migrate.log