DIY Cloud backup 2022 update

Update to the DIY Cloud backup project
2022 update!

In 2017 I built a DIY cloud backup solution (which you can find documented here). This has been running every since but somewhere end of 2021 I decided the used hardware could use a little update.

I’ve been trying to do a video series of basically a re-imagining of the project but I’m having a hard time following it through!

With this post video part 4 (and 5) are going to be released and we are finally heading towards the end of the project!

Below will be article parts to accompany the videos since especially code is easier copy & pasted then having to read and type it from a video!

Bonus – Initial build with old hardware

Part 1 – Analysis and explanation of setup


Part 2 – Proxmox install and software chosen

Bonus – Livestream building the server hardware


Part 3 – Picking up where we left off and the hardware


Part 4 – Install Minio S3 Storage Server

Part 5 – Installing and using the restic backup client


Synopsis of storage setup

It’s explained in detail in the video by the slimmed down version of it is that we’re running Promox as the operating system giving us access to ZFS. We’re using a zRAID2 to have the ability to tolerate 2 drive failures without losing data! Then we’re also using the ZFS system to have the ability to create multiple ZFS datasets combined with settings we can set per dataset such as quotas, etc.

This dataset is the most important part that otherwise isn’t really possible within Minion itself. Yes Minio has gotten many more options over the years and now also partly has the same functionality but the clue here is multi-tenancy. When I get someone a 1TB or 2TB account, I don’t care how many users they want to share that with, how the divide it, amount of users they create, etc. etc.. They can do that all on their own because they each have their own installation of the software and “partitioned” off dataset within ZFS. This way lots of users can use the same server without being able to influence the other users on there.

Hopefully that explains the software stack I’ve chosen and the reasoning behind it!

Used Commands

Creating user “minio”

(This tutorial assumes you are logged in as the root user otherwise you will need to use “sudo” to execute certain commands!)

adduser minio
5x blank enter

Creating ZFS dataset on pool

(This tutorial assumes you are logged in as the root user otherwise you will need to use “sudo” to execute certain commands!)

In this tutorial our pool is called “HDDmirror” please use whatever name you have called your storage pool!

cd /
cd HDDmirror
zfs create HDDmirror/minio
zfs create HDDmirror/minio/quindor
zfs set quota=100G HDDmirror/minio/quindor
chown -R minio:minio /HDDmirror/minio

Installing the minio application

(This tutorial assumes you are logged in as the root user otherwise you will need to use “sudo” to execute certain commands!)

cd /opt
mkdir minio
chown minio:minio minio
cd minio
su minio


chmod +x minio
ls -l

Test start of minio binary

(This tutorial assumes you are logged in as the root user otherwise you will need to use “sudo” to execute certain commands!)

In this part we are still assuming the role as the “minio” user since we never exited above!

MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /HDDmirror/minio/quindor

The URL this command shows is linked to the IP the machine you are working on has, generally it’s port 9001 for the management interface.

The user: admin, the password: password.

Creating a bucket

Please follow the video!

Creating a startup file

(This tutorial assumes you are logged in as the root user otherwise you will need to use “sudo” to execute certain commands!)

exit (become root again)
cd /etc/systemd/system
nano minio.quindor.service

Service file details




ExecStart=/opt/minio/minio server $MINIO_OPTS $MINIO_VOLUMES



Creating the minio environment file

(This tutorial assumes you are logged in as the root user otherwise you will need to use “sudo” to execute certain commands!)

nano /HDDmirror/minio/quindor/minio.env

MINIO_OPTS="--address :9000 --console-address :9001"

Starting the minio.quindor.service service

(This tutorial assumes you are logged in as the root user otherwise you will need to use “sudo” to execute certain commands!)

systemctl daemon-reload
systemctl start minio.quindor.service
systemctl status minio.quindor.service

Part 5 – Restic Backup software

In this part we’re going to be running the restic backup software on Windows. You can find all the Restic pre-compiled binaries (including for Windows) in the github repository here.

In the video we go over how to download and unpack it. I generally rename the current version I’m using to “restic.exe” to make it a bit easier in all my batch files, etc.

Run CMD when creating first backup

For some reason on Windows 11 restic doesn’t function correctly on the first backup if not run in the “cmd” environment for me. I haven’t been able to figure out why that is but at least that fixes the issue for me of it just hanging and not doing anything. Subsequent backups seems to work fine within “cmd” or not.

Initialize the restic repository in the S3 bucket

“addenv.bat” batch file

set AWS_ACCESS_KEY_ID=minioadmin
set RESTIC_PASSWORD=newpassword12
set TMPDIR=c:\temp\restic\temp
set TMP=c:\temp\restic\temp

Run the “addenv.bat” batch file to enable these values.

Restic command to initialize repository

restic -r s3: init

Running first backup

To run the first backup to the just initialized repository we are going to use the following command:

restic -r s3: --verbose backup "d:\arduino"

Second backup with extra options

Let’s add some more options to the backup line for instance how to exclude certain file types and folders!

restic -r s3: --verbose --cache-dir=c:/temp/restic/cache --exclude"**/Downloads" --exclude="**.mkv" backup "d:\arduino"

Restic repository statistics

Let’s see how many backups we have, files and the total size!

restic -r s3: stats

Restic repository snapshots

Snapshots are individual backups restic is holding right now, let’s take a look

restic -r s3: snapshots

 Finding a file in your backups

Let’s try and find a “.jpeg” file in our latest snapshot backup

restic -r s3: find *.jpeg

Restore a file

Let’s restore one of those .jpeg files from the most recent backup.

restic -r s3: --target d:\temp\restore --include Untitled_000076.jpeg restore latest

Restic maintenance

We need to keep our repository under control that it doesn’t just grow indefinitely so let’s do some maintenance.

First we need to tell restic how long we want backups to be kept, you can do this using the keep command.

restic -r s3: --keep-hourly 4 --keep-daily 30 --keep-weekly 52 --keep-monthly 24 --keep-yearly 10 forget

Restic prune

Although the above command tells restic what to keep and what to forget the actual blocks that data is contained in are still there. Let’s tell restic to remove those too so the space used actually shrinks!

restic -r s3: prune

Restic consistency check

How do you know all your backup containers and files are ok? Restic has a check command for this! For a simple check, this command suffices.

restic -r s3: check

Restic check with reading archives

restic -r s3: check --read-data

Restic check with reading some archives

Reading all archives can take a really really long time, partly dependent on the speed of the internet connections involved. To not have to do this every time you can tell restic to only check a percentage of the archives and it will select random archives to check each time!

restic -r s3: check --read-data --read-data-subset=5%

End conclusion

This concludes the basic series of the DIY Backup 2022 episodes! As mentioned in the video I will look into doing some more advanced videos in the future (such as backup scheduling and such) but with the above videos you should be able to build your own solution and get up and running!





Lots of External HDD on a single Power Supply

Sometimes you accumulate a lot of equipment in one spot that all runs on 12v. This can for instance be a rack with multiple switches and routers or, as in my case, 15 External Hard Drives, a USB HUB and some fans that all need 12v. To cut down on the clutter, let’s take out the 18 Adapters to run this and replace them with a single power supply.

Continue reading Lots of External HDD on a single Power Supply

Chia farming info post

I’ve recently started farming Chia using a lot of harddisk space. To me it’s the ultimate system administrators crypto coin since it doesn’t use GPUs and there is a lot involved getting it to run quickly and correctly! This post will serve as an accompanying posts to my videos about the subject.

Continue reading Chia farming info post

4$ Xiaomi Temperature Sensor for Home Assistant

This article is a kind of follow-up on the one I did originally in 2019. ESPhome has improved a lot over time and now there are these 4$ Xiaomi temperature and humidity sensors that can be hacked and then work in the same way. The absolute best way to get per room temperature sensing into Home Assistant in my opinion!

Continue reading 4$ Xiaomi Temperature Sensor for Home Assistant

The video doorbell that does Home Assistant + NVR

I have been searching for a while to replace my current video doorbell solution. Integration with Home Assistant and my NVR software where key in this search. Things like ethernet and POE would be a great bonus. I think I’ve found it so let’s take a look!

Continue reading The video doorbell that does Home Assistant + NVR

Innodisk 3TG6-P 2TB SSD Review

I was in need for some 2.5″ storage for an upcoming project and while looking around I wondered if 2.5″ SSDs has approached the price of physical disks. And while close, even QLC SSDs where still much more expensive. But on ebay I was able to find new 2TB SSDs for around 150$, still more expensive then spinning disk but interesting enough to try it out anyway, let’s see how well they perform! Continue reading Innodisk 3TG6-P 2TB SSD Review

IP camera ethernet water damage, how to repair

As some of you know, I have some IP cameras in my backyard. One of them went offline recently and didn’t come back online. Upon inspecting the connection point between the camera ethernet connector and the patch cable had completely fried because of water damage. Can this Dahua camera still be revived? Let’s replace the ethernet connector and see if it still works!

Continue reading IP camera ethernet water damage, how to repair

Seagate IronWolf 10TB Firmware Fix (CRC errors with ZFS)

I’ve been using Seagate IronWolf disks for a few years now and currently have about 20 in service, most of those are the 10TB (and 12TB) Non-Pro (ST10000VN0004) variety. Most of my experience with them has been great so when the new server build came along I bought a few more to run as my main ZFS pool. Sadly, things didn’t go exactly as planned, but I think I was also able to fix it, so let’s see what happened!

Continue reading Seagate IronWolf 10TB Firmware Fix (CRC errors with ZFS)

My personal blog for pasting random (mostly technology related) things out of my head on (virtual) paper