• 0 Posts
  • 63 Comments
Joined 2 years ago
cake
Cake day: July 5th, 2023

help-circle





  • Every hour. Could do it more frequently if needed.

    It depends on how resource intensive the backup process is.

    Consider an 800GB Immich instance.

    Using Duplicity or rsync takes 1 hour per backup. 99% of the time is spent in traversing the directory structure and checking which files have changed. 1% is spent into transferring the difference to the backup. Any backup system that operates on top of the file system would take this much. In addition, unless you’re using something that can take snapshots of the filesystem, you have to stop Immich during the backup process in order to prevent backing up an invalid app state.

    Using ZFS send on the other hand (with syncoid) takes less than 5 seconds to discover the differences and the rest of the time is spent on the data transfer, at 100MB/s in my case. Since ZFS send is based on snapshots, I don’t have to stop the service either.

    When I used Duplicity to backup, I would backup once week because the backup process was long and heavy on the disk array. Since I switched to ZFS send, I do it once an hour because there’s almost no visible impact.

    I’m now in the process of migrating my laptop to ZFS on root in order to be able to utilize ZFS send for regular full system backups. If successful, eventually I’ll move all my machines to ZFS on root.




  • With 2 disks that would be type mirror in ZFS-speak, completely built-in. Equivalent to RAID1 in terms of hardware fault tolerance.

    You could do a 3-disk mirror or n-disk mirror really. The RAID5/6 rough equivalents are called RAIDzN where N is the number of disk failures they tolerate. E g. RAIDz1, RAIDz2, etc. You probably want a mirror unless you need more space than a single disk provides.


  • Yup, turn it on, let it do a scrub, then turn it off. I’d still use redudnancy though. Not merely to cover the case of the drive failing, but also to cover the bit rot use case. It’s exceedingly unlikely bits to rot at the exact same spot on two or more disks. When ZFS finds a checksum mismatch during a scrub (which indicates bit rot), it’ll be able to trivially recover the data from the drive where the checksum matches. It’ll then rewrite the rotten part.


  • ZFS with automatic snapshots and scrubbing. This will keep as many and as old snapshots as your like. It’ll ensure the files don’t rot. It’ll ensure the media doesn’t die, so long as you have enough redundancy and you replace disks as they die. This is what I’d trust for long term storage because I think I understand how and why it works. It should last as long as I feed it disks. If I delete something, I should be able to restore it from a snapshot. The hardware doesn’t need to be anything fancy. Just a Pi 4/5 with a couple of WD Elements would be fine. Could add more disks for more redudnancy. I’m running 2-disk residency.

    You don’t have to touch the software if it’s not exposed to the Internet. Whatever works today on it will work 20 years from now, so long as the hardware works. A couple of spare Pis, SD cards and power supplies should let it last for decades.






  • As briefly as possible:

    • Host side
      • If you use Intel, all is well.
      • If you use AMD…
        • Prior to AM5
          • Use an ASMedia PCIe USB card (StatTech, Sonnet)
          • X570 is especially bad, though I’ve had some success with B350, when using the chipset ports. The CPU ports are all bad. Small form factor PCs often only expose CPU USB ports. They work with single disk per port but if you peg a port with a multi-disk box, they crap out regularly.
        • Post AM5
          • Have only tested USB4 on X870 and it’s solid.
    • Client side
      • WD Elements / MyBook
        • If you get disconnects under load and you’re not on a shit AMD USB host, the USB-SATA controller is overheating. Open them and ahere a heatsink on it. Drill a hole in the case above it for better ventilation. Disconnections will stop. If you don’t want to deal with any of that buy the item below.
      • OWC Mercury Elite Pro Quad
        • Well built, solid controllers, no issues over a year of testing. I have 2, hosting an 8-disk RAIDz2 and 2 hosting a 5-disk RAIDz2.
      • Terramaster
        • A friend bought a 6-bay and tore it down for me. It has the same controllers as the OWC in a similar topology. If it’s cheaper it might be OK. I can vouch for the OWC though.
      • Cables
        • Get name brand cables, ideally higher spec than what you’d need! They aren’t important for a single USB disk but running a 4-disk box can max out the port bandwidth. If the cable can’t handle it… errors. Casually transmitting 10Gbps via easily detachable cables and ports isn’t trivial.

  • If you want to program something, the closest you’re gonna get to programming is Ansible and Bash scripts.

    You might want to get self hosting hardware like Synology or the like if you’re not ready to dig.

    Otherwise here’s some things you need to know:

    • Docker
      • Easy, consistent deployment of services in their own environments. Think a VM but with almost no overhead.
    • Docker Compose
      • Run docker containers with consistent configuration in files.
      • Connect various containers to each other on the same or different networks.
      • Get multiple containers to start together and talk to each other.
    • Systemd
      • Manage any service on Linux. If anything needs to start on boot, restart when crashed, start on timer, you want Systemd.
      • You can manage your docker compose containers lifecycle via Systemd.
    • NGINX/Apache/Caddy
      • A web server for reverse proxy. You’d probably need one at some point, especially if you want HTTPS. Your services get hidden behind it.
    • ZFS
      • Reliable redundant storage. You’ll need storage. Use ZFS with 2-disk redundancy.
      • Supports automatic snapshots for recovering from oopsies. E.g. deleted something or some software shat on your data.
      • Can use recertified disks from serverpartsdeals.
      • Can use USB disks or USB box with multiple disks. If you end up going the USB route, ask me for tested hardware.
    • Backup system
      • Something to do backup. There are many options.
    • Ansible
      • If you want to write code that describes your services and make them happen, you want Ansible. You write code (well YAML) and Ansible installs things, writes config files, sets up Systemd services, restarts things. It can be convenient especially if you have a lot of stuff and you want to be able to see all of your infrastructure in code in one place and be able to version it.
    • Prometheus
      • Monitoring your stuff. Is my backup service running? If not send me an email.

    Oh and use Debian or Ubuntu LTS.