openSUSE:Snapper Tutorial

Aller à : navigation, rechercher

Introduction

Snapper est un outil de gestion des instantanés (snapshots) du système de fichiers.

Cet article suppose que vous utilisez Snapper avec le système de fichiers Btrfs.

Lors d'une nouvelle installation d'openSUSE, la valeur par défaut est d'utiliser Btrfs à la racine, c'est-à-dire / et le système de fichiers XFS sur /home. Si vous sélectionnez l'option de ne pas séparer /home pendant l'installation d'openSUSE, la valeur par défaut est que tout, y compris /home, doit être sous Btrfs.

Si vous décidez d'utiliser Btrfs & Snapper (par défaut) lors d'une nouvelle installation openSUSE, Snapper sera automatiquement configuré pour vous. Cette configuration automatique de Snapper signifie que les snapshots seront faits automatiquement lorsque vous utilisez YaST2 et/ou zypper. Veuillez lire la section Logiciels requis ci-dessous pour connaître les mises en garde.

Vous pouvez convertir les systèmes de fichiers EXT3 & EXT4 en Btrfs pour profiter de Snapper. L'utilisation de Snapper sur le système de fichiers EXT4 est fortement découragée.

Détails importants

Le comportement par défaut quand Snapper est configuré pour fonctionner sur la racine, c'est-à-dire /, est d'exclure chaque sous-volume Btrfs. Ce comportement est identique à celui de SUSE Enterprise. Cela signifie que si vous avez le sous-volume /srv Snapper ne fera pas d'instantané de quoi que ce soit dans /srv à moins que vous ne le lui demandiez spécifiquement. Cela signifie également que si vous ajoutez un sous-volume à / à tout moment, il sera exclu du comportement instantané par défaut de Snapper.

Soyez toujours root (super utilisateur) lorsque vous utilisez Snapper ou YaST2, sauf indication contraire.

YaST2 est livré avec un module Snapper appelé yast2-snapper et peut être utilisé pour vérifier et manipuler les snapshots. Il n'a cependant pas la possibilité de changer les configurations de Snapper. Cela doit être fait dans le terminal.

La prise d'instantanés est automatiquement activée si la partition racine (/) est suffisamment grande (environ plus de 16 Go).

N'oubliez pas : si le disque est inférieur à 16 Go, toutes les fonctions de Snapper et les snapshots automatiques sont désactivés pour éviter une partition pleine. Les fonctions désactivées incluent la configuration automatique de la partition /. Voir https://bugzilla.opensuse.org/show_bug.cgi?id=1085378 pour plus de détails.

Aspects par défaut pour les disques > 16 GB et < 16 GB

  • Disque < 16 GB (par exemple, le disque de taille fixe VirtualBox VDI est de 8 Gb par défaut, qui est OK pour avoir une plate-forme de test pour SUSE avant son déploiement sur une machine réelle).
Disque > 16 GB Disque < 16 GB
1. Config /etc/snapper/configs/root (unique 0) est créé automatiquement. 1. pas de configuration créée automatiquement /etc/snapper/configs/root (unique 0). Doit être créé manuellement par la commande create-config / de snapper).
2. instantané (unique 1) pour la partition racine (/) est créé automatiquement avec le nom 'premier système de fichiers racine'. 2. Pas d'instantané créé automatiquement unique 1. Raison : 1. l'utilisateur peut le créer manuellement avec n'importe quel nom.
3. instantané (unique 2) 'Après installation', important=oui, est créé automatiquement. 3. Pas d'instantané créé automatiquement unique 2. Raison : 1.
4. Par défaut paramètre USE_SNAPPER=yes dans la configuration /etc/sysconfig/yast2. La création d'instantanés d'administration est activée. 4. Par défaut USE_SNAPPER=no paramètre dans la configuration /etc/sysconfig/yast2. La création d'instantanés d'administration est désactivée.
5 Par défaut TIMELINE_CREATE=no' dans /etc/snapper/configs/root. Cela signifie que la création de '" la ligne chronologiques des snapshots est " OFF ". 5. Par défaut TIMELINE_CREATE=yes' dans /etc/snapper/configs/root. La création de la ligne chronologique des snapshots est ON.


Pour voir quels sous-volumes sont créés sous / et donc voir quels répertoires (sous-volumes) sont exclus du comportement des snapshots par défaut :

# btrfs subvolume list /

Pour que Snapper crée un instantané d'un sous-volume, vous pouvez soit le faire manuellement une seule fois via le programme snapper, soit créer un nouveau fichier de configuration snapper. Plus d'informations dans le tutoriel.

Logiciels requis

Vous aurez toujours besoin de ce paquet :

 snapper

Si vous utilisez YaST2 pour installer, mettre à jour ou supprimer des paquets et que vous souhaitez que snapper crée automatiquement des instantanés lorsque vous utilisez cet outil :

 yast2-snapper

Si vous utilisez zypper pour installer, mettre à jour ou supprimer des paquets et que vous souhaitez que snapper crée automatiquement des instantanés lorsque vous utilisez cet outil :

 snapper-zypp-plugin

Si vous voulez avoir la possibilité de gestion avancée du menu de démarrage de btfs snapshot :

 grub2-snapper-plugin

ATTENTION : les paquets ci-dessus ne sont pas toujours installés par défaut. Ce qui est installé dépend des choix que vous faites pendant le processus d'installation d'openSUSE. Assurez-vous d'avoir installé les paquets appropriés (généralement tous les paquets listés ci-dessus) avant d'apporter des modifications à votre système, sinon vous risquez d'être surpris lorsque snapper ne va pas automatiquement créer les instantanés que vous pensiez qu'il allait faire.

Utilisation de base de Snapper

Snapper n'est pas limité à la création et à la gestion automatique des instantanés par configuration ; vous pouvez également créer des paires d'instantanés ("avant et après") ou des instantanés uniques manuellement en utilisant soit l'outil en ligne de commande soit le module YaST.

Toutes les opérations Snapper sont effectuées pour une configuration existante. Vous ne pouvez prendre que des instantanés des partitions ou des volumes pour lesquels une configuration existe. Par défaut, la configuration système (root) est utilisée. Si vous voulez créer ou gérer des instantanés pour votre propre configuration, vous devez les choisir explicitement. Utilisez le menu déroulant Current Configuration dans YaST ou spécifiez -c sur la ligne de commande (snapper -c MYCONFIG COMMAND).


Liste de tous les instantanés pour la configuration par défaut (root)

 snapper list

ou

 snapper ls

Afficher les fichiers et répertoires qui ont été modifiés entre les instantanés

Pour les fichiers/répertoires modifiés entre les instantanés 21 et 22 :

 snapper status 21..22

Vous pouvez également afficher les fichiers et répertoires qui ont été modifiés de l'instantané 41 en remontant jusqu'à l'instantané 39:

 snapper status 41..39

La sortie se compose d'une chaîne de caractères codant l'état suivi par le fichier nommé. Les caractères de la chaîne d'état par colonne sont les suivants :

  1. "+" signifie que le fichier a été créé, ou "-" signifie que le fichier a été supprimé, ou "c" signifie que le contenu du fichier a changé, ou "t" signifie que le type du fichier a changé (par exemple, de fichier normal à répertoire)
  2. "p" signifie que les permissions ont changé
  3. "u" signifie que l'utilisateur a changé de propriétaire
  4. "g" signifie que le groupe a changé de propriétaire
  5. "x" signifie que l'information de l'attribut étendu a changé
  6. "a" signifie que les données de la liste ACL (liste de contrôle d'accès) ont changé

"." dans toute colonne signifie aucun changement.

Montrer les différences (différence dans les fichiers réels) entre les instantanés

Pour les différences entre les instantanés 71 and 72:

 snapper diff 71..72

Vous pouvez également utiliser cette commande pour afficher la différence entre les versions d’un fichier spécifique. Par exemple, pour montrer la différence entre l'instantané 71 et 72 uniquement pour le fichier /etc/zypp/zypp/zypp.conf vous feriez ce qui suit :

 snapper diff 71..72 /etc/zypp/zypp.conf

Algorithmes de nettoyage

A moins que vous n'ayez une bonne raison de faire autrement, vous devriez toujours spécifier l'algorithme de nettoyage lors de la création d'un instantané, sinon l'instantané ne sera jamais supprimé sauf si vous le faites manuellement. Pour ce faire, ajoutez ce qui suit à vos commandes snapper :

 --cleanup-algorithm <number|timeline|empty-pre-post>

Les commandes suivantes supposent que vous allez créer des instantanés sur la configuration système par défaut (root). Comme mentionné ci-dessus, si vous voulez utiliser la configuration par défaut, ajoutez les commandes suivantes pour les instantanés :

 -c MYCONFIG

Crée un instantané de type pre et affiche le numéro de l'instantané. Première commande nécessaire pour créer une paire de instantanés utilisés pour enregistrer un état "avant" et "après".

 snapper create --type pre --print-number --description "Avant le nettoyage de la configuration d'Apache" --cleanup-algorithm number

Crée un instantané de type post associé au numéro de pré instantané 30. Deuxième commande nécessaire pour créer une paire de instantanés utilisés pour enregistrer un état "avant" et "après".

 snapper create --type post --pre-number 30 --description "Après le nettoyage de la configuration d'Apache" --cleanup-algorithm number

Crée un instantané autonome (type unique) pour la configuration par défaut (root) avec une description. Comme aucun algorithme de nettoyage n'est spécifié, l'instantané ne sera jamais supprimé automatiquement.

 snapper create --description "Instantané de la semaine 2 2014"

Mécanismes de nettoyage automatique des instantanés

Pour éviter que l'espace disque ne soit plein, Snapper nettoie périodiquement les instantanés. Par défaut, ce délai = 1 jour.

La tâche de nettoyage automatique des instantanés peut être gérée de 2 façons :

  1. planificateur cron (/etc/cron.daily/suse.de-snapper).
  2. planificateur systemd timer (unités systemd snapper-cleanup.timer et snapper-cleanup.service).

Par défaut, le mécanisme cron est utilisé. Mais il n'y a pas de blocages à l'utilisation du mécanisme de systemd timer.

Ne modifiez pas les scripts de nettoyage d'instantanés manuellement pour éviter un comportement incorrect de nettoyage d'instantanés!

Tous les mécanismes de nettoyage sont basés sur l'état (yes/no) de ces directives à partir d'un fichier de configuration de partition particulier, stocké dans le chemin /etc/snapper/configs/ :

  • NUMBER_CLEANUP =
  • TIMELINE_CLEANUP =
  • EMPTY_PRE_POST_CLEANUP =

Suppression d'instantanés

Supprimer l'instantané 65 pour la configuration par défaut (root) :

 snapper delete 65


Supprimer tous les instantanés (en supposant que vous n'en avez pas plus de 100000) :

 snapper delete 1-100000 

(snapper supprimera le numéro 1 - le numéro 2)

Tutoriel Snapper

Le tutoriel suivant suppose que vous avez installé openSUSE à l'aide de YaST (installeur par défaut) et sélectionné Btrfs pour votre système de fichiers racine / et votre système de fichiers personnels /home. La valeur par défaut est d'utiliser Btrfs à la racine, mais pas sur /home. Si votre /home n'utilise pas Btrfs, ce tutoriel s'applique toujours, mais ne suivez pas les instructions quand il s'agit de configurer ou d'utiliser Snapper sur /home.

Voyons d'abord comment YaST a configuré snapper :

# snapper list-configs
Config | Subvolume
-------+----------
root   | /  

Comme vous pouvez le voir, YaST a créé une configuration snapper appelée "root" pour votre système de fichiers racine. Vous pouvez voir quels instantanés ont été réalisés :

# snapper list
Type   | # | Pre # | Date                         | Cleanup  | Description |  Userdata
-------+---+-------+------------------------------+----------+-------------+---------
single | 0 |       |                              |          | current     |         
single | 1 |       | Tue 22 Nov 2011 10:30:02 CET | timeline | timeline    |

L'instantané #0 fait toujours référence au système actuel. Il peut y avoir déjà plusieurs autres instantanés selon le temps de fonctionnement de votre système et selon que vous ayez déjà utilisé YaST ou zypper.

Maintenant, nous voulons essayer snapper comme un outil d'annulation pour YaST. D'abord on lance YaST :

# yast2 system_settings

Dans YaST, activez la commande SysReq. Une fois que vous avez terminé YaST, vous voyez deux nouveaux instantanés :

# snapper list
Type   | # | Pre # | Date                         | Cleanup  | Description          | Userdata
-------+---+-------+------------------------------+----------+----------------------+---------
single | 0 |       |                              |          | current              |         
single | 1 |       | Tue 22 Nov 2011 10:30:02 CET | timeline | timeline             |         
pre    | 2 |       | Tue 22 Nov 2011 10:41:28 CET | number   | yast system_settings |         
post   | 3 | 2     | Tue 22 Nov 2011 10:41:49 CET | number   |                      |

Types d'instantanés

Il est temps d'expliquer les types d'instantanés. Snapper crée un instantané avant et après l'exécution de YaST, ces instantanés sont appelés respectivement pre et post. Le post instantané sait quels sont les pré-images qui lui appartiennent. En ayant un pré et post instantanés nous pouvons voir quels changements sont arrivés au système de fichiers pendant que YaST était en cours d'exécution. Les instantanés autonomes (unique) n'ont pas de relation particulière avec les autres instantanés.

  • Installation Snapshot
  • Administrative Snapshot
  • Timeline Snapshots

Plus d'informations ici : https://doc.opensuse.org/documentation/leap/reference/html/book.opensuse.reference/cha.snapper.html#snapper.snapshot-type

Voir ce qui a changé (YaST)

En utilisant snapper, il est facile de voir ce qui a changé pendant l'exécution de YaST. Pour ce faire, vous devez passer le numéro des instantanés pré et post :

# snapper status 2..3
c... /etc/sysctl.conf

Le 'c' signifie que le contenu du fichier a changé.

On peut aussi voir la différence du fichier :

# snapper diff 2..3
--- /.snapshots/2/snapshot/etc/sysctl.conf      2011-11-22 10:35:43.355493753 +0100
+++ /.snapshots/3/snapshot/etc/sysctl.conf      2011-11-22 10:41:47.019512185 +0100
@@ -17,7 +17,7 @@
 # See sysctl.conf(5) and sysctl(8) for more information
 #
 ####
-kernel.sysrq = 0
+kernel.sysrq = 1
 net.ipv4.ip_forward = 0
 net.ipv4.tcp_syncookies = 1
 net.ipv6.conf.all.forwarding = 0

Donc, si vous n'aimez pas le changement fait par YaST et que vous voulez l'annuler :

# snapper undochange 2..3
create:0 modify:1 delete:0
undoing change...
undoing change done

Mais notez que snapper n'informe pas le noyau du changement comme YaST l'a fait, donc vous devez soit le faire vous-même, soit redémarrer.


Ajout de /home à Snapper (si /home est en btrfs)

Pendant l'installation, YaST ne configure pas de configuration snapper pour /home. Nous pouvons le faire manuellement :

# snapper -c home create-config /home

Chaque fois que vous voulez utiliser snapper pour /home vous devez fournir l'option -c home.

Vous pouvez maintenant voir quels fichiers ont été modifiés depuis le dernier instantané horaire :

# snapper -c home list
Type   | # | Pre # | Date                         | Cleanup  | Description | Userdata
-------+---+-------+------------------------------+----------+-------------+---------
single | 0 |       |                              |          | current     |         
single | 1 |       | Tue 22 Nov 2011 11:30:01 CET | timeline | timeline    |         
# snapper -c home status 1..0
comparing snapshots... done
+... /home/tux/just-married.jpg

Le signe '+' signifie que le fichier est nouveau.


Création manuelle d'un instantané

Si vous voulez créer manuellement un instantané, utilisez :

# snapper -c home create --description "avant le grand nettoyage"

Interface graphique YaST Snapper

Enfin yast2-snapper fournit une interface utilisateur YaST pour snapper.

Interface graphique Yast2-snapper.png

Dépannage

Dans la plupart des cas, les problèmes de l'utilisateur avec Snapper peuvent survenir, lorsque l'utilisateur essaie de procéder à certaines actions (par exemple, créer ou supprimer incorrectement des sous-volumes de configuration) sans comprendre la 'logique' du travail de Snapper. Pour le suivre, il faut plonger à un niveau plus profond pour atteindre les détails.

Essayons de créer la configuration de Snapper pour les sous-volumes /foo et /bar des btrfs.

 snapper -c foo create-config /foo

Que se passe-t-il vraiment, quand cette commande est passée ?

  1. Le fichier de configuration /etc/snapper/configs/foo' est créé.
  2. Le dossier, où les instantanés pour le sous-volume /foo seront stockés : /foo/.snapshots/. est créé.
  3. Le fichier de configuration /etc/sysconfig/snapper' est mis à jour en changeant le paramètre : SNAPPER_CONFIGS : SNAPPER_CONFIGS="foo".

Quand, après avoir créé la configuration pour le sous-volume /foo, l'utilisateur passe la commande :

 snapper -c bar create-config /bar

l'algorithme de Snapper est le même :

  1. Le fichier de configuration /etc/snapper/configs/bar' est créé.
  2. Le dossier, où les instantanés pour le sous-volume /bar seront stockés : /bar/.snapshots/. est créé.
  3. Le fichier de configuration /etc/sysconfig/snapper' est mis à jour en changeant le paramètre SNAPPER_CONFIGS' : SNAPPER_CONFIGS="foo bar".

Et ainsi de suite.

Par conséquent, lorsque la commande suivante est effectuée

 snapper -c foo delete-config

elle permet de supprimer la configuration du sous-volume /foo :

  1. Le fichier de configuration /etc/snapper/configs/foo est supprimé.
  2. Le dossier, où les instantanés pour le sous-volume /foo sont stockés : /foo/.snapshots/. est supprimée.
  3. Le fichier de configuration /etc/sysconfig/snapper' est mis à jour en changeant le paramètre SNAPPER_CONFIGS' : SNAPPER_CONFIGS="bar"'. (L'enregistrementfoo est supprimé).

AVERTISSEMENT 1 : Rappelez-vous également que l'état du paramètre SNAPPER_CONFIGS est analysé par des scripts de nettoyage des instantanés (Voir paragraphe 4.5 Mécanismes de nettoyage automatique des instantanés). Et, s'il contient des enregistrements orphelins, les scripts de nettoyage des instantanés ne fonctionneront pas. Et c'est le risque que l'espace disque soit plein !

AVERTISSEMENT 2' : Si vous effectuez une action manuellement (par ex. vous supprimez /etc/snapper/configs/foo manuellement au lieu de la commande snapper -c foo delete-config), n'oubliez pas de mettre à jour SNAPPER_CONFIGS' paramètre dans /etc/sysconfig/snapper par suppression manuelle du dossier foo et de supprimer manuellement /foo/.snapshots/. Parce que, si vous faites quelque chose de manière incomplète, Snapper ne pourra pas fonctionner correctement et sortira avec un message d'erreur. Et les scripts de nettoyage des snapshots ne fonctionneront pas correctement. Et c'est le risque que l'espace disque soit plein !

EN RÉSUMÉ : Gérez vos sous-volumes btrfs avec l'outil Snapper au lieu de le faire manuellement. Cela vous épargnera des moments d’énervement. Mais si vous rencontrez des problèmes de gestion des sous-volumes de btrfs, faites-vous une idée de ses mécanismes. Cela vous aidera peut-être à suivre la nature du problème que vous avez rencontré et à le résoudre facilement.

Et, bien sûr, n'oubliez pas de consulter les logs de Snapper pour obtenir des informations utiles de dépannage !

Logs

Les fichiers logs (journaux d'événements) Snapper se trouvent dans /var/log/snapper.log, vérifiez ce fichier si vous avez des problèmes car il peut contenir des informations utiles pour le dépannage.

Vidéos sur Snapper

Snapper Quick Overview (4min)

Greg Kroah-Hartman & SUSE Linux Enterprise Product Manager Demo Snapper (~7min)

Snapper, Btrfs & LVM Presentation (22min)