Skip to main content

Ralsina.Me — Roberto Alsina's website

My Backup Solution

Intro

Back­ups are im­por­tant ok? I know that. You should know that. So, why don't most peo­ple do prop­er back­ups of their com­put­er­s?

Be­cause most of the ways to do back­ups are ei­ther in­con­ve­nient or use­less.

So, here's how the so­lu­tion I have im­ple­ment­ed that makes back­ups con­ve­nient and use­ful.

The backup tool itself

I use restic be­cause it kicks as­s. It work­s, it's fast, it's space ef­fi­cien­t, and it's easy.

You just need to write a short script like this one:

#!/bin/bash -x

# Where to backup?
MOUNTDIR=/backup
BACKUPDIR=$MOUNTDIR/backup-$HOSTNAME

if [ -d $BACKUPDIR ]
then
    # Backups are password protected
    export RESTIC_PASSWORD=passwordgoeshere

    # What to backup
    restic -r $BACKUPDIR --verbose backup \
            /home/ralsina \
            --exclude ~ralsina/.cargo \
            --exclude ~ralsina/.local/share/Steam/ \
            --exclude ~ralsina/.cache \
            --exclude ~ralsina/.config/google-chrome/ \
            --exclude ~ralsina/.rustup \
            --exclude ~ralsina/.npm \
            --exclude ~ralsina/.gitbook \
            \
            /etc/systemd/system/backup.* \
            /usr/local/bin

    # Keep at most one backup for the last 7 days that have backups
    restic -r $MOUNTDIR/backup-pinky forget --prune --keep-daily=7
    # Cleanup
    restic -r $MOUNTDIR/backup-pinky prune
    # Make really sure things are stored
    sync; sync; sync; sync
fi

Backup rule 3-2-1

The 3-2-1 rule:

  • 3 copies of the back­up da­ta (1 pri­ma­ry, 2 copies)
  • 2 dif­fer­ent me­dia
  • 1 must be off­site

In my case, these are:

  • Pri­ma­ry back­up is to disk
  • Sec­ondary back­up is to a disk in an­oth­er ma­chine (sim­i­lar scrip­t, us­ing sftp)
  • Ter­tiary back­up is to a pen drive (d­if­fer­ent me­di­a) I then put in my pock­et (off­site).

To per­form the pri­ma­ry and sec­ondary back­up­s, it's just two slight­ly dif­fer­ent ver­sions of that script (ac­tu­al­ly, it's just one script with ar­gu­ments, left as an ex­er­cise for the read­er).

The ter­tiary back­up is a bit more com­pli­cat­ed, be­cause I want­ed it to be con­ve­nient

The Convenient Way To Backup to a Removable Drive

My us­er sto­ry was this:

As a per­son that needs an off­site back­up but don't want to trans­mit all that data, I want to plug a pen drive in­to the ma­chine and have it AU­TO­MAT­I­CAL­LY start back­ing the da­ta in­to the pen drive.

Then, once the back­up is fin­ished, at some point, I can just un­plug it and take it with me.

Let's just say that find­ing a way that works took me a few hours and I am pret­ty sure my so­lu­tion is more com­pli­cat­ed than it needs to be. But hey, it work­s, so it's good enough.

This be­ing Lin­ux and the year be­ing 2022 ... this so­lu­tion in­volves sys­temd. And be­cause it's sys­temd, it's com­pli­cat­ed.

Automount

First part is we need to mount the pen drive automatically in a well known location. For this we need two things. An automount service, so systemd will automatically mount something in /backup:

/etc/systemd/system/backup.automount

[Unit]
Description=Automount Backup

[Automount]
Where=/backup
TimeoutIdleSec=5min

[Install]
WantedBy=multi-user.target

And a mount service so it knows what to mount in /backup and how:

/etc/systemd/system/backup.mount

[Unit]
Description=Backup
Wants=backup.service
Before=backup.service

[Mount]
What=/dev/disk/by-uuid/74cac511-4d7a-4221-9c0f-e554de12fbf1
Where=/backup
Type=ext4
Options=auto

[Install]
WantedBy=multi-user.target

The in­ter­est­ing parts are:

  • Wants and Before: that backup.service is going to be a systemd service that actually runs the backup script. We want it to run, and to run AFTER the device is mounted.
  • Where and What: Where is the mountpoint, and What is the pen drive's UUID as shown by sudo blkid

En­able and start the au­to­mount ser­vice, no need to do any­thing to the mount one.

Then of course we need the back­up ser­vice it­self. Just a "oneshot". When it's start­ed, it runs the back­up scrip­t:

/etc/systemd/system/backup.service

[Unit]
Description=Backup
Requires=backup.mount
After=backup.mount

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

[Install]
WantedBy=multi-user.target

En­able but don't start this ser­vice. Since it's "Want­ed" by the moun­t, that means when the de­vice is ef­fec­tive­ly mount­ed the back­up will start.

OR THAT WOULD IT DO IF THINGS MADE SENSE.

Sadly, the device is only mounted when, after being inserted, something tries to use the mountpoint. So, with these three services installed nothing happens unless, after you plug the pen drive you go and do something like ls /backup, which triggers the mount, which triggers the backup script.

So, how does one fix that? No idea. My workaround was to add TWO MORE SERVICES, so that ls /backup runs every minute.

/etc/systemd/system/backup_try.timer

[Unit]
Description=Try to run backup

[Timer]
OnUnitActiveSec=1min

[Install]
WantedBy=timers.target

/etc/systemd/system/backup_try.service

[Unit]
Description=Trigger Backup

[Service]
Type=oneshot
ExecStart=/bin/ls /backup

[Install]
WantedBy=multi-user.target

And with that, yes, I can just plug the pen drive when I get to the of­fice in the morn­ing and un­plug it lat­er, know­ing there is a back­up in it.

Radxa Zero!

Lo qué?

Las Ras­pbe­rry Pi son úti­le­s, bue­nas y ba­ra­ta­s. Ex­cep­to por un de­ta­lle: es im­po­si­ble com­prar­la­s.

No hay sto­ck de Ras­pbe­rry PI 4, no hay sto­ck de Ras­pbe­rry Pi Ze­ro 2W, no hay sto­ck de na­da, ex­cep­to Pi Pi­co (que son mi­cro­con­tro­la­do­res) y Pi 400 (que no son lo que quie­ro­).

En­ton­ces bus­qué al­ter­na­ti­va­s, y en­contré la bue­na gen­te de All­net Chi­na que ven­de la lí­nea Ro­ck Pi.

¿Cómo son las Rock Pi?

  • Son ... pa­re­ci­das a las Ras­pbe­rry
  • En har­dwa­re, en al­gu­nos ca­so­s, son me­jo­res!
  • En so­ftwa­re ... es­tán un po­co más cru­da­s.
  • En com­pa­ti­bi­li­dad son más com­pli­ca­da­s.

Pe­ro ... HAY STO­CK y A BUEN PRE­CIO y MAN­DAN A AR­GEN­TI­NA!

Así que me com­pre un par de Ra­d­xa Ze­ro­s. Son co­mo una Pi Ze­ro ... pe­ro la CPU es mas o me­nos co­mo la de una Pi 4????

Tu­ve un pro­ble­mi­ta ini­cial­men­te pa­ra pa­gar­lo pe­ro me lo re­sol­vie­ron de in­me­dia­to y me upgra­dea­ron el shi­pping a Fe­dEx, así que lle­ga­ron en dos se­ma­nas y no pa­gué adua­na.

Eso sí, Fe­dEx no te avi­sa que cuan­do te lo traen te van a co­brar "al­go­", y no te di­cen cuán­to ni que te­nés que pa­gar cas­h.

En mi ca­so fue­ron $5400 y no me avi­sa­ron a tiem­po asi que tu­ve que es­pe­rar un día ex­tra.

Y qué tal andan?

Her­mo­so. La CPU es rá­pi­da. Man­ja­ro an­da 10 pun­tos (u­na vez que en­ten­dí co­mo ins­ta­lar­lo­).

Tie­ne eM­MC así que no ne­ce­si­ta tar­je­ta SD!

Un pro­ble­ma es que no he po­di­do ha­cer an­dar mi dis­play 1920­x480 (hay so­lo una men­ción de otra per­so­na en la In­ter­net in­ten­tán­do­lo, tam­po­co le an­du­vo)

Sal­vo eso? Ex­ce­len­te.

Es­toy mi­gran­do mi ser­ver Pi­nky a una Ra­d­xa, ya que la ten­go y con­su­me lo mis­mo que la Pi 3

Si bien leí va­rias ad­ver­ten­cias so­bre que se pue­den re­ca­len­tar no pa­re­cen pa­sar de los 48 gra­dos en uso nor­ma­l.

En ge­ne­ra­l, las re­co­mien­do, pe­ro ca­da uno ten­drá que ver cuán­to quie­re gas­tar y pa­ra qué.

The cases I built for my mini servers

I have writ­ten a cou­ple posts about my rasp­ber­ry-pi home server­s. And peo­ple seem to like the cas­es I 3d-print­ed for them.

Well, if you liked them here they are.

For a Rasp­ber­ry pi 3-based serv­er you need:

  • The case it­self
  • Caps to lock each disk in its slot: 1 and 2
  • Cap to lock the pi in its slot

For a Rasp­ber­ry pi 4-based serv­er you need:

  • The case it­self
  • Caps to lock each disk in its slot: 1 and 2
  • Cap to lock the pi in its slot

All these are just the fol­low­ing de­signs from thin­gi­verse slapped to­geth­er:

  • Pi 3 sleeve case: here
  • Pi 4 sleeve case: here
  • HDD case: here

They work bet­ter (or at al­l!) if you use a pow­ered USB hub. There is no room in the case for it, just buy one you like and glue it to the side :-)

Case with a USB server glued to it

Owning a Pet Server in 2022 (Part 2)

Owning a Pet Server in 2022 (Part 2)

In part 1 I de­scribed why I want­ed this server, and some of the trade­offs and de­ci­sions I had to make to make it hap­pen and work nice­ly.

This is an up­date af­ter re­view­ing some of those de­ci­sion­s, and adding some more soft­ware.

Hardware Changes

  • I added a pow­ered hub. This makes the two-HDD sit­u­a­­tion much more man­age­able avoid­ing un­der­­volts that could harm the hard­ware. I used a cheap pow­ered USB HUB.

  • I tried us­ing a Pi 4 with 4GB of RAM, USB 3 and faster CPU and ... there was no per­­ceiv­able dif­fer­­ence in per­­for­­mance. So, it's back to a Pi 3B+ with 1GB of RAM.

    Mem­o­ry us­age hov­­ers around 500MB so no prob­lem there.

  • I will get a 4-­port white HUB and in­te­grate it in­to the case (or do a new case) at some point.

Software Changes

  • Moved all ser­vices to run dock­­er­ized.

    I was re­luc­­tant at first, sus­pec­t­ing a per­­for­­mance im­­pact. Well, it's neg­li­gi­ble and it makes run­n­ing things MUCH sim­­pler.

    Spe­­cial h/t to lin­uxserv­er.io for their nice, qual­i­­ty con­­tain­er­s.

  • Added Hedge­­Doc a kick­­ass mark­­down ed­i­­tor / note-­­tak­ing ap­­pli­­ca­­tion / many oth­­er things. Us­ing it to write this!

  • Added FreeRSS as a re­­place­­ment for my us­age of In­­ore­ad­er.

  • Added Medusa, Tran­s­mis­­sion and Jel­­lyfin which com­bined turn in­­­to a nice "hey, I want to watch this TV show" so­lu­­tion.

  • THi­­sis in ad­di­­tion to a we­b­site, gitea and mux­imux to give a uni­­fied fron­­tend to ev­ery­thing.

How does it perform?

I can be stream­ing a video via Jel­lyfin (with transcod­ing) and read­ing news on FreshRSS with nice re­sponse times, and mem­o­ry us­age hov­ers around 500M­B, which CPU load is around 4.

So, I think this is about as far as I can push it, but it's a lot of func­tion­al­i­ty for a tiny, cheap, home serv­er.

Owning a Pet Server, in 2022

Introduction

The slow­est pen­du­lum in tech is the dis­tri­bu­tion/­cen­tral­iza­tion one. It takes years, even decades to swing. That's why we once had cen­tral­ized time­shar­ing com­put­ers with dumb ter­mi­nal­s, and then we had per­son­al com­put­er­s, which we turned in­to in­ter­net ter­mi­nal­s, which we are stuck with.

This seems to be stick­ing, but hey, so did the oth­er two. It may swing the oth­er way, or it may not. Who knows, I am not a fu­tur­ol­o­gist, but I am swing­ing it a lit­tle bit, for my­self, in one small area: I am not hap­py with my da­ta liv­ing pri­mar­i­ly in large serv­er farms owned by oth­er­s.

So, rather than hav­ing my da­ta live in a cat­tle serv­er in a serv­er far­m, it now most­ly lives in a pet server, at home.

Al­low me to in­tro­duce you to ... pinky.

Picture of a small white plastic computer

Pinky will not wow you with spec­s, it's per­haps the slow­est prac­ti­cal serv­er pos­si­ble:

  • Rasp­ber­ry Pi 3b+, 1GB of RAM
  • 16GB SD card
  • 2x500GB HDD (mir­rored)

But it is more than enough for some spe­cif­ic class­es of work I need­ed. In this doc­u­ment I will try to ex­plain why I want­ed to do them, de­scribe them, and ex­plain the trade­offs in­volved, and the de­ci­sion process that lead me to the de­ci­sion to adopt this so­lu­tion.

Software

One of the most im­por­tant things here is Gitea.

It's hard to over­state what a game chang­er it is for a spe­cif­ic kind of user: Gitea makes host­ing a user-friend­ly git ser­vice easy and cheap.

So what? You may ask.

Well, a git serv­er is use­ful as a back­end for many ac­tu­al­ly use­ful ser­vices, even if you don't care about soft­ware de­vel­op­ment (which I do).

Pass

For ex­am­ple, sup­pose you want to man­age your own pass­word­s, in­stead of re­ly­ing on a third par­ty ser­vice. Well one way to do it is to use pass which is an open source im­ple­men­ta­tion which is sup­port­ed in most web browser­s, desk­top ap­pli­ca­tion­s, ter­mi­nals and what­not.

But if you have more than one de­vice ... then how do you sync your pass­words be­tween them? Yes, us­ing a git serv­er.

Chezmoi

Yes, I use more than one com­put­er. I have one at home, one in the of­fice, an­oth­er one for work, plus I am build­ing some home­made stuff us­ing rasp­ber­ry pis, and I want some things to work in the same way in all of them.

Chez­moi is an im­ple­men­ta­tion of the dot­files con­cep­t.

Ba­si­cal­ly: you tell it to man­age some of the con­fig files in your home di­rec­to­ry, which are then ver­sioned and shared be­tween com­put­ers us­ing ... you guessed it, a git serv­er.

It took some ef­fort to get things in a use­ful state but now I think it's ac­tu­al­ly adding val­ue to my sys­tem­s.

My Website

Yeah, I know, so 2003. But hey, it works for me. A cen­tral­ized lo­ca­tion for:

  • Things I write, like this one
  • Books I read and com­ment one, via goodreads
  • Videos I make, via youtube

Again, one of the goals is that my da­ta is mine so all those book list­s, and com­ments and star-rat­ings and what­ev­er ... why would they live on­ly in goodread­s? What if Ama­zon clos­es it?

Well, be­cause I can write soft­ware, I just get it all and put it in my own site, thank you very much.

And guess where the canon­i­cal source of all that is? Yeah, a git repos­i­to­ry, au­to­mat­i­cal­ly built and de­ployed.

Dis­clo­sure: my site is most­ly host­ed on a VPS I al­ready pay for, but there is a mir­ror at home­.ralsi­na.me which is, in­deed, in my pinky serv­er.

Gateway to my Office / Home VPN

All these ser­vices need to be ac­cessed from some­where. Us­ing some gen­er­ous free-ti­er ser­vices from fly and tailscale plus some con­fig­u­ra­tion ef­fort I can, from any of my com­put­ers (and my phone too) ac­cess any oth­er, re­gard­less of where they are, as long as they have some sort of in­ter­net con­nec­tion.

Hardware

Why THIS Hardware?

Be­cause I had it ly­ing around.

  • The rasp­ber­ry from old pro­ject­s, gath­er­ing dust.
  • Two 500GB HDDs from old note­books and giv­en as gift­s.

I had to buy 2 US­B-SA­TA ca­bles (about 5 dol­lars) and a nicer knit­ted mi­cro-usb an­gled ca­ble so it looked pret­ty (1 dol­lar).

Performance

Yes, it's pret­ty slow, but ... is it?

The rasp­ber­ry pi 3b+ is a 4-­core ma­chine, so it can run gitea, a web serv­er and a cou­ple oth­er things with­out any is­sues.

Sure, it's USB 2.0 on­ly, so ac­cess to stor­age is ... not fast.

OTO­H, most of the time I am ac­cess­ing ei­ther very small things (a git pull is pret­ty ef­fi­cien­t!) or over a slow link (30Mbps at most) so stor­age speed is hard­ly ev­er the bot­tle­neck.

One spe­cif­ic thing that makes no sense would be RAID mir­ror­ing be­tween the two disks, it would just make ev­ery­thing slow­er be­cause of the need to write each change twice.

So I turn off one of the disks (saves on wear) and turn it on at night to back­up the whole serv­er in­to it.

Adi­tion­al­ly, I can once a week take the sec­ondary disk and back it up off­site.

Power Usage

Run­ning at full throt­tle, my USB pow­er con­sump­tion mea­sur­ing thing I got for a dol­lar (so take it with a grain of salt) says it may use 1.1A at 5v, so in av­er­age it's prob­a­bly us­ing some­thing like 4W.

I checked my pow­er bill and that comes down to about 20 ar­gen­tini­an pe­sos a mon­th, or 10 US cents.

The Case

I grabbed a rasp­ber­ry "sleeve" case and a 2.5" HDD "sleeve" case out of thin­gi­verse, and slapped them on­to a few box­es, then print­ed it in the cheap­est 3D print­er mon­ey can buy. It works great.

Be­cause it's a Pi 3 and not a Pi 4 it can be pas­sive­ly cooled with no prob­lem and I print­ed the HDD sleeves at 50% in­fill so they would muf­fle the noise a bit. I can on­ly hear the oc­ca­sion­al click from the hard drives, but it's pret­ty much silen­t.

It's al­so around 10cm in each di­men­sion. That's pret­ty smal­l.

Conclusion

This serv­er (with­out the case, that's new) has been work­ing for around a month. It has au­to­mat­ic soft­ware up­dates for ev­ery­thing and if some­thing would hap­pen to break I can live with­out it for a few days with­out any is­sues.

I con­sid­er it a com­plete suc­cess.


Contents © 2000-2023 Roberto Alsina