4 novembre 2015

How to build a cheap NAS for rsync backup with Raspberry Pi - first part

(In my poor English at bottom)

"Il backup è Vita, il Backup è cosa buona e giusta"

Esistono molti sistemi di backup, dal semplice copia incolla su una penna usb alle soluzioni cloud di big data.
In ambiente domestico  si stanno diffondendo i NAS per poter salvaguardare la propria vita digitale fatta, ormai, di centinaia di GB di foto, film, ebook, files musicali e documenti.
Stiamo parlando di una spesa minima di 150 € per il NAS a cui aggiungere la spesa degli Hard Disk, un NAS a disco singolo da 1 TB può venire a costare ben più di € 200.

Ma volete mettere il piacere di far da sé?
Ora, a chi è dedicata questa guida?
Non solo agli utenti di GNU/Linux BSD eccetera.
E' dedicata anche agli utenti di windows che vogliano cimentarsi un po' con linux e che, tuttavia, non abbiano nessuna intenzione di abbandonare Windows sul loro PC:
questo NAS funzionerà anche per voi!

Quali competenze vi servono?


Competenze? 

Beh, saper instaurare una connessione ssh non guasta, saper usare un editor di testo tipo vim, nemmeno.
Se vi installate una classica ubuntu in Virtualbox potreste rapidamente acquisire le necessarie competenze.
Se partissimo da zero in tutti gli ambiti, questa guida sarebbe più lunga per i prerequisiti che per l'argmento principale, quindi, pur non dando per scontato nulla, linkerò delle guide utili ai vari segmenti del nostro lavoretto.

Cosa vi occorre:

Un Raspberry Pi funzionante (ma la guida è valida per qualunque computer con su linux, che so, un vecchio netbook che tenete spento da anni) ed un supporto esterno per il backup, tipicamente un Hard Disk esterno USB, ma, se, ad esempio, avete da salvare solo una ventina di GB di dati, potreste usare una microsd da 32 GB per il Raspberry più che sufficiente anche per il backup.

Il vantaggio di questa soluzione è nella sua completa automazione, economicità (il Raspberry vi costerà attorno ai 50 €, schedina micro SD per il suo sistema operativo inclusa) e nello stimolo didattico per chi si approccia all'universo linux di apprendere e migliorarsi.

Cos'è il Raspberry Pi? Ve lo andate a leggere qui.
Cos'è Linux? Idem, qui.

Per prima cosa: il sistema operativo originale del Raspberry non va bene.
E' troppo pesante ed è difficile ripulirlo dei servizi inutili, tanto vale usare direttamente una versione basica di Debian che potrete scaricare qui (e dove trovate le istruzioni per l'installazione)

Sapete instaurare una connessione ssh dal vostro PC al Raspberry usando putty o, meglio, Mobaxterm?

Ecco qui la guida ufficiale di Raspberry.
Poi, il vostro hard disk esterno deve essere formattato con un file system più digeribile possibile per linux: NTFS di windows funzionerà lo stesso, ma le prestazioni del sistema ne sarebbero degradate, quindi formattate il vostro hard disk esterno direttamente in ext4, ci sono molti tool per fare questa operazione anche da un computer windows.
Andiamo con ordine: siete seduti di fronte al vostro PC con una connessione ssh al Raspberry funzionante.


ssh username@IPdelRaspberry


Quasi tutte le operazioni andranno eseguite come utente amministrativo root, quindi digitiamo:


su root



e inseriamo la password scelta in fase di installazione.




Per prima cosa occorre impostare il fuso orario e la tastiera, ecco i comandi:

dpkg-reconfigure tzdata

dpkg-reconfigure console-data
dpkg-reconfigure console-data
dpkg-reconfigure locales

E' sempre il caso di operare con software aggiornato:


apt-get update

apt-get upgrade

rispondendo Y alla richiesta del sistema di installare eventuali aggiornamenti

Poi è il momento di installare il software necessario ai nostri scopi;

 apt-get install screen vim rsync


Che cosa abbiamo installato?



screen è un programma che consente di lanciare un comando e disconnettersi dal raspberry con la certezza del proseguimento del funzionamento del comando;

vim è un editor di testo (non molto intuitivo nel funzionamento ma da qualche parte si deve pur cominciare)
rsync è il programma di sincronizzazione che useremo per il backup.

il passo successivo consiste nel far riconoscere il disco usb al raspberry. Linux riconosce automaticamente i dischi, ma non effettua, automaticamente, il montaggio di tali dischi sul file -system nelle versioni server come quella installata sul Raspberry.

E' come se voi inseriste una penna usb in un pc windows che non la apre automaticamente.
Inoltre, sempre per fare un parallelo con windows, bisogna fare in modo che il disco montato finisca sempre nello stesso punto del file system, in altri termini che la lettera assegnata da Windows alla pennetta usb resti sempre la stessa anche dopo vari riavvi e ricollegamenti.
Iniziamo a fare sul serio: digitiamo

fdisk -l


E ci ritroviamo di fronte qualcosa del genere:



Disk /dev/mmcblk0: 7969 MB, 7969177600 bytes

4 heads, 16 sectors/track, 243200 cylinders, total 15564800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00027aa3

        Device Boot      Start         End      Blocks   Id  System

/dev/mmcblk0p1            2048      104447       51200    b  W95 FAT32
/dev/mmcblk0p2          104448     1742847      819200   83  Linux
/dev/mmcblk0p3         1742848     1945599      101376   82  Linux swap / Solaris

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes

81 heads, 63 sectors/track, 382818 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5ba59dda
Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048  1953525167   976761560   83  Linux


Niente paura. 

Il comando che abbiamo dato elenca i dischi del sistema, un po' alla volta si prende dimestichezza, per adesso basti saper che mmcblk0 è la scheda microSD del Raspberry mntre sda è l'hard disk USB.
Ecco, a noi interessa proprio la stringa /dev/sda1 che sta a significare che la nostra partizione ext4 sull'hard disk esterno si chiama, appunto, /dev/sda1.
Manca ancora un pezzo:

ls /dev/disk/by-uuid -alh


drwxr-xr-x 2 root root 160 gen  1  1970 .

drwxr-xr-x 6 root root 120 gen  1  1970 ..
lrwxrwxrwx 1 root root  15 gen  1  1970 0a0e4e5a-7652-402a-89ea-5e524f5f8a37 -> ../../mmcblk0p2
lrwxrwxrwx 1 root root  10 gen  1  1970 6ba8c7e8-5c61-4448-8b73-26175ca6adfe -> ../../sda1
lrwxrwxrwx 1 root root  15 gen  1  1970 972837af-21d7-41cf-9f1e-4a3bb27b87ae -> ../../mmcblk0p3
lrwxrwxrwx 1 root root  15 gen  1  1970 A51D-3FFB -> ../../mmcblk0p1



Vediamo di capirci qualcosa. Avete presente l'sda1 che vien fuori dall'ultimo comando?
E che vuol dire l'ultimo comando?
Chiediamo al sistema di elencare tutte le partizioni presenti elencandole per UUID, ossia quel codice alfanumerico che identifica univocamente le partizioni.
Nel nostro caso: 6ba8c7e8-5c61-4448-8b73-26175ca6adfe
E che ce ne facciamo?
Beh, lo usiamo per dire al sistema che sda1 è identificato da 6ba8c7e8-5c61-4448-8b73-26175ca6adfe sempre e per sempre, anche se stacchiamo l'hard disk o riavviamo il sistema.
Creiamo una cartella in cui il nostro bravo raspberry andrà a montare l'hard disk esterno:

cd /media/   Ci spostiamo nella cartella /media/
mkdir 1tb  creiamo la cartella 1tb
chown -R user:user 1tb/   diamo all'utente il possesso della cartella
chmod -R 755 1tb/  assegnamo i permessi di scrittura e lettura a questa cartella


Ora, un attimo di attenzione. 

1tb è una cartella vuota, di proprietà dell'utente pi in cui tutti possono leggere e solo pi può scrivere.
Tutto qua.


E il nostro sda1 con tutto quel po' po' di codice lungo appresso? 

vim /etc/fstab

#                            
proc            /proc           proc            defaults                0       0
/dev/mmcblk0p1  /boot           vfat            defaults                0       0
/dev/mmcblk0p3  none            swap            sw                      0       0
UUID=6ba8c7e8-5c61-4448-8b73-26175ca6adfe       /media/1tb      ext4    defaults        0       2

Ecco qua dove andiamo ad inserire il nostro codice che abbiamo ricavato dal comando ls /dev/disk/by-uuid -alh, nella riga in grassetto.
Ora, usare vim non è semplicissimo, si può adoperare al suo posto nano, un altro editor un po' meno ostico, ma alla fine della fiera si deve aggiungere al normale file fstab quella riga.
Ovviamente il codice sarà diverso per ogni partizione (altrimenti che identificativo unico sarebbe?) e bisogna vedere come avete chiamato la cartella in cui andare a montare il disco esterno.
Una volta salvato potete uscire e 'montare' la nuova partizione nel sistema con il comando

mount -a

potete verificar il successo dell'operazione entrando nella cartella /media/1tb e verificando lo spazio disponibile nel sistema con il comando

df -h

File system     Dim. Usati Dispon. Uso% Montato su
rootfs          772M  533M    223M  71% /
/dev/root       772M  533M    223M  71% /
devtmpfs        215M     0    215M   0% /dev
tmpfs            44M  224K     44M   1% /run
tmpfs           5,0M     0    5,0M   0% /run/lock
tmpfs           108M     0    108M   0% /run/shm
/dev/mmcblk0p1   50M   19M     31M  38% /boot
/dev/sdb1       917G  270G    602G  31% /media/1tb

In questo caso il disco da 1tb è occupato per il 31%.
Riavviate fiduciosi il raspberry, il disco sarà di nuovo lì, montato e scrivibile.
E ora?
Ora dobbiamo finalmente impostare il nostro sistema di backup a partire dal PC di cui vogliamo fare il backup.
In questa guida, al momento, prepareremo il backup di un computer che usa linux, poi aggiungerò anche una sezione per un client windows.
Spostiamoci, quindi, sul computer di cui si deve fare il backup.
Imposteremo un sistema che, automaticamente, alle 20 di sera, sincronizzerà il contenuto di una propria cartella con il disco da 1tb collegato al raspberry.
Coraggio, il peggio è alle spalle.
Accendiamo il nostro PC linux di cui, ad esempio, desideriamo fare il backup della nostra home.
Apriamo una finestra di terminale e digitiamo:


ssh-keygen -t rsa -C "Raspberry"

non inserire alcuna password quando ci verrà richiesto ma premiamo semplicemente invio.
Cosa abbiamo fatto? Abbiamo generato una coppia di chiavi, per i dettagli suggerisco la lettura di questa guida.

Copiamo la chiave pubblica sul raspberry con il comando

ssh-copy-id -i ~/.ssh/id_rsa.pub username@IPdelRaspberry

e proviamo a connetterci al raspberry senza inserire la password

ssh username@IPdelRaspberry

se non ci viene richiesta la password siamo a posto.

Nella nostra home possiamo preparare lo script di backup:

creiamo il file backup.sh, lo rendiamo eseguibile (esercizio ;) ) e dentro ci incolliamo:

#!/bin/bash

rsync --exclude=".cache" -avrzh --delete --progress --log-file=/home/username/raspberrypi.log /home/username/ -e "ssh" username@IPdelRaspberry:/media/1tb/



rsync è il programma di backup, il parametro  --exclude="lost+found" esclude la cartella .cache dal backup (si possono aggiungere tutte le esclusioni necessarie), --delete cancella i files dalla cartella di backup non più presenti nella cartella sorgente, -- progress visualizza il progresso dell'operazione, poi abbiamo la generazione del log (sempre utile) e la cartella di origine.

Per ultimo,  -e "ssh" username@IPdelRaspberry:/media/1tb/ vuol dire che rsync si collega usando il protocollo ssh col nome utente indicato al raspberry nella cartella /media/1tb/

E come facciamo a farlo lanciare automaticamente ogni sera alle 20?

Editiamo come root il  file /etc/crontab aggiungendo la riga in grassetto allo script:


# /etc/crontab: system-wide crontab

# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
00 20 * * * username /home/username/backup.sh >/dev/null 2>&1

E questo è tutto.

Ogni sera alle 20, se entrambe le macchine sono accese, il PC automaticamente sincronizzerà la home con il raspberry.
Non aspettatevi grandi prestazioni nel trasferimento dei files, ecco perchè l'ideale è usare questo sistema per il backup notturno magari del classico muletto, un PC a basso consumo che faccia da file server domestico.

PRO:

  • economicità nei componenti e nei consumi;
  • estremamente didattico per imparare ad usare linux;
  • completamente automatico

CONTRO:


  • Se ci si deve ricorare di accendere il PC prima delle 20 non è davvero un backup automatico (ma ne parleremo nella prossima puntata)
  • prestazioni insufficienti
  • recupero files di backup dal disco usb non immediato nè rapido


Sono stato un po' prolisso, sicuramente imperfetto, migliorerò la guida nel tempo e aggiungerò qualcosina anche per windows quanto prima.

Buon backup a tutti







"The Backup is life, the backup is a good and right thing"
There are a lot of backup systems: from a simple  copy and past on an usb pendrive to big data cloud.
In the home environment are spreading the NAS in order to safeguard their digital life made, now, of hundreds of GB of photos, movies, ebooks, music files and documents.
We are talking about a minimum cost of 150 € for the NAS to wich add the cost of the hard drive, a single disc 1 TB NAS can cost well over € 200.
But you want to put the pleasure of doing it yourself?
Now, who to bring this guide?
Not only users of GNU / Linux BSD etc.
It 'also dedicated to Windows users who want to try a little with linux and that, however, they have no intention of giving up Windows on their  PC:
this NAS will work for you too (in the next part of this guide)!
What skills do you need?
Skills? Well, you should know how to establish an ssh connection and how to use a text editor like vim.
If you installed a classic ubuntu in virtualbox you could rapidly acquire the necessary skills.
Starting from scratch in all areas of this guide would be longer for the prerequisites thanb for the beef, therefore, while not assuming anything, I'll link someuseful guides to the various segments of our job.

What you need:


running Raspberry Pi (but the guide applies to any computer running on Linux, say, an old netbook that you hold off for years) and external media for backup, typically a USB external hard drive, but if, for example, you have to save only about twenty GB of data, you could use a microSD 32GB for Raspberry more than enough even for the backup.


The advantage of this solution is in its full automation, cost (the Raspberry will cost around 50 €, Micro SD Card to its operating system included) and stimulating educational for those approaches universe linux to learn and improve.


What is the Raspberry Pi? You'll go read here.

What is Linux? Go here.

First: the original operating system of Raspberry's not good.

It is too heavy and full of unnecessary services (including a graphical desktop), you might use directly a basic version of Debian that you can download here (where you can find also instructions for installation)


You know how to establish an ssh connection from your PC to the Raspberry using putty or, better, MobaXterm?

Here is the official documentation of Raspberry.
Then, your external hard drive must be formatted with a file system can be more digestible for linux: NTFS windows work, yes, but system performance will be degraded, then format your external hard drive directly in ext4, there are many tools to help with that too from a windows computer.

Now you're sitting in front of your PC with a ssh functioning connection to the Raspberry.


ssh username@IPdelRaspberry


Almost all operations will be run as an administrative user root, then type:


su root


and enter the password chosen during installation.


First, you must set the time zone and keyboard, here are the commands:


dpkg-reconfigure tzdata

dpkg-reconfigure console-data
dpkg-reconfigure console-data
dpkg-reconfigure locales

It's bettere work  with updated software:


apt-get update
apt-get upgrade

Then it's time to install the necessary software for our purposes


 apt-get install screen vim rsync


What we have installed?

Screen is a program that allows you to run a command and disconnect from raspberry with the certainty of the continuing operation of the command;
Vim is a text editor (not very intuitive in operation but somewhere it has to start)

rsync is the synchronization program that we will use for backup.

The next step is to recognize the USB disk to raspberry. Linux disks automatically recognizes, but does not, automatically, the installation of such records on file -system versions server as the one installed on Raspberry.
And 'as if you inseriste a USB stick into a Windows PC that does not open automatically.
Moreover, to make a parallel with windows, we must make sure that the disk mounted to end at the same point of the file system, in other words that the letter assigned by Windows to the USB key always remains the same even after several reboots and reconnections.

We begin to get serious: we type


fdisk -l


And we are faced with something like this:



Disk /dev/mmcblk0: 7969 MB, 7969177600 bytes
4 heads, 16 sectors/track, 243200 cylinders, total 15564800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00027aa3


       Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            2048      104447       51200    b  W95 FAT32
/dev/mmcblk0p2          104448     1742847      819200   83  Linux
/dev/mmcblk0p3         1742848     1945599      101376   82  Linux swap / Solaris


Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
81 heads, 63 sectors/track, 382818 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5ba59dda
Device Boot      Start         End      Blocks   Id  System


/dev/sda1            2048  1953525167   976761560   83  Linux

No fear. The command we have given lists disks in the system, a bit 'at a time you get comfortable, for now suffice it to know that mmcblk0 is the microSD card Raspberry mntre sda is the USB hard drive. Here, we are interested in just the string / dev / sda1 which means that our ext4 partition external hard drive is called, precisely, / dev / sda1. Still missing a piece:



ls /dev/disk/by-uuid -alh

drwxr-xr-x 2 root root 160 gen  1  1970 .

drwxr-xr-x 6 root root 120 gen  1  1970 ..

lrwxrwxrwx 1 root root  15 gen  1  1970 0a0e4e5a-7652-402a-89ea-5e524f5f8a37 -> ../../mmcblk0p2

lrwxrwxrwx 1 root root  10 gen  1  1970 6ba8c7e8-5c61-4448-8b73-26175ca6adfe -> ../../sda1

lrwxrwxrwx 1 root root  15 gen  1  1970 972837af-21d7-41cf-9f1e-4a3bb27b87ae -> ../../mmcblk0p3

lrwxrwxrwx 1 root root  15 gen  1  1970 A51D-3FFB -> ../../mmcblk0p1

And let's figure it out. 

You remember the sda1 that comes out from the last command?
And that means the last command?
We ask the system to list all partitions by listing by UUID, ie the alphanumeric code that uniquely identifies partitions.
In our case: 6ba8c7e8-5c61-4448-8b73-26175ca6adfe
And what do we do?
Well, we use it to tell the system that sda1 is identified by 6ba8c7e8-5c61-4448-8b73-26175ca6adfe always and forever, even if we detach the hard disk or reboot the system.

We create a folder in which our raspberry will mount the external hard drive:



cd /media/  we are moving in the /media/ directory
mkdir 1tb we create the directory 1tb
chown -R pi:pi 1tb/ give to the user the possession of the directory 1tb


chmod -R 755 1tb/  → let's assign the permissions to the directory

Now, a moment's attention. 1tb is an empty folder, that you own more when everyone can read and write can only pi. That's all. And our sda1 with all the little 'bit' of long code below?

vim /etc/fstab

#                              
proc            /proc           proc            defaults                0       0
/dev/mmcblk0p1  /boot           vfat            defaults                0       0
/dev/mmcblk0p3  none            swap            sw                      0       0
UUID=6ba8c7e8-5c61-4448-8b73-26175ca6adfe       /media/1tb      ext4    defaults        0       2


Here's where we're going to put our code that we have obtained from the command ls / dev / disk / by-uuid -alh, in bold line. Now, using vim is not easy, you can use nano in place, another editor a bit less difficult, but at the end of the fair is to be added to fstab that line. Obviously, the code will be different for each partition. Once saved, you can go out and 'mount' the new partition in the system with the command



mount -a



you can verify the success of entering into the / media / 1TB and verifying the space available in the system with the command





df -h


File system     Dim. Usati Dispon. Uso% Montato su

rootfs          772M  533M    223M  71% /

/dev/root       772M  533M    223M  71% /

devtmpfs        215M     0    215M   0% /dev

tmpfs            44M  224K     44M   1% /run

tmpfs           5,0M     0    5,0M   0% /run/lock

tmpfs           108M     0    108M   0% /run/shm

/dev/mmcblk0p1   50M   19M     31M  38% /boot
/dev/sdb1       917G  270G    602G  31% /media/1tb

In this case the 1tb disc is busy for the 31%. Restart confident the raspberry, the disc will be back there, still mounted and writable. And now? Now we finally set up our backup system from the PC we want to backup. In this guide, at the time, we will prepare to back up a computer running Linux, then add a section to a windows client. Let's move, then, on your computer that you should back up. We will set up a system that automatically at 20 pm, will synchronize the contents of your folder with 1TB disk connected to the raspberry. Courage, the worst is behind us. We turn on our PC linux which, for example, want to back up our home. Open a terminal window and type:

ssh-keygen -t rsa -C "Raspberry"

not enter a password when we will be asked (twice). What have we done? We have generated a key pair, for details suggest the reading of this guide. We copy the public key on the raspberry with the simple command

ssh-copy-id -i ~/.ssh/id_rsa.pub username@IPdelRaspberry

and we try to connect to the raspberry without password

ssh username@IPdelRaspberry

if no password is asked we're ok. In our home directory we can prepare the backup script backup.sh
Edit it with vim, nano or a text editor, then make ite executable (how? A little exercise)

#!/bin/bash
rsync --exclude=".cache" -avrzh --delete --progress --log-file=/home/username/raspberrypi.log /home/username/ -e "ssh" username@IPdelRaspberry:/media/1tb/

Here's our backup script: rsync is the backup program, the parameter --exclude = "lost + found" folder .cache exclude from backup (you can add all the exclusions necessary), --delete delete files from the backup folder is no longer in the folder source - progress shows the progress of the operation, then we have the generation of log (always useful) and the source folder. Finally, -e "ssh" username @ IPdelRaspberry: / media / 1TB / means that rsync is connected using the ssh protocol with the user name indicated in raspberry in the / media / 1TB / And how do we do that launch automatically every night at 20? Edit it as root / etc / crontab and add the line in bold script:


# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
00 20 * * * username /home/username/backup.sh >/dev/null 2>&1

And that's it.

Every night, at 20, if both machines are on, the PC automatically synchronize the home with the raspberry.
Do not expect great performance in the transfer of the files, which is why it is best to use this system for the nightly backup maybe using a classic forklift, a low-power PC to serve as a home file server

PRO:
cheap price for components and consumption
extremely educational to learn to use linux

AGAINST:
recover files from the backup disk usb not immediate nor fast
If you must remember to turning on your PC before 20 is not an automatic backup
poor performance 
I was a bit 'confused, certainly imperfect, will improve the guide over time and add something for windows as soon as possible. Good backup at all