Seafile
Seafile is a solid contender for file synchronization.
Some key features:
- Backend is supported by algorithms to encode files as blocks, stored in the
/seafile-data
directory. This facilitates fast synchronization and delta-sync. - Has clients for virtually every system, including Windows, Mac, Linux, CLI, and even drive mounts.
- Community edition is free and open-source.
Its strength is also its weakness when it comes to file syncing. Because the files are stored differently internally, this adds an additional layer of technology to access files, and makes it massively annoying to interface with these files:
- Uploading to Seafile from a terminal or web GUI involves interfacing through the
seafile-cli
client, or via the WebAPI. The FUSE extension is available, but is read-only. - Downloading from Seafile is similarly tedious because of this interface barrier. One option is to regularly export the Seafile database as files in the file system using
seafile_fsck
, noting the files now need to be duplicated. - By extension, this significantly bars the use of Seafile as a CDN server, since will need to write additional wrappers to pull the images out, on top of an authentication layer.
- Mounting an external drive does not seem like an option, although creating a logical volume on the OS-level will help mitigate this problem. This is necessary for Seafile servers which only provide the interface to a backend storage server. An alternative is relocating the entire
/seafile-data
directory to the remote server. Another alternative is using the middle-man solely as a Seafile client. See here as well.
However, comparing directly to Dropbox, is a FTP upload option really necessary? Dropbox technically does not officially support such implementations, although files can be uploaded to be sync-ed... The real requirements are:
Nextcloud | ownCloud | Pydio Cells | Seafile | Syncthing | |
---|---|---|---|---|---|
Upload to file sync via HTTPS | ❔ | ❔ | ❔ | ❌ (tedious) | ❔ |
Upload to file sync via filesystem | ❔ | ❔ | ❔ | ✅ | ❔ |
Download files directly without authentication | ❔ | ❔ | ❔ | ❌ | ❔ |
Web GUI client | ❔ | ❔ | ❔ | ✅ | ✅ |
Desktop GUI clients | ❔ | ❔ | ❔ | ✅ | ❔ |
Mountable as drive on desktop | ❔ | ❔ | ❔ | ✅ | ❔ |
"Smart sync" (synchronize filenames without content) | ❔ | ❔ | ❔ | ✅ | ❌ |
Filesystem-only backend | ❔ | ❔ | ❔ | ❌ | ✅ |
Have seen a recent review mentioning that Pydio Cells has a tendency to break.
... as I have learnt, you can't do direct filesystem editing with Nextcloud either. Requires notifying the occ
watcher to update the Nextcloud directory...
Some thoughts after using it for a while:
- Speedy is really the main draw - and drawback. Seafile uploads files with lightning speeds, especially files below 100MB as a rule of thumb, but seems to absolutely flob when uploading/downloading much larger files.
- Likely because of some level of chunking going on that somehow slows down the server, perhaps I need more cores for these operations to become a little more efficient?
- Download speeds can vary from 15MB/s on small files, to 0.2MB/s on larger files. Concurrent threads, perhaps...? A forum post from 2019 also seems to highlight the same symptoms.
- The storage format doesn't work well when integrating with media servers which require access to the raw files.
Seafile still remains relatively stable. Note that the professional edition is highly recommended over the community edition which requires manual garbage collection of dereferenced blocks. While the professional edition has online GC, the manual GC requires a periodic server shutdown at least once a week.
See below for a comparison of space taken:
Professional | Community | |
---|---|---|
Actual files (GB) | 24 | ~10 |
Actual storage (GB) | 70.767 | 125.004 |
└ commits | 0.104 | 0.320 |
└ fs | 0.527 | 1.613 |
└ blocks | 70.138 | 123.073 |
Consider looking into this Seafile backup script.
Docker is crashing again, taking down several containers along with it, including the Seafile server. This is pretty problematic... on top of this, the Seafile client on Android does not support two-way synchronization, so the best way about this for Android is DropSync.