For example, iOS has these features:
- iCloud backup restore or peer-to-peer transfer, very early in the device setup process
- Two ways for things to be stored in iCloud, each with a corresponding list of per-app (not per-folder) toggle switches in iCloud Settings
- “Saved to iCloud” normal syncing
- Requires apps to use the right APIs and to handle conflicting changes
- Allows same data to be read and modified by multiple devices
- iCloud backup
- Available for all apps
- Separate backup per device
- Only downloaded when setting up a new device
- In app sandboxes, only excludes
tmp
(Flatpak equivalent is somewhere in/run
) andLibrary/Caches
(equivalent tocache
directory in Flatpak sandbox) by default - Allows apps to set
isExcludedFromBackup
attribute for specific files (useful for things that are easy to recreate via download but are expected by the user to not be automatically deleted) - Includes system configuration such as home screen layout
- Backs up a list of installed apps without backing up their executables and assets
- “Saved to iCloud” normal syncing
- Synced list of previously installed apps, not separate per-device
Not that I have it all figured out, but it sounds like it would help to decouple backup from sync. I have syncthing keep a two-way sync, including deletes, but have syncthing’s trash as a “backup” (items deleted after n-days) on each device in case I accidentally delete something. Then I have a nightly, encrypted backups with versions stored offsite (eg borg) which is only meant to be used if there’s major failure like a flood or fire. HDD failure is covered by RAID10 NAS. Somewhere in there I have or need a data integrity/hash check, but at least it’s a start.