{"id":556,"date":"2011-08-02T14:15:21","date_gmt":"2011-08-02T12:15:21","guid":{"rendered":"https:\/\/hoper.dnsalias.net\/atdc\/?p=556"},"modified":"2017-05-06T14:16:37","modified_gmt":"2017-05-06T12:16:37","slug":"lvm-snapshots","status":"publish","type":"post","link":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/2011\/08\/02\/lvm-snapshots\/","title":{"rendered":"LVM &#8211; Les snapshots"},"content":{"rendered":"<div class=\"post-content\">\n<h3>A quoi \u00e7a sert\u00a0?<\/h3>\n<p>Historiquement, les snapshots ont \u00e9t\u00e9s con\u00e7us pour permettre les sauvegardes des serveurs qui ne pouvaient pas \u00eatre arr\u00eat\u00e9s pendant une longue p\u00e9riode. Imaginons le cas suivant. Vous avez un serveur utilis\u00e9 par des programmes qui font de nombreuses lectures\/\u00e9critures \u00e0 n&rsquo;importe quel heure du jour et la nuit. Sauvegarder tous les fichiers de ce serveur prend des heures. Mais comme il s&rsquo;agit d&rsquo;un serveur \u00ab\u00a0critique\u00a0\u00bb, il n&rsquo;est pas question de l\u2019arr\u00eater plus de quelques minutes par jours, grand maximum. Alors, comment faire les sauvegardes\u00a0?<\/p>\n<p>Tout d\u2019abord, j&rsquo;esp\u00e8re que tout le monde comprend qu&rsquo;il n&rsquo;est pas question de sauvegarder un syst\u00e8me de fichier en cours d&rsquo;utilisation. M\u00eame si les lectures sont plus nombreuses que les \u00e9critures, le syst\u00e8me de fichier est mont\u00e9, il est en cours d&rsquo;utilisation. Vous pouvez essayer de le sauvegarder si vous voulez, mais vous pouvez \u00eatre certain que la restauration va tr\u00e8s mal fonctionner. \u00ab\u00a0Il y a en qui ont essay\u00e9, ils ont eu des probl\u00e8mes&#8230;\u00a0\u00bb<\/p>\n<h3>Alors on fait comment\u00a0?<\/h3>\n<p>On fais un snapshot du syst\u00e8me de fichier. Un snapshot, c&rsquo;est une photo. On \u00ab\u00a0fige\u00a0\u00bb le syst\u00e8me de fichier tel qu&rsquo;il est \u00e0 un instant T, et de pr\u00e9f\u00e9rence bien sur \u00e0 un instant ou il est dans un \u00e9tat coh\u00e9rent, et donc sauvegardable. Ensuite, les applications peuvent continuer \u00e0 utiliser le syst\u00e8me de ficher, pendant que nous on sauvegarde la photo.<\/p>\n<p>Les \u00e9tapes d&rsquo;une sauvegarde r\u00e9ussie (et que l&rsquo;on pourra restaurer sans erreurs) devraient donc ressembler \u00e0 \u00e7a\u00a0:<\/p>\n<ul>\n<li>Arr\u00eat des programmes qui tournent sur le serveur<\/li>\n<li>D\u00e9montage du syst\u00e8me de fichier \u00e0 sauvegarder<\/li>\n<li>Snapshot de ce syst\u00e8me de fichier (op\u00e9ration instantan\u00e9e)<\/li>\n<li>Montage du syst\u00e8me de fichier<\/li>\n<li>Relance des applications<\/li>\n<\/ul>\n<p>Toutes ces \u00e9tapes peuvent g\u00e9n\u00e9ralement se faire en moins d&rsquo;une minute. Ce sera le temps total d&rsquo;indisponibilit\u00e9 du serveur<\/p>\n<p>Enfin, derni\u00e8re \u00e9tape (qui prendra plusieurs heures mais comme le serveur est de nouveau op\u00e9rationnel, rien ne presse), la sauvegarde du snapshot. Voici ce que ca pourrait donner en terme de commandes, pour sauvegarder un syst\u00e8me de fichier de 1 To mont\u00e9 sur \/data\u00a0:<\/p>\n<pre> \/etc\/init.d\/mon_application stop\r\n umount \/data\r\n lvcreate -s -n mon_snapshot -L 20G \/dev\/monvg\/monlv\r\n mount \/data\r\n \/etc\/init.d\/mon_application start<\/pre>\n<p>Toutes les donn\u00e9es sont maintenant accessibles dans \/data.<br \/>\nVous devez vous demander a quoi correspond le \u00ab\u00a0-L 20G\u00a0\u00bb de la cr\u00e9ation du snapshot. En fait, un snaphost peut prendre de la place, car il doit stocker toutes les modifications qui sont faites sur les donn\u00e9es depuis la r\u00e9alisation du snapshot. Cette taille doit \u00eatre choisie avec soin, il ne faut surtout pas prendre une valeur trop faible. Si vous pensez que pendant la dur\u00e9e de vie du snapshot, quelques centaines de Mo seront \u00e9crits dans \/data, alors mettez au moins 1 ou 2 Go. Si vous pensez que 4 ou 5 Go seront \u00e9crits, mettez en 10 ou 20&#8230; (voir plus si vous pouvez vous le permettre). Bref, soyez large. Il est toujours possible de v\u00e9rifier le taux de remplissage du snapshot avec la commande\u00a0: lvs<\/p>\n<p>Il ne reste plus maintenant qu&rsquo;a lancer la sauvegarde du snapshot\u00a0:<\/p>\n<pre> mount \/dev\/monvg\/mon_snapshot \/mnt\r\n cp -a \/mnt\/* \/backup<\/pre>\n<p>Pour la sauvegarde j&rsquo;esp\u00e8re que vous avez des outils beaucoup mieux que la commande \u00ab\u00a0cp\u00a0\u00bb hein&#8230; C&rsquo;est juste un exemple. Une fois la sauvegarde termin\u00e9e, on peut d\u00e9truire le snapshot\u00a0:<\/p>\n<pre> umount \/mnt\r\n lvremove \/monvg\/mon_snapshot<\/pre>\n<h4>Note importante\u00a0:<\/h4>\n<p>Vous trouverez ailleurs sur le net les m\u00eames informations, mais sans la partie d\u00e9montage du syst\u00e8me de fichier. Et si vous faite le test, ca fonctionnera. Un snapshot d&rsquo;un syst\u00e8me de fichier mont\u00e9 et en cours d&rsquo;utilisation donnera directement un snaphost coh\u00e9rent, sauvegarde et restorable dans 99% des cas. Comment \u00e7a fonctionne\u00a0? Et pourquoi je conseil quand m\u00eame de d\u00e9monter son syst\u00e8me de fichier alors\u00a0?<\/p>\n<p>De fa\u00e7on totalement contradictoire avec le principe de fonctionnement en couche, LVM sait reconnaitre l\u2019existence de certains syst\u00e8mes de fichier. (Je n&rsquo;ai pas r\u00e9ussit \u00e0 trouver la liste pr\u00e9cise sur le net). Bref, il reconnait donc le FS pr\u00e9sent dans le volume et \u00ab\u00a0freeze\u00a0\u00bb le FS en question, r\u00e9alise le snapshot et fait encore pas mal d&rsquo;autres choses. (Il faut notamment faire en sorte que les deux FS, disposant d&rsquo;un m\u00eame UUID puissent \u00eatre quand m\u00eame utilis\u00e9 en m\u00eame temps etc). Plein de choses cach\u00e9s donc, qui d\u00e9pendent du type du FS pr\u00e9sent. Globalement, il est beaucoup plus prudent de choisir une approche qui fonctionnera dans 100% des cas, le d\u00e9montage du syst\u00e8me de fichier. La au moins, on est sur que le FS n&rsquo;est plus utilis\u00e9 et qu&rsquo;il est dans un \u00e9tat coh\u00e9rent&#8230;<\/p>\n<h3>C&rsquo;est tout\u00a0?<\/h3>\n<p>Non bien sur. Ca c&rsquo;est ce que l&rsquo;on faisait il y a des ann\u00e9es. Les fonctionnalit\u00e9s des snapshots ont quand m\u00eame bien \u00e9volu\u00e9s. Avant, le snapshot \u00e9tait en lecture seul. Maintenant, il est possible d&rsquo;\u00e9crire dessus, comme on le ferai avec un syst\u00e8me de fichier normal.<\/p>\n<p>Imaginons que vous voulez lancer plusieurs machines virtuelles sur votre serveur. Chaque machine virtuelle aura le m\u00eame OS et donc globalement les m\u00eames donn\u00e9es. Seul quelques d\u00e9tails (adresse IP, un ou deux logiciels install\u00e9s ou non etc) seront diff\u00e9rent d&rsquo;une machine \u00e0 l&rsquo;autre. Si on \u00e0 8 machines virtuelles, ce serait dommage de devoir allouer 8 fois 10 Go d&rsquo;espace disque par exemple, alors que 99% des donn\u00e9es seront identiques sur les 8 machines. Dans ce cas, on peut cr\u00e9er un volume principal de 10 Go, installer une version basique de l&rsquo;OS et des applications communes. Ensuite on va cr\u00e9er des snapshots en lecture\/\u00e9critures, en attribuant \u00e0 chaque snapshot qu&rsquo;une toute petite quantit\u00e9 d&rsquo;espace disque, correspondant \u00e0 la quantit\u00e9 d&rsquo;espace qui risque de varier par rapport au volume original. Par exemple 1 Go. Au total on aura donc utilis\u00e9 10 + 7&#215;1 = 17 Go d&rsquo;espace, au lieu de 10*10 = 100 Go.<\/p>\n<p>Bien sur, ce n&rsquo;est qu&rsquo;un exemple, et dans ce genre de cas, de la para-virtualisation serait encore bien plus efficace mais&#8230; C&rsquo;est juste pour vous donner une id\u00e9e de ce qu&rsquo;on peut faire avec des snapshots \ud83d\ude42<\/p>\n<p>Autre chose bien sympathique, il est th\u00e9oriquement possible, depuis le noyau 2.6.33, de faire un retour arri\u00e8re (rollback) sur un snapshot. Cela peut par exemple permettre de faire des tests avec un retour arri\u00e8re possible.<\/p>\n<p>Le principe est le suivant\u00a0:<\/p>\n<ul>\n<li>On cr\u00e9e un snapshot<\/li>\n<li>On fait son test (applications de patchs, mise \u00e0 jour d&rsquo;une application&#8230;)<\/li>\n<\/ul>\n<p>Soit tout fonctionne parfaitement, et on d\u00e9truit le snapshot Soit, c&rsquo;est une catastrophe, et on veut revenir \u00e0 la situation initial, celle qui existait au moment de la cr\u00e9ation du snapshot.<\/p>\n<p>Une commande permet alors de retrouver le syst\u00e8me tel qu&rsquo;il \u00e9tait \u00e0 ce moment la. N&rsquo;ayant pas de serveur de test avec le bon niveau de noyau, je n&rsquo;ai pas encore pu tester cette fonctionnalit\u00e9. Plus tard sans doute \ud83d\ude42<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A quoi \u00e7a sert\u00a0? Historiquement, les snapshots ont \u00e9t\u00e9s con\u00e7us pour permettre les sauvegardes des serveurs qui ne pouvaient pas \u00eatre arr\u00eat\u00e9s pendant une longue p\u00e9riode. Imaginons le cas suivant. Vous avez un serveur utilis\u00e9 par des programmes qui font de nombreuses lectures\/\u00e9critures \u00e0 n&rsquo;importe quel heure du jour et la nuit. Sauvegarder tous les [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-556","post","type-post","status-publish","format-standard","hentry","category-geekitude"],"_links":{"self":[{"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/posts\/556","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/comments?post=556"}],"version-history":[{"count":2,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/posts\/556\/revisions"}],"predecessor-version":[{"id":558,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/posts\/556\/revisions\/558"}],"wp:attachment":[{"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/media?parent=556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/categories?post=556"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/tags?post=556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}