Kokil Thapa - Professional Web Developer in Nepal
Freelancer Web Developer in Nepal with 15+ Years of Experience

Kokil Thapa is an experienced full-stack web developer focused on building fast, secure, and scalable web applications. He helps businesses and individuals create SEO-friendly, user-focused digital platforms designed for long-term growth.

Rsync vs Rclone for Server Backups

By Kokil Thapa | Last reviewed: September 2026

Choosing between Rsync vs Rclone for server backups is a decision every operator hits after the first disk failure scare. Rsync is the classic Unix delta copier over SSH. Rclone speaks to S3, Google Drive, Backblaze B2, and dozens of other remote APIs. On production Linux system administration work, both tools show up constantly. This guide compares them on real criteria—incremental sync, encryption, restore speed, and cron automation—so you can pick one or combine both without guessing.

What Is the Difference Between Rsync and Rclone for Server Backups?

Rsync copies files by comparing checksums and sending only changed blocks. It expects a remote shell or daemon on the other side. Rclone treats remote storage as a filesystem and handles authentication, multipart uploads, and provider quirks for you.

Think of Rsync as a precision forklift between two warehouses you control. Rclone is the logistics broker that ships pallets to AWS, Wasabi, or Google Cloud without you writing SDK code.

Backup Tool ArchitectureWeb ServerUbuntu 24.04Backup ServerSSH + diskRsyncDelta over SSHS3 / B2 / DriveCloud bucketRcloneREST API syncRsync = server-to-server | Rclone = server-to-cloud
Rsync vs Rclone for server backups: Rsync targets SSH hosts; Rclone targets cloud storage APIs.

On sister sites I maintain with Deployer 7 and GitLab CI—legal-tech portals like Notary Kathmandu—Rsync pushes nightly file snapshots to a secondary VPS. Rclone then mirrors encrypted archives to object storage. Neither tool replaces database dumps; they complement them.

CriteriaRsyncRclone
Primary transportSSH or rsync daemonHTTPS REST APIs (S3, B2, SFTP, WebDAV)
Incremental syncBlock-level delta (very efficient)File-level with --checksum or modtime
Encryption in transitSSH tunnel (built-in)TLS to provider; optional client-side crypt
Bandwidth efficiencyExcellent for changed bytesGood; multipart for large files
Restore speedFast from local/NAS backup serverDepends on cloud egress fees and latency
Learning curveLow if you know SSHModerate; remote config abstraction
Best fitSame-datacenter or VPS-to-VPSOff-site cloud, multi-provider
Typical costSecond VPS disk (~Rs 800/mo, ~USD 6)Storage + egress (~Rs 500–3,000/mo)

The official Rsync project documentation covers delta-transfer mechanics. For Rclone, the Rclone docs list every supported backend and flag.

When Should You Use Rsync for Server Backups?

Rsync wins when both ends are Linux servers you administer. You already have SSH keys. You want hard-link snapshots that consume minimal extra disk. You need a restore in minutes, not hours of cloud download.

Install and test Rsync on Ubuntu

Rsync ships with Ubuntu. Verify with:

rsync --version
ssh -V

One-off directory sync over SSH

This copies your Laravel storage/ and uploaded media to a backup host:

rsync -avz --delete \
  -e "ssh -i /root/.ssh/backup_key -p 22" \
  /var/www/myapp/storage/ \
  backup@203.0.113.50:/backups/myapp/storage/

Flag breakdown:

  • -a preserves permissions, symlinks, timestamps.
  • -v prints transferred files—useful in cron logs.
  • -z compresses during transfer on slow links.
  • --delete removes files on the destination that no longer exist on source.

Hard links let you keep daily snapshots without duplicating unchanged files. I've used this pattern on production Laravel applications for years:

BACKUP_ROOT="/backups/myapp"
SNAP="$BACKUP_ROOT/$(date +%Y-%m-%d)"
LATEST="$BACKUP_ROOT/latest"

mkdir -p "$SNAP"
rsync -av --delete \
  --link-dest="$LATEST" \
  /var/www/myapp/ \
  "$SNAP/"

rm -f "$LATEST"
ln -s "$SNAP" "$LATEST"

Each day creates a full directory tree. Unchanged files share inode blocks with the previous snapshot. Disk usage grows only with actual changes. See the dedicated walkthrough in automate server backups with Rsync and cron for a complete script.

Rsync Snapshot PipelineCron 02:00Daily triggermysqldumpDB exportRsync -avFile deltaHard-link snap/backups/dateDay 1: 10 GB full copyDay 2: 200 MB changed (hard-linked rest)Day 3: 150 MB changedRestore = copy any dated folder back
Rsync hard-link snapshots: daily folders with shared inodes for unchanged files.

Cron entry for automated Rsync

0 2 * * * /usr/local/bin/backup-rsync.sh >> /var/log/backup-rsync.log 2>&1

Pair this with MySQL binary logs for replication and backup if you need point-in-time database recovery. Rsync alone does not guarantee database consistency unless you dump first or use filesystem snapshots.

When Should You Use Rclone for Server Backups?

Rclone is the right call when your backup destination lives in the cloud. AWS S3, Wasabi, Backblaze B2, Google Drive, and even another provider's SFTP endpoint all work through one CLI.

I reach for Rclone when a client wants off-site protection without maintaining a second VPS. A Kathmandu business running a single EC2 instance often cannot afford hot standby hardware. Rs 1,500/month (~USD 11) on B2 beats Rs 3,500/month (~USD 26) for a duplicate server that sits idle.

Install Rclone on Ubuntu

curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
cd rclone-*-linux-amd64
sudo cp rclone /usr/local/bin/
sudo chmod 755 /usr/local/bin/rclone
rclone version

Configure a remote backend

Interactive setup creates a named remote in ~/.config/rclone/rclone.conf:

rclone config

For S3-compatible storage, choose s3, enter access key, secret, region, and bucket. Test connectivity:

rclone lsd myremote:

Sync backup archives to cloud

After your local script dumps the database and tarballs the site, push to cloud:

rclone sync /backups/daily/ myremote:mybucket/server-backups/ \
  --transfers 4 \
  --checkers 8 \
  --retries 3 \
  --log-file /var/log/rclone-backup.log \
  --log-level INFO

Use copy instead of sync if you never want Rclone to delete remote files. Use sync when the remote should mirror local retention policy exactly.

For client-side encryption before upload, add a crypt remote wrapper. Your cloud provider sees only encrypted blobs. Generate a strong passphrase with a password generator and store it in your secrets manager—not in the cron script.

Rclone Off-Site PipelineUbuntu Server/backups/dailyEncryptrclone cryptRclone syncmultipart TLSS3 / B2Off-siteRetention: rclone delete --min-age 30dRestore: rclone copy myremote:bucket /restore/Monitor via log file + Nagios exit code check
Rclone encrypts and uploads local backup archives to cloud object storage over TLS.

Detailed S3 automation patterns appear in automate off-site backups to S3. For broader planning, read backup and disaster recovery strategy on the cloud.

How Do You Combine Rsync and Rclone in a Layered Backup Strategy?

The strongest setups use both tools in sequence. This is not either-or for most production web stacks running PHP 8.3+ and Laravel 12 or WordPress 7.1.

  1. Layer 0 — Application dump: Run mysqldump or use Laravel Spatie Backup for automated database backups.
  2. Layer 1 — Local Rsync: Sync files and dumps to a local /backups partition or NAS on the same network.
  3. Layer 2 — Rsync off-site: Push to a secondary VPS in another region via SSH.
  4. Layer 3 — Rclone to cloud: Mirror encrypted tarballs to S3 or B2 for geographic redundancy.
  5. Layer 4 — Verify restores: Monthly test restore to a staging VM. A backup you never tested is wishful thinking.

On booking platforms like Adventure Third Pole Trek, customer reservation data and uploaded documents need all four layers. A single-tool approach leaves gaps.

Example combined shell script

#!/bin/bash
set -euo pipefail

APP="/var/www/myapp"
STAMP=$(date +%Y-%m-%d_%H-%M)
DEST="/backups/daily/$STAMP"
mkdir -p "$DEST"

mysqldump -u backup -p"$DB_PASS" myapp | gzip > "$DEST/db.sql.gz"
tar -czf "$DEST/files.tar.gz" -C "$APP" storage public/uploads

rsync -av --delete "$DEST/" backup@vps2:/backups/myapp/latest/

rclone copy "$DEST/" myremote:mybucket/myapp/$STAMP/ \
  --log-file /var/log/rclone.log

find /backups/daily -maxdepth 1 -type d -mtime +14 -exec rm -rf {} +

Adjust retention to match your compliance needs. Legal-tech portals storing client documents may need 90-day minimum retention. Check your Ubuntu server backup strategies article for retention math.

What Are Common Rsync and Rclone Mistakes on Production Servers?

Most backup failures I troubleshoot are configuration errors, not tool limitations. These recur across client projects.

Rsync pitfalls

  • Backing up live MySQL files without a dump. InnoDB files copied mid-write can corrupt. Always dump or snapshot first.
  • Missing trailing slash confusion. rsync /src/ dest/ copies contents. rsync /src dest/ creates dest/src/. I've seen nested folder disasters from this.
  • SSH key permissions. Keys must be 600. Cron running as root with a user key path fails silently unless you log stderr.
  • No bandwidth limit on shared hosts. Add --bwlimit=5000 (KB/s) during business hours on constrained links.
  • Forgetting --delete semantics. Without it, deleted source files linger on backup. With it, a wrong source path wipes the backup mirror.

Rclone pitfalls

  • Using sync when you meant copy. rclone sync deletes remote files not present locally. One empty local folder destroys your cloud archive.
  • Ignoring egress costs. Restoring 500 GB from S3 can cost Rs 4,000+ (~USD 30) in egress alone. Budget for restore drills.
  • API rate limits. Google Drive throttles aggressive transfers. Lower --transfers and add --tpslimit.
  • Stale credentials in cron. Rotated IAM keys break nightly jobs. Monitor exit codes with Nagios monitoring for servers or a simple email-on-failure wrapper.
  • Skipping encryption. S3 bucket policies are not enough for sensitive client data. Use Rclone crypt or gpg-encrypted tarballs.
Rsync vs Rclone Decision TreeWhere is backup stored?Own Linux VPSSSH accessCloud bucketS3, B2, DriveBoth needed3-2-1 ruleUse RsyncFast delta syncUse RcloneAPI + encryptUse BothLayered DRNeed sub-minute restore? Rsync first. Need geo-redundancy? Rclone.
Decision tree for Rsync vs Rclone for server backups based on destination type and recovery SLA.

Security hardening matters too. Restrict backup SSH keys to a single command in authorized_keys. Lock S3 buckets with IAM least privilege. Follow server hardening for Ubuntu web servers and how to secure your website and server in Nepal for baseline rules.

How Do Rsync and Rclone Compare for Laravel and WordPress Backups?

Application-level backup needs differ from raw filesystem copies. Here is how each tool fits common PHP stacks.

Laravel: Spatie Backup creates zip archives containing database dumps and selected directories. Rsync those zips to a backup VPS nightly. Rclone pushes them to B2 for off-site storage. Exclude vendor/ and node_modules/ from file sync—they rebuild from Composer and npm.

WordPress: Core files are replaceable. Back up wp-content/uploads, your theme, custom plugins, and the database. Rsync handles uploads efficiently because images change incrementally. Rclone suits agencies managing dozens of client sites to one bucket with prefix per domain.

WooCommerce 11.1: Order tables grow fast. Database dumps matter more than file sync. Schedule dumps during low-traffic windows—often 2–4 AM NPT for Nepal stores.

For managed backup and restore support, see support and maintenance services and domain registration and hosting. Migration projects often reveal broken backup jobs—website migration includes pre-flight backup audits.

Reference the Amazon S3 user guide when configuring lifecycle rules to auto-expire old Rclone uploads and cut storage bills.

Key Takeaways

  • Use Rsync for SSH-based, incremental, server-to-server backups with hard-link snapshots when you control both hosts.
  • Use Rclone when the destination is S3, B2, Google Drive, or any remote API—and enable client-side encryption for sensitive data.
  • Always dump databases before file sync; copying live InnoDB files without a snapshot risks corruption.
  • Combine both in a 3-2-1 strategy: local copy, off-site VPS via Rsync, cloud mirror via Rclone.
  • Test restores monthly; monitor cron exit codes; never let backup scripts run without logging.
  • Match retention and encryption to your compliance needs—legal-tech and eCommerce sites need longer off-site retention.

People Also Ask

Is Rclone faster than Rsync?

Rsync is usually faster for server-to-server delta transfers because it sends changed blocks over SSH. Rclone speed depends on your cloud provider, file sizes, and parallelism settings. Large single files favour Rclone's multipart upload. Many small files favour Rsync over a direct network link.

Can Rclone replace Rsync completely?

Rclone can sync to SFTP endpoints, so it technically covers some Rsync use cases. For two Linux boxes on a fast network, native Rsync with hard links is simpler and more disk-efficient. Most teams keep Rsync for local speed and add Rclone for cloud off-site copies.

Do I need both tools for a single VPS?

A single VPS still needs off-site backups. Use Rclone alone if you have no second server. Add a cheap backup VPS (~Rs 800/month) and Rsync if you want faster restores without cloud egress fees. The 3-2-1 rule recommends at least two media types and one off-site copy.

Which tool works better with cron on Ubuntu?

Both integrate cleanly with cron. Rsync is one command with SSH flags. Rclone needs a configured remote but handles cloud auth for you. Wrap either in a shell script with set -euo pipefail, log output, and alert on non-zero exit. See Ubuntu server setup for PHP apps for baseline cron and logging patterns.

Pick the Right Tool and Test Your Restore Path

The Rsync vs Rclone for server backups question has a practical answer: Rsync for owned infrastructure and fast recovery, Rclone for cloud redundancy and provider flexibility. Production systems I maintain use both in sequence, with database dumps upstream of either tool. Start with one layer today, add the second next sprint, and schedule a restore test before you need it.

Need help designing backup automation for your Laravel, WordPress, or custom PHP stack? Contact us for a backup audit, or explore Linux system administration and Ubuntu server security best practices to harden the full pipeline.

Frequently Asked Questions

Rsync is a block-level delta copier over SSH or an rsync daemon between servers you control. Rclone treats remote storage as a filesystem and handles S3, Backblaze B2, Google Drive, and dozens of other APIs with authentication and multipart uploads built in.

Rsync to a second VPS runs roughly Rs 800/month (~USD 6) for disk. Rclone cloud storage plus egress costs Rs 500–3,000/month (~USD 4–22) depending on volume and restore frequency.

Use Rsync when both ends are Linux servers you administer, SSH keys are already in place, and you need fast incremental sync with hard-link snapshots and minute-scale restores.

Rclone is the right call when your backup destination lives in cloud object storage like AWS S3, Wasabi, Backblaze B2, or Google Drive. On a single EC2 instance, Rs 1,500/month (~USD 11) on B2 often beats Rs 3,500/month (~USD 26) for an idle duplicate VPS. Rclone handles provider authentication, multipart uploads for large files, and optional client-side encryption without you writing SDK code.

Rsync is usually faster for server-to-server delta transfers because it sends only changed blocks over SSH. Rclone speed depends on your cloud provider, file sizes, and parallelism settings like --transfers and --checkers. Large single files favour Rclone's multipart upload. Many small files favour Rsync over a direct network link between two Linux boxes you control.

Rclone can sync to SFTP endpoints, so it technically covers some Rsync use cases. For two Linux boxes on a fast network, native Rsync with hard-link snapshots is simpler and more disk-efficient because unchanged files share inode blocks across daily folders. Most production teams keep Rsync for local and VPS-to-VPS speed, then add Rclone specifically for cloud off-site copies where SSH-to-SSH is not an option.

A single VPS still needs off-site backups. Use Rclone alone if you have no second server and accept slower restores with cloud egress fees. Add a cheap backup VPS at roughly Rs 800/month (~USD 6) plus Rsync if you want faster restores without paying Rs 4,000+ (~USD 30) to pull 500 GB back from S3. The 3-2-1 rule recommends at least two media types and one off-site copy regardless of server count.

Both integrate cleanly with cron on Ubuntu. Rsync ships preinstalled and needs one command with SSH flags. Rclone requires a configured remote in ~/.config/rclone/rclone.conf but handles cloud auth for you. Wrap either in a shell script with set -euo pipefail, log output to /var/log, and alert on non-zero exit. A typical cron entry runs at 2 AM: 0 2 * /usr/local/bin/backup-rsync.sh >> /var/log/backup-rsync.log 2>&1.

The strongest setups use both in sequence. Layer 0 runs mysqldump or Laravel Spatie Backup for database consistency. Layer 1 Rsyncs files and dumps to a local /backups partition. Layer 2 pushes via Rsync to a secondary VPS in another region over SSH. Layer 3 mirrors encrypted tarballs to S3 or B2 with Rclone copy or sync. Layer 4 verifies restores monthly on a staging VM. On booking platforms with reservation data and uploaded documents, a single-tool approach leaves gaps in geographic redundancy.

Hard links let you keep daily snapshots without duplicating unchanged files. Create a dated folder, run rsync -av --delete with --link-dest pointing at the previous latest snapshot, then symlink latest to the new folder. Each day produces a full directory tree where unchanged files share inode blocks with prior snapshots, so disk usage grows only with actual changes. I've used this pattern on production Laravel applications for years alongside cron automation at 2 AM.

Add a crypt remote wrapper in rclone config on top of your S3 or B2 backend. Your cloud provider sees only encrypted blobs, not readable file contents. Generate a strong passphrase with a password generator and store it in your secrets manager, not in the cron script. Rclone encrypts locally and uploads over TLS. S3 bucket policies alone are not enough for sensitive client data on legal-tech portals or eCommerce sites storing customer documents.

The failures I troubleshoot most are configuration errors. Backing up live InnoDB files without a mysqldump first risks corruption. Trailing slash confusion creates nested folder disasters: rsync /src/ dest/ copies contents but rsync /src dest/ creates dest/src/. SSH keys must be mode 600 or cron fails silently. Forgetting --delete leaves stale files on the backup mirror, while a wrong source path with --delete wipes the mirror entirely. Add --bwlimit on shared hosts during business hours.

Using rclone sync when you meant copy is the worst one: sync deletes remote files not present locally, so one empty local folder destroys your cloud archive. Ignoring egress costs hurts during restore drills—a 500 GB S3 restore can cost Rs 4,000+ (~USD 30). Google Drive throttles aggressive transfers, so lower --transfers and add --tpslimit. Rotated IAM keys break nightly cron jobs unless you monitor exit codes. Skipping client-side encryption leaves sensitive data readable to the provider.

For Laravel, Spatie Backup creates zip archives with database dumps and selected directories. Rsync those zips to a backup VPS nightly, then Rclone pushes them to B2 for off-site storage. Exclude vendor/ and node_modules/ since they rebuild from Composer and npm. WordPress core is replaceable—back up wp-content/uploads, your theme, custom plugins, and the database. Rsync handles incremental image uploads efficiently. Rclone suits agencies managing dozens of client sites to one bucket with a prefix per domain.

No. Rsync alone does not guarantee database consistency. InnoDB files copied mid-write can corrupt your backup. Always run mysqldump or use filesystem snapshots before file sync. Pair Rsync file backups with MySQL binary logs if you need point-in-time recovery. On WooCommerce 11.1 stores, order tables grow fast and database dumps matter more than file sync—schedule dumps during low-traffic windows, often 2–4 AM NPT for Nepal stores, upstream of any Rsync or Rclone job.

Share this article

0 Comments

Leave a comment

Your email is not published. Comments appear once they have been read. Sign in to have your details filled in.

Quick Contact Options
Choose how you want to connect me: