Install it:
sudo apt install rsync openssh-client # Debian / Ubuntu
brew install rsync # macOS, for a modern versionBrowsing still works: you can navigate the server over SFTP and see what is there. Only transfers are disabled. Install rsync on that host.
DiskPush recorded a different key for this host previously. Either the server was rebuilt or reinstalled, or the connection is being intercepted.
If you know why it changed, remove the old entry deliberately:
ssh-keygen -R hostname
ssh-keygen -R '[hostname]:2222' # non-default portDiskPush keeps its own known_hosts under $XDG_CONFIG_HOME/diskpush/.
ssh -v deploy@example.com # what does OpenSSH say?
ssh-add -l # is the key actually in the agent?DiskPush connects with BatchMode=yes, so a missing key fails immediately
rather than hanging on a password prompt nobody can see.
The path exists but the SSH user cannot write to it. Check ownership on the
server. --mkpath creates a missing destination directory, but needs rsync
3.2.3+ on both ends.
Partial data was preserved where possible. Free space and re-run the same command; it continues from the partial file.
That is not a failure. rsync exited with a code that means the data on disk is intact (10, 11, 12, 20, 23, 30 or 35, or a signal). Run the same command again.
diskpush jobs --state interruptedSomething is defeating the quick check. Usual causes:
- A destination filesystem that cannot hold modification times. Common on FAT, exFAT and some network mounts. rsync sees a different mtime every time.
--checksumleft on, which ignores the quick check by design.- Copying across a timezone-naive filesystem, where timestamps drift.
Confirm with a dry run: diskpush SRC DST --dry-run lists what it thinks
changed.
Mirror would delete 87 files at the destination. Re-run with --yes to confirm,
or without --non-interactive to be asked.
Working as intended. Review the delete list, then confirm with --yes.
--delete and its relatives are refused after --, because they would turn a
sync into a mirror behind the preview. Use diskpush mirror.
--remove-source-files is refused because it deletes the source.
Works. Paths are argv tokens, not shell text. If you see a warning about
whitespace, it is about the SSH transport options rather than the path: rsync
splits its --rsh value on spaces with no quoting, so a key path containing a
space is unrepresentable. Put that host in ~/.ssh/config and reference the
alias.
Direct server-to-server transfer is unavailable.
Server A cannot currently connect or authenticate to Server B.
Test it from where it actually happens, on Server A:
ssh server-a
ssh -o BatchMode=yes server-b trueDiskPush will not fall back to relaying the files through your machine. Fix the hop: authorise a key for Server B on Server A, or enable agent forwarding on the connection.
--info=progress2 reports overall progress across the whole transfer. Early in
a large tree, rsync is still building the file list, so the counter can sit at
zero for a while. --stats at the end gives exact totals.
FATAL:setuid_sandbox_host.cc(163)] The SUID sandbox helper binary was found,
but is not configured correctly. Rather than run without sandboxing I'm
aborting now.
Chromium wants one of two sandboxes and this machine can provide neither:
- The namespace sandbox needs unprivileged user namespaces. Recent kernels
restrict them (
kernel.apparmor_restrict_unprivileged_userns=1on Ubuntu 24.04+). - The SUID helper needs
chrome-sandboxowned by root with mode 4755, which only root can set.
Check which applies:
unshare --user true && echo "namespaces work" || echo "namespaces denied"
ls -l /path/to/DiskPush/chrome-sandbox # -rwsr-xr-x is right, -rwxr-xr-x is notDo not use unshare --user true alone to decide. Ubuntu 24.04+ restricts
unprivileged user namespaces through AppArmor but ships a profile for unshare
itself, so that command succeeds while an unconfined binary is still denied.
kernel.apparmor_restrict_unprivileged_userns is what tells the truth.
The installed app handles this itself — its launcher reads that policy,
falls back to --no-sandbox only when the sandbox demonstrably cannot work,
and retries without it if the app dies complaining about the sandbox anyway.
A bare AppImage cannot. Electron aborts before its own JavaScript runs, so
nothing inside the app can detect or recover from this; only an argument from
outside can. Run it with --no-sandbox, or install the .deb, whose postinst
sets the SUID bit as root and installs an AppArmor profile granting the
namespace sandbox:
./DiskPush-0.1.0-linux-x86_64.AppImage --no-sandbox
sudo dpkg -i DiskPush-0.1.0-linux-amd64.deb # sandboxed, needs rootError [ERR_MODULE_NOT_FOUND]: Cannot find package '@diskpush/database'
imported from .../app/resources/cli/dist/bin.js
A packaging bug in 0.1.0's first artifacts: the CLI inside the desktop bundle
shipped an empty node_modules. Update, or reinstall:
curl -fsSL https://diskpush.com/install.sh | shdiskpush ... --print-argsAlways available, on every command, including server-to-server, where it shows the control session and the remote rsync command separately.