Amministratore Linux: backup e ripristino

Prima di esplorare i metodi specifici di CentOS per la distribuzione di un piano di backup standard, esaminiamo prima le considerazioni tipiche per una policy di backup di livello standard. La prima cosa a cui vogliamo abituarci è il file3-2-1 backup rule.

3-2-1 Strategia di backup

In tutto il settore, sentirai spesso il termine modello di backup 3-2-1. Questo è un ottimo approccio da seguire quando si implementa un piano di backup. 3-2-1 è definito come segue:3copie di dati; per esempio, potremmo avere la copia di lavoro; una copia inserita nel server CentOS progettato per la ridondanza utilizzando rsync; e i backup USB esterni ruotati vengono eseguiti dai dati sul server di backup.2diversi supporti di backup. In questo caso avremmo in realtà tre diversi supporti di backup: la copia di lavoro su un SSD di un laptop o una workstation, i dati del server CentOS su un array RADI6 ei backup offsite inseriti su unità USB.1copia dei dati fuori sede; stiamo ruotando le unità USB fuori sede ogni notte. Un altro approccio moderno potrebbe essere un provider di backup su cloud.

Ripristino del sistema

Un piano di ripristino bare metal è semplicemente un piano elaborato da un amministratore CentOS per mettere in linea i sistemi vitali con tutti i dati intatti. Supponendo il 100% di guasti ai sistemi e la perdita di tutto l'hardware del sistema precedente, un amministratore deve avere un piano per ottenere tempi di attività con dati utente intatti che costano tempi di inattività minimi. Il kernel monolitico utilizzato in Linux rende effettivamente i ripristini bare metal utilizzando immagini di sistema molto più semplici di Windows. Dove Windows utilizza un'architettura micro-kernel.

Un ripristino completo dei dati e un ripristino bare metal vengono solitamente eseguiti tramite una combinazione di metodi, tra cui immagini disco di produzione configurate di lavoro di server operativi chiave, backup ridondanti dei dati utente che rispettano la regola 3-2-1. Anche alcuni file sensibili che possono essere archiviati in una cassaforte sicura e ignifuga con accesso limitato al personale dell'azienda di fiducia.

Un ripristino bare metal multifase e un piano di ripristino dei dati utilizzando strumenti CentOS nativi può consistere in:

  • dd per creare e ripristinare le immagini disco di produzione dei server configurati

  • rsync per eseguire backup incrementali di tutti i dati utente

  • tar & gzip per archiviare backup crittografati di file con password e note degli amministratori. Di solito, questo può essere inserito su un'unità USB, crittografato e bloccato in una cassaforte a cui accede un Senior Manager. Inoltre, questo garantisce che qualcun altro conoscerà le credenziali di sicurezza vitali se l'attuale amministratore vince la lotteria e scompare su un'isola soleggiata da qualche parte.

Se un sistema si arresta in modo anomalo a causa di un errore hardware o di un disastro, di seguito saranno riportate le diverse fasi delle operazioni di ripristino:

  • Crea un server funzionante con un'immagine bare metal configurata

  • Ripristina i dati sul server funzionante dai backup

  • Avere accesso fisico alle credenziali necessarie per eseguire le prime due operazioni

Usa rsync per i backup a livello di file

rsync è una grande utility per sincronizzare directory di file localmente o su un altro server. rsync è stato utilizzato per anni dagli amministratori di sistema, quindi è molto raffinato allo scopo di eseguire il backup dei dati. Secondo l'autore, una delle migliori caratteristiche di sincronizzazione è la sua capacità di essere scriptato dalla riga di comando.

In questo tutorial, discuteremo di rsync in vari modi:

  • Esplora e parla di alcune opzioni comuni
  • Crea backup locali
  • Crea backup remoti su SSH
  • Ripristina backup locali

rsyncprende il nome dal suo scopo: Remote Sync ed è potente e flessibile nell'uso.

Di seguito è riportato un backup remoto rsync di base su ssh -

MiNi:~ rdc$ rsync -aAvz --progress ./Desktop/ImportantStuff/ 
[email protected]:home/rdc/ Documents/RemoteStuff/
[email protected]'s password:
sending incremental file list
   6,148 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=23/25)
2017-02-14 16_26_47-002 - Veeam_Architecture001.png
   33,144 100%   31.61MB/s    0:00:00 (xfr#2, to-chk=22/25)
A Guide to the WordPress REST API | Toptal.pdf
   892,406 100%   25.03MB/s    0:00:00 (xfr#3, to-chk=21/25)
Rick Cardon Technologies, LLC..webloc
   77 100%    2.21kB/s    0:00:00 (xfr#4, to-chk=20/25)
backbox-4.5.1-i386.iso
   43,188,224   1%    4.26MB/s    0:08:29
sent 2,318,683,608 bytes  received 446 bytes  7,302,941.90 bytes/sec
total size is 2,327,091,863  speedup is 1.00
MiNi:~ rdc$

La seguente sincronizzazione ha inviato quasi 2,3 GB di dati attraverso la nostra LAN. La bellezza di rsync è che funziona in modo incrementale a livello di blocco, file per file. Ciò significa che, se cambiamo solo due caratteri in un file di testo da 1 MB, solo uno o due blocchi verranno trasferiti attraverso la lan alla sincronizzazione successiva!

Inoltre, la funzione incrementale può essere disabilitata a favore di una maggiore larghezza di banda di rete utilizzata per un minore utilizzo della CPU. Ciò potrebbe rivelarsi consigliabile se si copiano costantemente diversi file di database da 10 MB ogni 10 minuti su una Backup-Lan dedicata da 1 GB. Il ragionamento è: questi cambieranno sempre e trasmetteranno in modo incrementale ogni 10 minuti e potrebbero gravare sul carico della CPU remota. Poiché il carico di trasferimento totale non supererà i 5 minuti, potremmo semplicemente sincronizzare i file del database nella loro interezza.

Di seguito sono riportate le opzioni più comuni con rsync :

rsync syntax:
rsync [options] [local path] [[remote host:remote path] or [target path

Interruttore Azione
-un Modalità archivio e presuppone -r, -p, -t, -g, -l
-d Sincronizza solo l'albero delle directory, nessun file
-r Ricorsivo in directory
-l Copia collegamenti simbolici come collegamenti simbolici
-p Conserva le autorizzazioni
-g Conserva il gruppo
-v Output dettagliato
-z Comprimi su collegamento di rete
-X Conserva gli attributi estesi
-UN Conserva gli ACL
-t Conserva i timestamp
-W Trasferisci l'intero file, non i blocchi incrementali
-u Non sovrascrivere i file sulla destinazione
--progresso Mostra l'avanzamento del trasferimento
--Elimina Elimina i file più vecchi sulla destinazione
--max-size = XXX Dimensione massima del file da sincronizzare

Quando usare rsync

La mia preferenza personale per rsync è quando eseguo il backup dei file da un host di origine a un host di destinazione. Ad esempio, tutte le home directory per il ripristino dei dati o anche fuori sede e nel cloud per il ripristino di emergenza.

Backup locale con rsync

Abbiamo già visto come trasferire file da un host all'altro. Lo stesso metodo può essere utilizzato per sincronizzare directory e file localmente.

Facciamo un backup incrementale manuale di / etc / nella directory del nostro utente root.

Innanzitutto, dobbiamo creare una directory fuori ~ / root per il backup sincronizzato -

[[email protected] rdc]# mkdir /root/etc_baks

Quindi, assicurati che ci sia abbastanza spazio libero su disco.

[[email protected] rdc]# du -h --summarize /etc/ 
49M    /etc/
 
[[email protected] rdc]# df -h 
Filesystem           Size     Used     Avail    Use%     Mounted on 
/dev/mapper/cl-root   43G      15G        28G    35%         /

Siamo bravi a sincronizzare la nostra intera directory / etc / -

rsync -aAvr /etc/ /root/etc_baks/

La nostra directory / etc / sincronizzata -

[[email protected] etc_baks]# ls -l ./
total 1436
drwxr-xr-x.   3 root root      101 Feb  1 19:40 abrt
-rw-r--r--.   1 root root       16 Feb  1 19:51 adjtime
-rw-r--r--.   1 root root     1518 Jun  7  2013 aliases
-rw-r--r--.   1 root root    12288 Feb 27 19:06 aliases.db
drwxr-xr-x.   2 root root       51 Feb  1 19:41 alsa
drwxr-xr-x.   2 root root     4096 Feb 27 17:11 alternatives
-rw-------.   1 root root      541 Mar 31  2016 anacrontab
-rw-r--r--.   1 root root       55 Nov  4 12:29 asound.conf
-rw-r--r--.   1 root root        1 Nov  5 14:16 at.deny
drwxr-xr-x.   2 root root       32 Feb  1 19:40 at-spi2
--{ condensed output }--

Ora facciamo un rsync incrementale -

[[email protected] etc_baks]# rsync -aAvr --progress  /etc/ /root/etc_baks/
sending incremental file list

test_incremental.txt 
   0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1145/1282)
   
sent 204620 bytes  received 2321 bytes  413882.00 bytes/sec
total size is 80245040  speedup is 387.77

[[email protected] etc_baks]#

È stato copiato solo il nostro file test_incremental.txt .

Backup differenziali remoti con rsync

Facciamo il nostro backup completo iniziale rsync su un server con un piano di backup distribuito. Questo esempio esegue effettivamente il backup di una cartella su una workstation Mac OS X su un server CentOS. Un altro grande aspetto di rsync è che può essere utilizzato su qualsiasi piattaforma su cui rsync è stato portato.

MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff
[email protected]'s password:
sending incremental file list
./
A Guide to the WordPress REST API | Toptal.pdf
Rick Cardon Tech LLC.webloc
VeeamDiagram.png
backbox-4.5.1-i386.iso
dhcp_admin_script_update.py
DDWRT/
DDWRT/.DS_Store
DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
DDWRT/ddwrt_mod_notes.docx
DDWRT/factory-to-ddwrt.bin
open_ldap_config_notes/
open_ldap_config_notes/ldap_directory_a.png
open_ldap_config_notes/open_ldap_notes.txt
perl_scripts/
perl_scripts/mysnmp.pl
php_scripts/
php_scripts/chunked.php
php_scripts/gettingURL.php
sent 2,318,281,023 bytes  received 336 bytes  9,720,257.27 bytes/sec
total size is 2,326,636,892  speedup is 1.00
MiNi:~ rdc$

Ora è stato eseguito il backup di una cartella da una workstation su un server che esegue un volume RAID6 con un supporto di ripristino di emergenza ruotato archiviato fuori sede. L'uso di rsync ci ha fornito un backup standard 3-2-1 con un solo server con un costoso array di dischi ridondante e backup differenziali ruotati.

Ora facciamo un altro backup della stessa cartella usando rsync dopo che è stato aggiunto un singolo nuovo file chiamato test_file.txt .

MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff 
[email protected]'s password:  
sending incremental file list 
 ./ 
test_file.txt

sent 814 bytes  received 61 bytes  134.62 bytes/sec
total size is 2,326,636,910  speedup is 2,659,013.61
MiNi:~ rdc$

Come puoi vedere, solo il nuovo file è stato consegnato al server tramite rsync . Il confronto differenziale è stato effettuato file per file.

Alcune cose da notare sono: Questo copia solo il nuovo file: test_file.txt, poiché era l'unico file con modifiche. rsync usa ssh. Non abbiamo mai avuto bisogno di usare il nostro account di root su nessuna macchina.

Semplice, potente ed efficace, rsync è ottimo per il backup di intere cartelle e strutture di directory. Tuttavia, rsync da solo non automatizza il processo. È qui che dobbiamo scavare nella nostra cassetta degli attrezzi e trovare lo strumento migliore, piccolo e semplice per il lavoro.

Per automatizzare i backup rsync con cronjobs , è essenziale che gli utenti SSH siano configurati utilizzando chiavi SSH per l'autenticazione. Questo combinato con cronjobs consente a rsync di essere eseguito automaticamente a intervalli di tempo.

Usa DD per immagini di ripristino bare metal blocco per blocco

DD è un'utilità Linux che esiste dagli albori del kernel Linux che incontra le utilità GNU.

dd in termini più semplici copia un'immagine di un'area del disco selezionata. Fornisce quindi la possibilità di copiare i blocchi selezionati di un disco fisico. Quindi, a meno che tu non abbia backup, una volta che dd scrive su un disco, tutti i blocchi vengono sostituiti. La perdita di dati precedenti supera le capacità di ripristino anche per il ripristino dei dati di livello professionale ad alto prezzo.

L'intero processo per creare un'immagine di sistema avviabile con dd è il seguente:

  • Avvia dal server CentOS con una distribuzione Linux avviabile
  • Trova la designazione del disco di avvio di cui eseguire l'immagine
  • Decidi la posizione in cui archiviare l'immagine di ripristino
  • Trova la dimensione del blocco utilizzata sul tuo disco
  • Avvia l'operazione dd image

In questo tutorial, per motivi di tempo e semplicità, creeremo un'immagine ISO del record di avvio principale da una macchina virtuale CentOS. Memorizzeremo quindi questa immagine fuori sede. Nel caso in cui il nostro MBR venga danneggiato e debba essere ripristinato, lo stesso processo può essere applicato a un intero disco o partizione di avvio. Tuttavia, il tempo e lo spazio su disco necessari sono davvero un po 'esagerati per questo tutorial.

Si consiglia agli amministratori di CentOS di acquisire familiarità con il ripristino di un disco / partizione completamente avviabile in un ambiente di test ed eseguire un ripristino bare metal. Ciò eliminerà molta pressione quando alla fine sarà necessario completare la pratica in una situazione di vita reale con i responsabili e alcune dozzine di utenti finali che contano i tempi di inattività. In tal caso, 10 minuti per capire le cose possono sembrare un'eternità e far sudare.

Note- Quando si utilizza dd assicurarsi di NON confondere i volumi di origine e di destinazione. È possibile distruggere dati e server avviabili copiando la posizione di backup su un'unità di avvio. O forse peggio distruggere i dati per sempre copiandoli a un livello molto basso con DD.

Di seguito sono riportati i parametri e le opzioni della riga di comando comuni per dd -

Interruttore Azione
se = Nel file o nella sorgente da copiare
di = File out o la copia del file in
bs Imposta la dimensione del blocco di input e output
oss Imposta la dimensione del blocco del file di output
IBS Imposta la dimensione del blocco del file di input
contare Imposta il numero di blocchi da copiare
conv Opzioni extra da aggiungere per l'imaging
Nessun errore Non interrompere l'elaborazione di un errore
sincronizzazione Blocchi di ingresso pastiglie non montate in caso di errore o disallineamento

Note on block size- La dimensione del blocco predefinita per dd è 512 byte. Questa era la dimensione del blocco standard dei dischi rigidi a densità inferiore. Gli odierni HDD ad alta densità sono aumentati fino a 4096 byte (4kB) di dimensioni di blocco per consentire dischi che vanno da 1 TB e più grandi. Pertanto, dovremo controllare la dimensione del blocco del disco prima di utilizzare dd con dischi rigidi più recenti e di maggiore capacità.

Per questo tutorial, invece di lavorare su un server di produzione con dd , utilizzeremo un'installazione CentOS in esecuzione in VMWare. Configureremo anche VMWare per avviare un'immagine ISO Linux avviabile invece di lavorare con una chiavetta USB avviabile.

Innanzitutto, dovremo scaricare l'immagine CentOS intitolata: CentOS Gnome ISO . Si tratta di quasi 3 GB e si consiglia di conservarne sempre una copia per la creazione di chiavette USB avviabili e l'avvio in installazioni di server virtuali per la risoluzione dei problemi e le immagini bare metal.

Altre distribuzioni Linux avviabili funzioneranno altrettanto bene. Linux Mint può essere utilizzato per ISO avviabili in quanto ha un ottimo supporto hardware e strumenti del disco GUI lucidati per la manutenzione.

L'immagine avviabile di CentOS GNOME Live può essere scaricata da: http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-LiveGNOME.iso

Configuriamo la nostra installazione VMWare Workstation per l'avvio dalla nostra immagine avviabile di Linux. I passaggi sono per VMWare su OS X. Tuttavia, sono simili su VMWare Workstation su Linux, Windows e persino Virtual Box.

Note- L'utilizzo di una soluzione desktop virtuale come Virtual Box o VMWare Workstation è un ottimo modo per impostare scenari di laboratorio per l'apprendimento delle attività di amministrazione di CentOS. Offre la possibilità di installare diverse installazioni CentOS, praticamente nessuna configurazione hardware che consente alla persona di concentrarsi sull'amministrazione e persino di salvare lo stato del server prima di apportare modifiche.

Per prima cosa configuriamo un cd-rom virtuale e alleghiamo la nostra immagine ISO per l'avvio invece dell'installazione del server CentOS virtuale -

Ora, imposta il disco di avvio -

Ora, una volta avviata, la nostra macchina virtuale si avvierà dall'immagine ISO avviabile di CentOS e consentirà l'accesso ai file sul server Virtual CentOS precedentemente configurato.

Controlliamo i nostri dischi per vedere da dove vogliamo copiare l'MBR (l'output condensato è il seguente).

MiNt ~ # fdisk -l
Disk /dev/sda: 60 GiB, 21474836480 bytes, 41943040 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 /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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

Abbiamo individuato entrambi i nostri dischi fisici: sda e sdb . Ciascuno ha una dimensione del blocco di 512 byte. Quindi, ora eseguiremo il comando dd per copiare i primi 512 byte per il nostro MBR su SDA1.

Il modo migliore per farlo è:

[[email protected] rdc]# dd if=/dev/sda bs=512 count=1  | gzip -c >
/mnt/sdb/images/mbr.iso.gz 
1+0 records in 
1+0 records out 
512 bytes copied, 0.000171388 s, 3.0 MB/s

[[email protected] rdc]# ls /mnt/sdb/ 
   mbr-iso.gz
   
[[email protected] rdc]#

Proprio così, abbiamo un'immagine completa del nostro record di avvio principale. Se abbiamo abbastanza spazio per visualizzare l'unità di avvio, potremmo facilmente creare un'immagine di avvio completa del sistema -

dd if=/dev/INPUT/DEVICE-NAME-HERE conv=sync,noerror bs=4K | gzip -c >
/mnt/sdb/boot-server-centos-image.iso.gz

Il conv = sync viene usato quando byte devono essere allineate per un supporto fisico. In questo caso, dd potrebbe ricevere un errore se gli allineamenti 4K esatti non vengono letti (diciamo ... un file che è solo 3K ma richiede almeno un singolo blocco 4K su disco. Oppure, c'è semplicemente un errore di lettura e il file non può essere letto da dd.). Pertanto, dd con conv = sync, noerror riempirà il 3K con dati banali ma utili al supporto fisico negli allineamenti di blocchi 4K. Pur non presentando un errore che potrebbe terminare un'operazione di grandi dimensioni.

Quando lavoriamo con i dati dai dischi, vogliamo sempre includere: conv = sync, noerror parameter.

Questo è semplicemente perché i dischi non sono flussi come i dati TCP. Sono costituiti da blocchi allineati a una certa dimensione. Ad esempio, se abbiamo blocchi da 512 byte, un file di soli 300 byte necessita ancora di 512 byte di spazio su disco (possibilmente 2 blocchi per informazioni sull'inode come permessi e altre informazioni sul file system).

Usa gzip e tar per l'archiviazione sicura

gzip e tar sono due utilità a cui un amministratore di CentOS deve abituarsi. Sono usati per molto di più che per decomprimere semplicemente gli archivi.

Utilizzo di Gnu Tar in CentOS Linux

Tar è un'utilità di archiviazione simile a winrar su Windows. Il suo nome Tape Archive, abbreviato in tar, riassume praticamente l'utilità. tar prenderà i file e li metterà in un archivio per comodità logica. Quindi, invece delle dozzine di file archiviati in / etc. potremmo semplicemente "tararli" in un archivio per comodità di backup e archiviazione.

tar è stato lo standard per la memorizzazione dei file archiviati su Unix e Linux per molti anni. Quindi, l'uso di tar insieme a gzip o bzip è considerato una best practice per gli archivi su ogni sistema.

Di seguito è riportato un elenco di opzioni e opzioni della riga di comando comuni utilizzate con tar -

Interruttore Azione
-c Crea un nuovo archivio .tar
-C Estrae in una directory diversa
-j Utilizza la compressione bzip2
-z Utilizza la compressione gzip
-v Verbose mostra lo stato di avanzamento dell'archiviazione
-t Elenca i contenuti dell'archivio
-f Nome del file dell'archivio
-X Estrae l'archivio tar

Di seguito è riportata la sintassi di base per la creazione di un archivio tar .

tar -cvf [tar archive name]

Note on Compression mechanisms with tar- Si consiglia di attenersi a uno dei due schemi di compressione comuni quando si usa tar: gzip e bzip2. I file gzip consumano meno risorse della CPU ma di solito sono di dimensioni maggiori. Sebbene bzip2 richieda più tempo per la compressione, utilizzano più risorse della CPU; ma risulterà in una dimensione del file finale più piccola.

Quando si utilizza la compressione dei file, vorremo sempre utilizzare estensioni di file standard per consentire a tutti, compresi noi stessi, di sapere (anziché indovinare per tentativi ed errori) quale schema di compressione è necessario per estrarre gli archivi.

bzip2 .tbz
bzip2 .tar.tbz
bzip2 .tb2
gzip .tar.gz
gzip .tgz

Quando è necessario estrarre gli archivi su una macchina Windows o per l'uso su Windows, si consiglia di utilizzare .tar.tbz o .tar.gz poiché la maggior parte delle estensioni a tre caratteri confondono Windows e solo gli amministratori di Windows (tuttavia, questo è a volte il risultato desiderato)

Creiamo un archivio tar compresso con gzip dai nostri backup remoti copiati dalla workstation Mac -

[[email protected] Documents]$ tar -cvz -f RemoteStuff.tgz ./RemoteStuff/ 
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[[email protected] Documents]$ ls -ld RemoteStuff.tgz
-rw-rw-r--. 1 rdc rdc 2317140451 Mar 12 06:10 RemoteStuff.tgz

Note- Invece di aggiungere tutti i file direttamente all'archivio, abbiamo archiviato l'intera cartella RemoteStuff . Questo è il metodo più semplice. Semplicemente perché una volta estratto, l'intera directory RemoteStuff viene estratta con tutti i file all'interno della directory di lavoro corrente come ./currentWorkingDirectory/RemoteStuff/

Ora estraiamo l'archivio all'interno della directory / root / home.

[[email protected] ~]# tar -zxvf RemoteStuff.tgz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[[email protected] ~]# ping www.google.com

Come visto sopra, tutti i file sono stati semplicemente estratti nella directory contenente all'interno della nostra directory di lavoro corrente.

[[email protected] ~]# ls -l 
total 2262872 
-rw-------.   1   root   root       1752   Feb   1   19:52   anaconda-ks.cfg 
drwxr-xr-x. 137   root   root       8192   Mar   9   04:42   etc_baks 
-rw-r--r--.   1   root   root       1800   Feb   2   03:14   initial-setup-ks.cfg 
drwxr-xr-x.   6   rdc    rdc        4096   Mar  10   22:20   RemoteStuff 
-rw-r--r--.   1   root   root 2317140451   Mar  12   07:12   RemoteStuff.tgz 
-rw-r--r--.   1   root   root       9446   Feb  25   05:09   ssl.conf [[email protected] ~]#

Usa gzip per comprimere i backup di file

Come notato in precedenza, possiamo usare bzip2 o gzip da tar con l'estensione -j o -zopzioni della riga di comando. Possiamo anche usare gzip per comprimere singoli file. Tuttavia, l'uso di bzip o gzip da solo non offre tante funzionalità come se combinato con tar .

Quando si utilizza gzip , l'azione predefinita è rimuovere i file originali, sostituendoli con una versione compressa aggiungendo l'estensione .gz.

Alcune opzioni della riga di comando comuni per gzip sono:

Interruttore Azione
-c Conserva i file dopo averli inseriti nell'archivio
-l Ottieni statistiche per l'archivio compresso
-r Recursively compresses files in the directories
-1 thru 9 Specifies the compression level on a scale of 1 thru 9

gzip more or less works on a file-by-file basis and not on an archive basis like some Windows O/S zip utilities. The main reason for this is that tar already provides advanced archiving features. gzip is designed to provide only a compression mechanism.

Hence, when thinking of gzip, think of a single file. When thinking of multiple files, think of tar archives. Let's now explore this with our previous tar archive.

Note − Seasoned Linux professionals will often refer to a tarred archive as a tarball.

Let's make another tar archive from our rsync backup.

[[email protected] Documents]# tar -cvf RemoteStuff.tar ./RemoteStuff/
[[email protected] Documents]# ls
RemoteStuff.tar RemoteStuff/

For demonstration purposes, let's gzip the newly created tarball, and tell gzip to keep the old file. By default, without the -c option, gzip will replace the entire tar archive with a .gz file.

[[email protected] Documents]# gzip -c RemoteStuff.tar > RemoteStuff.tar.gz
[[email protected] Documents]# ls
RemoteStuff  RemoteStuff.tar  RemoteStuff.tar.gz
We now have our original directory, our tarred directory and finally our gziped tarball.

Let's try to test the -l switch with gzip.

[[email protected] Documents]# gzip -l RemoteStuff.tar.gz  
     compressed        uncompressed        ratio uncompressed_name 
     2317140467          2326661120        0.4% RemoteStuff.tar
     
[[email protected] Documents]#

To demonstrate how gzip differs from Windows Zip Utilities, let's run gzip on a folder of text files.

[[email protected] Documents]# ls text_files/
 file1.txt  file2.txt  file3.txt  file4.txt  file5.txt
[[email protected] Documents]#

Now let's use the -r option to recursively compress all the text files in the directory.

[[email protected] Documents]# gzip -9 -r text_files/

[[email protected] Documents]# ls ./text_files/
file1.txt.gz  file2.txt.gz  file3.txt.gz  file4.txt.gz  file5.txt.gz
 
[[email protected] Documents]#

See? Not what some may have anticipated. All the original text files were removed and each was compressed individually. Because of this behavior, it is best to think of gzip alone when needing to work in single files.

Working with tarballs, let's extract our rsynced tarball into a new directory.

[[email protected] Documents]# tar -C /tmp -zxvf RemoteStuff.tar.gz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php

As seen above, we extracted and decompressed our tarball into the /tmp directory.

[[email protected] Documents]# ls /tmp 
hsperfdata_root
RemoteStuff

Encrypt TarBall Archives

Encrypting tarball archives for storing secure documents that may need to be accessed by other employees of the organization, in case of disaster recovery, can be a tricky concept. There are basically three ways to do this: either use GnuPG, or use openssl, or use a third part utility.

GnuPG is primarily designed for asymmetric encryption and has an identity-association in mind rather than a passphrase. True, it can be used with symmetrical encryption, but this is not the main strength of GnuPG. Thus, I would discount GnuPG for storing archives with physical security when more people than the original person may need access (like maybe a corporate manager who wants to protect against an Administrator holding all the keys to the kingdom as leverage).

Openssl like GnuPG can do what we want and ships with CentOS. But again, is not specifically designed to do what we want and encryption has been questioned in the security community.

Our choice is a utility called 7zip. 7zip is a compression utility like gzip but with many more features. Like Gnu Gzip, 7zip and its standards are in the open-source community. We just need to install 7zip from our EHEL Repository (the next chapter will cover installing the Extended Enterprise Repositories in detail).

Install 7zip on Centos

7zip is a simple install once our EHEL repositories have been loaded and configured in CentOS.

[[email protected] Documents]# yum -y install p7zip.x86_64 p7zip-plugins.x86_64
Loaded plugins: fastestmirror, langpacks
base
| 3.6 kB  00:00:00
epel/x86_64/metalink
|  13 kB  00:00:00
epel
| 4.3 kB  00:00:00
extras
| 3.4 kB  00:00:00
updates
| 3.4 kB  00:00:00
(1/2): epel/x86_64/updateinfo
| 756 kB  00:00:04      
(2/2):
epel/x86_64/primary_db
| 4.6 MB  00:00:18
Loading mirror speeds from cached hostfile
--> Running transaction check
---> Package p7zip.x86_64 0:16.02-2.el7 will be installed
---> Package p7zip-plugins.x86_64 0:16.02-2.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved

Simple as that, 7zip is installed and ready be used with 256-bit AES encryption for our tarball archives.

Now let's use 7z to encrypt our gzipped archive with a password. The syntax for doing so is pretty simple −

7z a -p <output filename><input filename>

Where, a: add to archive, and -p: encrypt and prompt for passphrase

[[email protected] Documents]# 7z a -p RemoteStuff.tgz.7z RemoteStuff.tar.gz

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R)
Core(TM) i5-4278U CPU @ 2.60GHz (40651),ASM,AES-NI)
Scanning the drive:
1 file, 2317140467 bytes (2210 MiB)

Creating archive: RemoteStuff.tgz.7z

Items to compress: 1

Enter password (will not be echoed):
Verify password (will not be echoed) :

Files read from disk: 1
Archive size: 2280453410 bytes (2175 MiB)
Everything is Ok
[[email protected] Documents]# ls
RemoteStuff  RemoteStuff.tar  RemoteStuff.tar.gz  RemoteStuff.tgz.7z  slapD
text_files

[[email protected] Documents]#

Now, we have our .7z archive that encrypts the gzipped tarball with 256-bit AES.

Note − 7zip uses AES 256-bit encryption with an SHA-256 hash of the password and counter, repeated up to 512K times for key derivation. This should be secure enough if a complex key is used.

The process of encrypting and recompressing the archive further can take some time with larger archives.

7zip is an advanced offering with more features than gzip or bzip2. However, it is not as standard with CentOS or amongst the Linux world. Thus, the other utilities should be used often as possible.