yanto.fi

My backups in 2026: seafile and restic

| 1564 words | 8 minutes

I’ve been neglecting backing up my data. Reading posts such as “Backing up data like the adult I supposedly am”, I figured it’s finally time to move forward from an external HDD I’ve been making simple copies to one or two times a year.

This is what I’ve started with: one desktop, two servers, and one external HDD. The data moves between these only when manually triggered: either (A) re-arranging files, such as old projects or photos, into “long term storage” folder on a separate drive attached to the same computer, or (B) using rsync to copy relevant data from all places to the external drive.



I’ve documented every time I performed the manual sync to the external drive: 2 times in 2022, 2 in 2023, once in 2024, and once in 2025. The smallest delta is 83 days and largest is 364 days. It never occurred to me before, but now, while reviewing this data, it finally hit me that throughout the last few years I’ve had practically no backups of recently-created files. I’m also not sure what purpose the RAID1 served; /mnt/OnlineBackup wasn’t actively accessed, so even if one of the drives went down, I would probably not have noticed that for months.

After some re-arranging, the latest iteration of the backup system relies on one single server handling everything related to file sharing and backups. The “server” part is important, as simply relying on myself alone is not a viable strategy, so the server MUST be automated.

Right now, the server hosts seafile for general “OneDrive functionality”, such as immediately syncing file changes between different machines and sharing folders between multiple people/machines. Seafile has data retention functionality, which is great for “I changed/deleted a file one hour ago and I want to restore it” situations. However, seafile is slightly complicated with considerations of data and databases as for the long-term storage you’d have to consider all docker containers and whatnot. This is where the restic comes into play – to provide simple snapshotting. Similarly to seafile, restic also splits files into chunks for efficient de-duplication, but I like that all of that is supported by a single executable (compared to seafile’s multi-step recovery process).



I also find some joy in the names of the data drives. For a long time, I’ve named the servers after gods from Norse Mythology, so midgard being the humans’ realm (which I’m from) and bifrost being the bridge between gods’ realm (the servers) and midgard just seems appropriate. Similarly, the air gapped copy being, in some sense, “frozen in time” seems to allude heavily to jotunheim, often represented as an icy realm. Then again, Jotunheim is also associated with “chaotic nature” (ref), so the associations break down quickly, as I definitely don’t want any chaos in my stable data snapshots!

The data moves as follows:


As a bit of an “nice to have” extra functionality, the weekly script is also doing two additional things: uploading a copy to AWS S3 and pinging healthchecks.io with the backup logs. Overall, the script completes in less than 3 hours:

Restoration of data is quite straightforward. With seafile’s web UI, for libraries that enabled history preservation, there’s historical view of changes and option to restore/download relevant files. With restic, there’s options to restore full/partial snapshot to a specified folder, or mount a snapshot with FUSE. The former is faster, the latter could be more convenient for browsing files first and selecting only few of them.

The backup system attempts to follow the 3-2-1 strategy: 3 copies, 2 devices, 1 offsite. However, by my count, I actually have 5 copies: one active (on server or on desktop), one in seafile (bifrost), one in attached restic (midgard), one in airgapped restic (jotunheim), one in AWS. More copies is probably not a good thing in itself. I do like the idea of having one airgapped copy, in case automation breaks and all backup scripts get replaced with rm -rf /. I also like the offsite copy, for cases when physical preservation of copies becomes a problem. The main struggle I find is with justifying the extra restic copy on midgard. Seafile does support S3 storage but it’s in Pro Edition only and I’m “fiscally stingy”. Alternatively, I could host the ‘primary restic repo’ in the AWS, but that would mean the manual backup would require me downloading the S3 files back again (which is slow and I’m still “fiscally observant”). So, in some sense, it would be nice to have a program that would merge seafile and restic into one package, which, in turn, would allow me to merge bifrost and midgard into one. Then again, I bought the SSDs in 2025 while they were still relatively cheap, so one extra drive/copy is not the biggest issue in the world.

Overall, the best aspect of this system is that it’s automated, even if it’s a bit over-engineered.