I haven’t tested in Windows, but this is my setup Linux to Linux using rclone which the docs say works with Windows.
Server
- LUKS
- LVM
- Volgroup with a mishmash of drives in a mirror configuration
- Cache volume with SSD
- BTRFS /w Snapshots (or ZFS or any other snapshotting FS)
- (optional) Rclone local “remote” with Crypt if you want runtime encryption at rest and the ability to decrypt files on the server. You can skip this and do client side only if you don’t want the decryption key on the server.
- SFTP (or any other self-hosted protocol from https://rclone.org/docs/)
Client
- Rclone Config /w SFTP (or chosen protocol)
- (optional) Rclone Config /w Crypt
- Rclone mount with VFS.
I use this setup for my local files and a similar setup to my Backblaze B2 off site backups.
The VFS implementation has been pretty good. You can also manually sync. Their bisync I don’t fully trust though.
I can access everything through android using https://github.com/newhinton/Round-Sync. Not great for photos though as thumbnails weren’t loading without pulling the whole file last I tested a year ago.
Immutable Nixos. My entire server deployment from partitioning to config is stored in git on all my machines.
Every time I boot all runtime changes are “wiped”, which is really just BTRFS subvolume swapping.
Persistence is possible, but I’m forced to deal with it otherwise it will get wiped on boot.
I use LVM for mirrored volumes for local redundancy.
My persisted volumes are backed up automatically to B2 Backblaze using rclone. I don’t backup everything. Stuff I can download again are skipped for example. I don’t have anything currently that requires putting a process in “maint mode” like a database getting corrupt if I backup while its being written to. When I did, I’d either script gracefully shutting down the process or use any export functionality if the process supported it.