Selfhosted
A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.
Rules:
-
Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.
-
No spam posting.
-
Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.
-
Don't duplicate the full text of your blog or github here. Just post the link for folks to click.
-
Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).
-
No trolling.
Resources:
- selfh.st Newsletter and index of selfhosted software and apps
- awesome-selfhosted software
- awesome-sysadmin resources
- Self-Hosted Podcast from Jupiter Broadcasting
Any issues on the community? Report it using the report flag.
Questions? DM the mods!
view the rest of the comments
Note that you do not need any sort of redundancy to detect corruption.
Redundancy only gains you the ability to have that corruption immediately and automatically repaired.
While this sounds nice in theory, you have no use for such auto repair if you have backups handy because you can simply restore that data manually using your backups in the 2 times in your lifetime that such corruption actually occurs.
(If you do not have backups handy, you should fix that before even thinking about RAID.)
It's incredibly costly to have such redundancy at a disk level and you're almost always better off using those resources on more backups instead if data security is your primary concern.
Downtime mitigation is another story but IMHO it's hardly relevant for most home users.
Can you explain this to me better?
I need to work on my data storage solution, and I knew about bit rot but thought the only solution was something like a zfs pool.
How do I go about manually detecting bit rot? Assuming I had perfect backups to replace the rotted files.
Is a zfs pool really that inefficient space wise?
Sure :)
Right. There are other ways of doing this but a checksumming filesystem such as ZFS, btrfs (or bcachefs if you're feeling adventurous) are the best way to do that generically and can also be used in combination with other methods.
What you generally need in order to detect corruption on ab abstract level is some sort of "integrity record" which can determine whether some set of data is in an expected state or an unexpected state. The difficulty here is to keep that record up to date with the actually expected changes to the data.
The filesystem sits at a very good place to implement this because it handles all such "expected changes" as executing those on behalf of the running processes is its purpose.
Filesystems like ZFS and btrfs implement this integrity record in the form of hashes of smaller portions of each file's data ("extents"). The hash for each extent is stored in the filesystem metadata. When any part of a file is read, the extents that make up that part of the file are each hashed and the results are compared with the hashes stored in the metadata. If the hash is the same, all is good and the read succeeds but if it doesn't match, the read fails and the application reading that portion of the file gets an IO error that it needs to handle.
Note how there was never any second disk involved in this. You can do all of this on a single disk.
Now to your next question:
In order to detect whether any given file is corrupted, you simply read back that file's content. If you get an error due to a hash mismatch, it's bad, if you don't, it's good. It's quite simple really.
You can then simply expand that process to all the files in your filesystem to see whether any of them have gotten corrupted. You could do this manually by just reading every file in your filesystem once and reporting errors but those filesystems usually provide a ready-made tool for that with tighter integrations in the filesystem code. The conventional name for this process is to "scrub".
You let the filesystem-specific scrub run and it will report every file that contains corrupted data.
Now that you know which files are corrupted, you simply replace those files from your backup.
Done; no more corrupted files.
Not a ZFS pool per-se but redundant RAID in general. And by "incredibly costly" I mean costly for the purpose of immediately restoring data rather than doing it manually.
There actually are use-cases for automatic immediate repair but, in a home lab setting, it's usually totally acceptable for e.g. a service to be down for a few hours until you e.g. get back from work to restore some file from backup.
It should also be noted that corruption is exceedingly rare. You will encounter it at some point which is why you should protect yourself against it but it's not like this will happen every few months; this will happen closer to on the order of every few decades.
To answer your original question directly: No, ZFS pools themselves are not inefficient as they can also be used on a single disk or in a non-redundant striping manner (similar to RAID0). They're just the abstraction layer at which you have the choice of whether to make use of redundancy or not and it's redundancy that can be wasteful depending on your purpose.
@Atemu @beastlykings Every few decades seems optimistic. I have an archive of photos/videos from cameras and phones spanning from early 2000s to mid-2010s. There's not a lot, maybe 6gb; a few thousand files. At some point around the end of that time period, I noticed corruption in some random photos.
Likewise, I have a (3tb) flac archive, which is about 15-20 years old. Nightly 'flac -t' checks are done on 1/60th of the archive, essentially a scrub. Bitrot has struck a dozen times so far.
Interesting. I suspect you must either have had really bad luck or be using faulty hardware.
In my broad summarising estimate, I only accounted for relatively modern disks like something made in the past 5 years or so. Drives from the 2000s or early 2010s could be significantly worse and I wouldn't be surprised. It sounds like to me your experience was with drives that are well over a decade old at this point.
@Atemu Well yes, this is experience of self-hosting for close to 25 years, with a mix of drives over those years. I have noticed much better quality drives in the past decade (helium hdds running cooler/longer, nvram, etc) with declining failure rates and less corruption.
But especially if you're talking about longer time scales like that ("every few decades"), it's difficult to account for technology changes.
@Atemu Drives from the mid/late-2000s in particular were just poorly behaved for me. Recent drives (2014+) have been much better. Who knows how 2030s drives will behave? So I will continue scrubbing data as I swap out older drives for newer ones.
Oh absolutely; I would never advocate against verifying your data's integrity.