GNU/Linux >> Linux Esercitazione >  >> Linux

Come creare snapshot del filesystem utilizzando Snapper Command su Linux

Snapper è uno strumento da riga di comando Linux per creare e gestire istantanee dei tuoi filesystem.

Usando il comando snapper, puoi creare snapshot di sola lettura. Puoi utilizzare questi snapshot per ripristinare file specifici o tutti i file durante qualsiasi situazione di emergenza.

Puoi anche usarlo per confrontare più snapshot e tornare a uno specifico vecchio snapshot.

Snapper è supportato solo su btrfs (file system B-tree copy-on-write), filesystem ext4 e thin- volumi logici basati su LVM forniti.

Quando uno snapshot viene acquisito utilizzando il comando snapper, risiederà nello stesso filesystem, quindi dovrebbe esserci spazio libero sufficiente e potrebbe essere necessaria una pulizia regolare di FS.

Se sei interessato a utilizzare uno snapshot basato su rsync, dovresti anche controllare l'utilità rsnapshot di cui abbiamo discusso in precedenza.

Installa l'utility Snapper

Puoi scaricare il binario snapper per varie distribuzioni e installarlo, oppure scaricare il codice sorgente e compilarlo tu stesso.

Ad esempio, puoi scaricare gli snapper rpm dal repository SUSE SLES11 SP2.

# rpm -ivh snapper-0.1.6-2.1.x86_64.rpm

Di seguito sono riportate le dipendenze per il pacchetto snapper. Quando utilizzi yum o altri strumenti di gestione dei pacchetti, tutte le dipendenze verranno installate automaticamente.

  • libsnapper-devel-0.1.6-2.1.x86_64.rpm
  • pam_snapper-0.1.6-2.1.x86_64.rpm
  • snapper-debuginfo-0.1.6-2.1.x86_64.rpm
  • snapper-debugsource-0.1.6-2.1.x86_64.rpm

Crea filesystem btrfs

Poiché btrfs è un filesystem supportato da SLES11 SP2, puoi usare btrfs per creare il tuo volume logico o usare i comandi btrfs-convert per convertire il tuo file system ext3 esistente in btrfs.

Esegui i seguenti comandi per creare un nuovo filesystem btrfs. Se non hai il programma btrfs installato, usa zypper install btrfsprogs per installarlo.

# lvcreate -L 8G -n snapvol vglocal
Logical volume "snapvol" created

# mkfs.btrfs /dev/vglocal/snapvol

# mount /dev/vglocal/snapvol /snapmount

Crea LVM con thin provisioning

Se desideri creare un LVM con thin provisioning, utilizza il comando lvcreate per eseguire le seguenti operazioni.

# lvcreate --thin vglocal/vgthinpool --size 20G
  Rounding up size to full physical extent 32.00 MiB
  Logical volume "vgthinpool" create

# lvcreate --thin vglocal/vgthinpool --virtualsize 8G --name lvthin_snap
  Logical volume "lvthin_snap" created

# lvs
  LV          VG        Attr      LSize   Pool       Origin Data%  Move Log Copy%  Convert
  opt         vglocal -wi-ao---   2.73g
  tmp         vglocal -wi-ao---   2.73g
  usr_local   vglocal -wi-ao---   2.73g
  var         vglocal -wi-ao---   2.73g
  lvthin_snap vglocal  Vwi-a-tz-   8.00g vgthinpool          0.00
  vgthinpool  vglocal  twi-a-tz-  20.00g                     0.00

# mkfs.ext3 /dev/vglocal/lvthin_snap

# mkdir /snapmount

# mount /dev/vglocal/lvthin_snap /snapmount

Crea file di configurazione Snapper

Per creare il file di configurazione utilizzando il comando snapper, utilizzare il comando "snapper -c" come mostrato di seguito.

Sintassi su btrfs:

snapper –c  create-config

Su btrfs, dovrai semplicemente specificare il nome del file di configurazione e il punto di montaggio come mostrato di seguito.

snapper -c snapconfig create-config /snapmount

Sintassi su LVM con thin provisioning:

snapper –c  create-config --fstype="lvm(xfs)"

Su LVM con thin provisioning, oltre a specificare il nome del file di configurazione e il punto di montaggio, dovresti anche specificare il tipo di filesystem usando –fstype come mostrato di seguito:

snapper -c snapconfig1 create-config --fstype="lvm(xfs)" /snapmount1

Visualizza ed elimina i file di configurazione Snapper

Dopo aver creato i file di configurazione, vedrai la directory .snapshots creata nella directory /snapmount.

Noterai anche che il file di configurazione viene creato in /etc/snapper/configs/snapconfig. Le informazioni su tutto il sottovolume configurato per lo snapshot verranno archiviate in questo file.

Il file di registro utilizzato per la risoluzione dei problemi si trova in /var/log/snapper.log

Per visualizzare tutti i file di configurazione, eseguire il seguente comando snapper:

# snapper list-configs
Config      	| 	Subvolume
------------+------------
snapconfig  	| 	/snapmount         ? btrfs filesystem
snapconfig1 	| 	/snapmount1       ? Thin provisioned filesystem

Per eliminare un file di configurazione, utilizzare la seguente sintassi:

snapper –c  delete-config

Ad esempio, il comando seguente elimina il file di configurazione snapconfig nella directory /etc/snapper/configs.

# snapper -c snapconfig delete-config

Crea uno snapshot utilizzando Snapper

Per creare un'istantanea del filesystem, usa la seguente sintassi del comando snapper:

snapper –config  create –description "description of the snapshot"

Ad esempio, quanto segue acquisirà una nuova istantanea.

# snapper --config snapconfig create --description "Snapshot taken on 02-24-0354"

Dopo aver scattato un'istantanea, visualizza le informazioni sull'istantanea come mostrato di seguito:

# snapper --config snapconfig list
Type   | # | Pre # | Date                     | User | Cleanup | Description                  | Userdata
-------+---+-------+--------------------------+------+---------+------------------------------+---------
single | 0 |       |                          | root |         | current                      |
single | 1 |       | Mon Feb 24 15:57:00 2014 | root |         | Snapshot taken on 02-24-0354 |

Scatta la seconda istantanea per il confronto

A scopo di test, ho annullato il file test1 nella directory /snapmount.

# cat /dev/null > testfile1

# ls -ltr
-rw-r--r-- 1 root root 11 Feb 24 11:28 testfile2
-rw-r--r-- 1 root root 43 Feb 24 11:28 testfile3
drwxr-x--- 1 root root  2 Feb 24 15:57 .snapshots
-rw-r--r-- 1 root root  0 Feb 24 16:25 testfile1

Dopo la modifica di cui sopra, facciamo un'altra istantanea.

# snapper --config snapconfig create --description "Snapshot taken on 02-24-0427"

Come vedi sotto, ora abbiamo due istantanee.

# snapper --config snapconfig list
Type   | # | Pre # | Date                     | User | Cleanup | Description                  | Userdata
-------+---+-------+--------------------------+------+---------+------------------------------+---------
single | 0 |       |                          | root |         | current                      |
single | 1 |       | Mon Feb 24 15:57:00 2014 | root |         | Snapshot taken on 02-24-0354 |
single | 2 |       | Mon Feb 24 16:27:48 2014 | root |         | Snapshot taken on 02-24-0427 |

Confronta la prima e la seconda istantanea

Ora confrontiamo entrambi gli snapshot.

Il comando seguente confronta lo snapshot#1 con lo snapshot#2.

# snapper -c snapconfig status 1..2
c.... /snapmount/testfile1

Nell'output:

  • "c" sull'output indica che il contenuto è stato modificato.
  • “+” indica che i file newl vengono aggiunti alla directory.
  • “-” indica che ci sono file che sono stati eliminati.

Scatta più istantanee e confronta l'output

Ho creato più istantanee di prova con pochi file aggiunti, pochi file rimossi e poche modifiche al contenuto.

# snapper --config snapconfig list
Type   | # | Pre # | Date                     | User | Cleanup | Description                  | Userdata
-------+---+-------+--------------------------+------+---------+------------------------------+---------
single | 0 |       |                          | root |         | current                      |
single | 1 |       | Mon Feb 24 15:57:00 2014 | root |         | Snapshot taken on 02-24-0354 |
single | 2 |       | Mon Feb 24 16:27:48 2014 | root |         | Snapshot taken on 02-24-0427 |
single | 3 |       | Mon Feb 24 16:37:53 2014 | root |         | Snapshot taken on 02-24-0437 |
single | 4 |       | Mon Feb 24 16:38:17 2014 | root |         | Snapshot taken on 02-24-0440 |

Il seguente output elenca i file che vengono aggiunti, modificati ed eliminati.

# snapper -c snapconfig status 4..1
-.... /snapmount/a
-.... /snapmount/b
-.... /snapmount/c
c.... /snapmount/testfile1
+.... /snapmount/testfile2

Visualizza la differenza tra le istantanee

Ora per visualizzare la differenza di contenuto specifica nel file tra snapshot#1 e snapshot#4, puoi utilizzare il comando seguente.

# snapper -c snapconfig diff 4..1 /snapmount/testfile1
--- /snapmount/.snapshots/4/snapshot/testfile1  2014-02-24 16:25:44.416490642 -0500
+++ /snapmount/.snapshots/1/snapshot/testfile1  2014-02-24 11:27:35.000000000 -0500
@@ -0,0 +1 @@
+This is a test file

L'output è nel formato tipico di un output di comando diff.

Ripristina un file specifico da un'istantanea

Una volta che hai visto le differenze tra le istantanee e sai quale file specifico desideri ripristinare, puoi ripristinarlo come spiegato qui.

Prima del ripristino, non abbiamo testfile2 in questo elenco.

# ls -ltr
-rw-r--r-- 1 root root 43 Feb 24 11:28 testfile3
-rw-r--r-- 1 root root  0 Feb 24 16:25 testfile1
drwxr-x--- 1 root root 10 Feb 24 16:45 .snapshots

Ad esempio, per ripristinare un singolo file dallo snapshot, ovvero /snapmount/testfile2 (il file che è stato eliminato) dallo snapshot#1, utilizzare il comando seguente:

# snapper -c snapconfig -v undochange 1..4 /snapmount/testfile2
create:1 modify:0 delete:0
creating /snapmount/testfile2

Dopo il ripristino, vediamo il file test2 nell'elenco.

# ls -ltr
-rw-r--r-- 1 root root 43 Feb 24 11:28 testfile3
-rw-r--r-- 1 root root  0 Feb 24 16:25 testfile1
drwxr-x--- 1 root root 10 Feb 24 16:45 .snapshots
-rw-r--r-- 1 root root 11 Feb 24 16:55 testfile2

Ripristina tutti i file da un'istantanea

Per ripristinare tutti i file dallo snapshot, procedi come segue:

Ora ripristiniamo tutti i file da uno snapshot particolare. Nota come questo sta eliminando alcuni file, creando un file e modificando un file.

# snapper -c snapconfig -v undochange 1..4
create:1 modify:1 delete:3
deleting /snapmount/c
deleting /snapmount/b
deleting /snapmount/a
modifying /snapmount/testfile1
creating /snapmount/testfile2

Linux
  1. Come creare un filesystem su una partizione Linux o un volume logico

  2. Come riavviare Linux utilizzando la riga di comando

  3. comando Linux ln

  4. Come uccidere un processo su Linux usando il comando?

  5. Come creare snapshot di volumi sottili LVM utilizzando il comando snapper

Come creare un alias in Linux

Come creare un file in Linux usando Terminal

Come eseguire il backup del filesystem Linux utilizzando il comando dump

Come creare un file in Ubuntu Linux usando comando e GUI

Come creare un gruppo in Linux – comando groupadd

Come creare una partizione usando il comando "separato".