Rsync e la sincronizzazione dei contenuti Web

rsync aggiornamento web

Rsync aggiornamento Web

Supponiamo che ci tocchi gestire in produzione un numero X di frontend Web dietro un bilanciatore e che quindi, ad ogni nuova release, si renda necessario caricare i contenuti su ciascuno di essi (rendendo la vita difficile agli sviluppatori).

Certo il mercato e’ ricco di software di Configuration Manager, ma in questo caso ho deciso di usare come esempio l’automazione mediante l’uso di rsync, del resto non serve una Ferrari per fare la spesa. In pratica, i contenuti Web verranno caricati manualmente su un’unico frontend (che servirà da server) mentre le altre macchine fungeranno da client (ovvero aggiorneranno i loro contenuti ogni X minuti consultando direttamente la macchina server).

Configurazione della macchina server

Tale attività si articola in due fasi: la prima consiste nell’installazione e nella corretta configurazione del demone xinetd (evoluzione del celebre inetd), mentre la seconda riguarda solo ed esclusivamente rsync.

Procediamo dunque con l’installazione di xinetd:

[root@server ~]# yum install xinetd

ed impostiamo l’avvio automatico del demone in questione per i diversi runlevel:

[root@server ~]# chkconfig --levels 2345 xinetd on

Posizioniamoci nella dir /etc/xinetd.d ed apriamo in scrittura il file rsync, sostituendo la direttiva:

disable = yes

con

disable = no

In definitiva, il suddetto file, dovrà avere il seguente contenuto:

service rsync
{
        disable = no
        flags           = IPv6
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

Passiamo ora al secondo step relativo alla configurazione della macchina server, ovvero la creazione del file rsyncd.conf nella directory /etc:

[root@server ~]# touch /etc/rsyncd.conf

All’interno del suddetto file creeremo dei moduli ad-hoc contenenti tutte le direttive necessarie per la sincronizzazione dei contenuti tra server e client, ad esempio:

log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
[images]
   path = /var/www/html/images
   uid = root
   gid = root
   read only = no
   list = yes
   host allow = 10.11.12.0/24

Salviamo il file ed avviamo xinetd:

[root@server ~]# service xinetd start

Configurazione delle macchine client

Tale configurazione consiste esclusivamente nella creazione di una entry crontab del tipo:

*/1 * * * *  root rsync -agruv root@10.11.12.1::images /var/www/html/images/

ovvero ogni minuto viene contattato il server (10.11.12.1, modulo images che punta a/var/www/html/images/) e viene sincronizzato il contenuto della Dir del client /var/www/html/images/.

Bene, l’aggiornamento e’ servito!

#RsyncSincronizzazione#AmbientiWeb

Rsnapshot Backup a riga di comando

Rsnapshot Backup a riga di comando

Rsnapshot Backup a riga di comando

#Rsnapshot Backup incrementali a riga di comando
rsnapshot e’ un utile software per effettuare backup incrementali, grazie all’utilizzo di rsync ed il tutto da riga di comando.

RSNAPSHOT
I software in commercio, in grado di effettuare backup incrementali del nostro sistema operativo oppure delle nostre directory preferite, sono molti e vari. Ad esempio per effettuare backup incrementali su Linux possiamo utilizzare Back In Time, Kup, Duplicati, TimeShift ecc. Per gli utemti che utilizzano Server Linux ma che preferiscono operare da terminale esiste rsnapshot, progetto open source che ci consente di effettuare backup incrementali grazie al tool rsync.

Attraverso rsnapshot possiamo effettuare backup incrementali di filesystem locali e remoti con numerose ed utili funzionalità.

Installare rsnapshot in Debian/Ubuntu e derivate è semplicissimo basta digitare da terminale:

sudo apt-get install rsnapshot

una volta installato dovremo operare sul file di configurazione in /etc/rsnapshot.conf
Configurazione

Per configurare rsnapshot è necessario aprire il file /etc/rsnapshot.conf con un editor di testo con i privilegi di amministrazione.

Ogni riga del file di configurazione dovrà contenere elementi separati dal carattere Tab e non dovrà contenere spazi. Non è quindi consigliabile fare il copia ed incolla delle seguenti istruzioni:

La seguente direttiva specifica la cartella di destinazione dei backup:

rsnapshot_root   /media/backup/
no_create_root 1

Si supponga di effettuare il backup tutti i giorni e di voler conservare le seguenti copie:

backup giornaliero dei 7 giorni precedenti;
backup settimanale delle 4 settimane precedenti;
backup mensile dei 6 mesi precedenti.

Le direttive di configurazione specifiche per una tale pianificazione sono le seguenti:

interval daily 7
interval weekly 4
interval monthly 6

Ora occorre definire le cartelle in cui fare i backup. Supponendo di voler conservare i file contenuti nelle cartelle /home /etc e /usr/local, nella cartella backup, aggiungere le seguenti istruzioni:

### BACKUP POINTS / SCRIPTS ###
backup /home/ snapshot/
backup /etc/  snapshot/
backup /usr/local/ snapshot/

Se invece si intende fare il backup di porzioni di file system di un sistema remoto, è possibile utilizzare il protocollo ssh, come nel seguente esempio:

backup root@example.com:/home/ snapshot/example.com/

Inoltre è possibile aggiungere direttive per l’inclusione e l’esclusione di file mediante il pattern matching così come specificato nella pagina di manuale di rsync. Suppondendo di voler escludere tutti i file .mp3 dal backup è sufficiente aggiungere la seguente direttiva:
exclude *.mp3
Infine, è possibile testare il file di configurazione digitando il seguente comando in una finestra del terminale:

sudo rsnapshot configtest
# Syntax OK

Automatizzare il backup
È possibile effettuare il backup di vari servizi mediante degli script controllati da rsnapshot.

Supponendo di voler effetttuare il backup di un database MySql, si realizzi uno script, da inserire in un nuovo file (es. /root/scripts/backupmysql.sh), simile al seguente:

mysqldump nomedatabase --user=root --password=passworddiroot > dump.sql

Dopo aver impostato il nome del database in «nomedatabse» e dopo aver impostato le opzioni «user» e «password» con il nome utente desiderato e la relativa password, è possibile richiamare lo script a partire dal file di configurazione sopra citato con un’istruzione simile alla seguente:

backup_script /root/scripts/backupmysql.sh snapshot/mysql/

rsnapshot lancerà lo script e sposterà nella cartella snapshot/mysql/ tutti i file di output prodotti nella cartella corrente.

Avvio del programma

rsnapshot deve essere avviato specificando il tipo di backup che si intende utilizzare. Questo corrisponde ad una delle direttive «interval» sopra descritte.

Per avviare il tipo di backup desiderato digitare il relativo comando in una finestra di terminale:

  • backup giornaliero:

    sudo rsnapshot daily
  • backup settimanale:
    sudo rsnapshot weekly
  • backup mensile:
    sudo rsnapshot monthly

     

*Aggiungendo l’opzione -t al comando è possibile verificarne il corretto funzionamento. Quello che segue è un esempio:

test :

# sudo rsnapshot -t hourly
echo 24319 > /var/run/rsnapshot.pid 
mkdir -m 0755 -p /media/backup/hourly.0/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
 /home/user/Immagini /media/backup/hourly.0/snapshot/ 
touch /media/backup/hourly.0/

Per maggiori informazioni su rsnapshot consiglio di consultare il Wiki ufficiale di Ubuntu.

Montare una cartella FTP

CurlFTPfs

CurlFTPfs

FTP in tasca

Sempre piu’ spesso la mole di dati che ci troviamo a dover gestire ci impone di creare ed utilizzare i piu’ svariati servizi di Cloud Storage presenti sul mercato, molti di questi offrono comode partizioni gestibili via FTP su cui spostare/upgradare tutti i nostri piu’ preziosi ricordi.

Come fare pero’ ad organizzare un sistema di backup e ripristino di questi dati, possibilmente rendendo l’operazione facile come scorrere il nostro file system locale ? . La soluzione potrebbe risiedere in un software, che permette di montare un server FTP come se fosse una normale directory del proprio filesystem.

Per fare questo è necssario installare curlftpfs dal proprio repository. In Ubuntu bastera’ basta digitare:

sudo apt-get install curlftpfs

Una volta installato possiamo montare la nostra cartella ftp con il seguente comando:

sudo curlftpfs -o user=utente:password mio_server punto_di_mount

Se per esempio il server fosse ftp.<mio_server>.it , con nome utente pippo e, con password pluto, il comando sarà:

sudo curlftpfs -o user=pippo:pluto ftp.<mio_server>.it /media/scambio # il mio punto di mount

Da questo momento in poi la mia cartella /media/scambio conterrà i files presenti sul server FTP e potranno essere copiati, spostati ed eliminati come se fossero presenti sul proprio filesystem. In questo modo, se si dovesse avere anche un minimo di conoscenza di programmazione della shell, si potra’ creare uno script per il backup dell’intero disco/repository/sito (insomma di quello che volete) con pochissimi comandi, automatizzando il tutto.

Check Disk

Salvaguardare lo stato di salute del disco :

Gli Hard Disk sono una delle parti più delicate degli odierni pc, ed infatti sono tra le periferiche che più facilmente sono soggette a rompersi.

Fortunantamente ci sono degli strumenti studiati per diagnosticare i malfunzionamenti prima ancora che possano creare danno. Ma ricordate che un backup periodico dei dati importanti è sempre la scelta migliore.

In questo articolo vedremo come usare alcuni strumenti come smartmontools e badblocks per monitorare lo stato di salute di un hard disk.

* Controllare lo stato di salute di un HD: smartmontools

Gli smartmontools permettono di usare la funzionalità SMART di tutti i moderni HD grazie alla quale è possibile prevedere con 24 ore di anticipo la rottura di un HD.

In debian basta installare il pacchetto smartmontools:

# apt-get install smartmontools

* Analizzare lo stato dell’HD: 

Possiamo usare l’utility smartctl per analizzare lo stato dell’HD.

Innanzi tutto vediamo alcune informazioni generiche sul nostro HD:

 sudo smartctl --scan
/dev/sda -d scsi # /dev/sda, SCSI device
/dev/sdd -d scsi # /dev/sdd, SCSI device
 sudo smartctl -a /dev/sda  # questo ci permettera' di vedere ogni info sul disco in questione

=== START OF INFORMATION SECTION ===
Model Family: Western Digital Scorpio Blue Serial ATA
Device Model: WDC WD5000BEVT-22ZAT0
Serial Number: WD-WXNY08ND3649
LU WWN Device Id: 5 0014ee 257a423e8
Firmware Version: 01.01A01
User Capacity: 500.107.862.016 bytes [500 GB]
Sector Size: 512 bytes logical/physical
Rotation Rate: 5400 rpm
Device is: In smartctl database [for details use: -P show]
ATA Version is: ATA8-ACS (minor revision not indicated)
SATA Version is: SATA 2.6, 3.0 Gb/s
Local Time is: Mon Jun 30 10:54:33 2014 CEST

SMART support is: Available - device has SMART capability.
SMART support is: Enabled

oltre alle informazioni generiche, dalle ultime due righe si capisce che l’HD supporta la tecnologia SMART e che il supporto è attivato. Se non fosse attivato basterebbe questo comando:

sudo smartctl -s on /dev/sda

per attivare il supporto SMART.

E’ anche possibile effettuare dei test più o meno approfonditi sul disco. Alcuni test si possono effettuare con l’HD montato e funzionate, ed il test stesso avrà un impatto minimo o nullo sulle prestazioni del sistema.

Per effettuare un test:

sudo smartctl -t <tipo_test> /dev/sda

dove tipo_test può essere:

short
effettua un test sul disco di durata inferiore a 10 minuti, può essere eseguito durante il normale funzionamento e non impatta le prestazioni. Questo test controlla le performace meccaniche ed elettriche del disco, oltre che le performance in lettura.

long
effettua un test di durata da 40 minuti ad un ora (a seconda del disco). Può essere effettuato durante il normale funzionamento del disco e non ha impatto sulle prestazioni. Questo test è una versione più estesa dello short test.

conveyance
effettua un test di alcuni minuti atto a scoprire difetti dovuti ad incurie nel trasporto dell’HD. Può essere eseguito durante il normale funzionamento dell’HD.

Esistono anche altri tipi di test per i quali si rimanda alla simpatica pagina di manuale: man smartctl.

I risultati di questi test vengono riportati nella parte finale dell’output di smartctl -a /dev/sda, come notato in precedenza.

Controllo automatizzato :

E’ possibile attivare il demone smartd fornito dal pacchetto smartmontools per monitorare in continuazione lo stato di salute dell’HD e notificare ogni anomalia immediatamente tramite syslog.

Normalmente il demone è disabilitato. Per abilitarlo bisogna editare il file /etc/default/smartmontools e decommentare la riga:

start_smartd=yes

Dobbiamo inoltre configurare smartd per deciderne il suo comportamento. A tal scopo editiamo il file /etc/smartd.conf. Leggendo i commenti nel file e l’amichevole pagina di manuale (man smartd.conf) è possibile scegliere quali parametri smartd debba monitorare, programmare dei test automatici, e decidere quali azioni intraprendere in caso di errore.

Nel mio caso ho inserito solo la seguente linea per il solo disco di sistema:

/dev/sda -a -o on -S on

che attiva il monitoraggio di tutti (-a) i parametri, abilitia l’ automatic online data collection (-o on), e abilita il salvataggio degli attributi (-S on) in modo che le informazioni di log di SMART vengano memorizzare nella FLASH del disco e siano disponibili anche dopo il riavvio.

Verifica di settori corrotti con BadBlocks : 

** Data lapotenza dell’utility che va a lavorare davvero a basso livello se ne consiglia l’uso solo nei casi in cui l’hard disk risulta gia’ compromesso e comunque soltanto dopo aver gia’ effettuato un backup (come precedentemente spiegato). L’utility badblocks permette di fare un controllo di basso livello per vedere se su una partizione sono presenti dei settori danneggiati.

I moderni HD  fanno un controllo automatico degli errori e sono in grado di segnare dei settori corrotti che di conseguenza non verranno più usati. Questo rende in parte inutile badblocks, ma se si effettua un controllo e dei settori risultano danneggiati vuol dire che probabilmente la superficie del disco contiene così tanti settori danneggiati che la circuiteria di controllo non è più in gradio di gestirli.

Per effettuare un controllo con badblocks e’ preferibile lavorare sui dischi usando una LiveCD da cui eseguiremo:

# badblocks -b dimensione_blocco /dev/sdaX

dove /dev/sdaX è la partizione da controllare. Il parametro dimensione_blocco è la dimensione del blocco usata dal filesytem espresso in byte. Di solito è 4096 (ovvero 4KB), per controllare potete usare:

# disktype /dev/sda

** Per le ulteriori opzioni di badblocks si rimanda all’amichevole pagina di manuale, ma attenzione: l’opzione -w distruggerà tutti i dati sulla vostra partizione.
Non usatela se non volete che ciò accada.

* Leggi anche ( “ estraiamo i nostri dati ” )

Sfdisk salvare le partizioni

Salvare la tabella della partizioni

Anche se l’uso di TestDisk ci aiuta a ripristinare eventuali partizioni perse, ritrovarsi con una tabella della partizioni scombinata puo’ richiedere  parecchio tempo per essere sistemata. Sarebbe molto meglio (come gia suggerito nei precedente articolo ( “testdisk e le partizioni”  ) averne gia salvata una in ordine…, in questi casi e’ una buona idea usare sfdisk ogni volta che installate o rimuovete una distro, o comunque ogni qual volta facciate delle modifiche alle partizioni.

Sfdisk e’ una piccola utility da riga di comando, gia’ inclusa in tutte le recenti distro Linux, in grado di fare il backup ed il ripristino delle tabelle delle partizioni, oltre a poterle modificare a piacimento/necessita’.

Ad esempio il comando: sudo sfdisk -d /dev/sda > sda_tabella.txt

effettuera’ una copia di sicurezza della tabella delle partizioni del disco sda all’interno del file di testo che dovrete tenere in un posto ben al sicuro.

Al contrario il comando : sudo sfdisk /dev/sda < sda_tabella.txt

leggera’ il file di testo e ripristinera’ la tabella dele partizioni all’interno dell’MBR di “sda” . Nel caso in cui abbiate un sistema di gestione dischi in RAID, potete comunque fare il mirror di una tabella delle partizioni da un disco all’altro usando

sudo sfdisk -d /dev/sda | /dev/sdb