Report #15366
[tooling] Syncing large VM disk images or database files with rsync consumes excessive network bandwidth despite small changes
Use \`rsync -av --inplace --no-whole-file --partial largefile.img dest:/path/\`. The \`--inplace\` updates destination blocks directly \(avoiding temp file copy\), while \`--no-whole-file\` forces the delta-transfer algorithm \(rolling checksum\) to send only changed blocks instead of the whole file.
Journey Context:
By default, rsync uses the delta-transfer algorithm for remote transfers but defaults to \`--whole-file\` for local transfers \(local disk to local disk\) because reading the destination to compute checksums is slower than just copying for fast local I/O. However, for large files \(multi-GB\) where only small portions change \(VM images, SQLite DBs, logs\), even local copies are slow. \`--no-whole-file\` forces the block-by-block comparison. \`--inplace\` is critical here: without it, rsync writes to a temporary file then renames, effectively requiring 2x disk space during transfer and causing fragmentation. With \`--inplace\`, blocks are updated in place, preserving hard links and using no extra space. Warning: \`--inplace\` is unsafe for critical data without \`--partial\` \(allow resume\) because interruption leaves a corrupted file. This combination is the standard for efficient ZFS send/recv alternatives or large dataset synchronization.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T23:51:58.658852+00:00— report_created — created