{"id":23,"date":"2010-08-16T21:54:25","date_gmt":"2010-08-16T19:54:25","guid":{"rendered":"http:\/\/mmed.roulleau.net\/?p=23"},"modified":"2010-08-16T21:54:25","modified_gmt":"2010-08-16T19:54:25","slug":"une-sauvegarde-ftp-ordonnancee-et-simple-appliquee-a-zimbra","status":"publish","type":"post","link":"https:\/\/mmed.roulleau.net\/?p=23","title":{"rendered":"Une sauvegarde FTP ordonnanc\u00e9e et simple, appliqu\u00e9e \u00e0 Zimbra"},"content":{"rendered":"<p>En informatique, rien n&rsquo;est plus vrai que l&rsquo;adage \u00ab\u00a0un script qui peut le plus peut le moins\u00a0\u00bb.<br \/>\nA ceci, j&rsquo;aime rajouter son corollaire : \u00a0\u00bb un script qui peut le plus <em>co\u00fbte cher et est relou \u00e0 maintenir <\/em>\u00ab\u00a0&#8230;<\/p>\n<p>Tout l&rsquo;art consiste \u00e0 choisir son camp en fonction des circonstances&#8230; Vous vous en doutez sans doute, mais l\u00e0 c&rsquo;est le moment id\u00e9al pour placer un exemple de script rapide et fonctionnel, et je ne vais pas me g\u00eaner.<\/p>\n<p>J&rsquo;ai eu besoin r\u00e9cemment de programmer une sauvegarde r\u00e9guli\u00e8re de l&rsquo;ensemble du <strong>Zimbra <\/strong>que j&rsquo;h\u00e9berge pour usage familial. Pourquoi une sauvegarde? Il ne s&rsquo;agit pas d&rsquo;un environnement professionnel \u00e0 haute criticit\u00e9, alors \u00e0 quoi bon s&#8217;emb\u00eater? Hum, bien s\u00fbr mon ami, mais je pense que tu ne t&rsquo;es jamais retrouv\u00e9 en face de membres de ta famille g\u00e9missant sur des mails perdus avec les photos du petit dernier. Lorsque le faci\u00e8s de ta honte sera \u00e9ternellement grav\u00e9 dans les m\u00e9moires, tu regretteras de ne pas avoir pr\u00e9vu le crash du disque dur chez l&rsquo;h\u00e9bergeur.<\/p>\n<p>Hop, voil\u00e0 donc petit script pour exploiter l&rsquo;espace FTP gracieusement mis \u00e0 disposition \u00e0 cet effet par mon h\u00e9bergeur OVH et t&rsquo;\u00e9viter une disgr\u00e2ce familiale. Au menu :<\/p>\n<p>&#8211; Rotation tr\u00e8s pouss\u00e9e et configurable. Haha je plaisante, le but c&rsquo;est de faire un script ultra simple.\u00a0 On se contente de <strong>move<\/strong> et de <strong>del<\/strong><br \/>\n&#8211; Utilisation de deux <strong>rsync <\/strong>avant le <strong>tar <\/strong>pour faire une longue sauvegarde \u00e0 chaud puis une courte \u00e0 froid pour minimiser le temps d&rsquo;indisponibilit\u00e9. NB: <strong>rsync <\/strong>et <strong>tar <\/strong>ont l&rsquo;avantage de conserver les liens symboliques tels quels, contrairement \u00e0 un simple <strong>cp<\/strong>.<br \/>\n&#8211; D\u00e9p\u00f4t FTP automatis\u00e9&#8230;<br \/>\n&#8230;Et c&rsquo;est tout ! En effet Zimbra, m\u00eame dans sa version communautaire, est plut\u00f4t simple \u00e0 sauvegarder. Donc pas la peine de s&#8217;emb\u00eater avec des tonnes d&rsquo;options.<\/p>\n<p>Le voil\u00e0 dans sa plus simple expression :<\/p>\n<pre>#!\/bin\/bash\nSERVER=&lt;serveur&gt;\nUSERNAME=&lt;login_ftp&gt;\nPASSWORD=&lt;pwd_ftp&gt;\nDESTINATION=&lt;chemin_destination&gt; #chemin temporaire de travail pour faire les synchronisations et construire l'archive\n\nfunction ftpfile {\n   ftp -n &lt;&lt;EOF\n   open $SERVER\n   user $USERNAME $PASSWORD\n   bin\n   $1 $2 $3\n   bye\n   EOF\n}\n\nrsync -av --delete \/opt\/zimbra $DESTINATION\n#\/etc\/init.d\/zimbra stop\n#rsync -av --delete \/opt\/zimbra $DESTINATION\n#\/etc\/init.d\/zimbra start\ncd $DESTINATION\ntar cvfz zimbra.tar.gz zimbra\n\nftpfile del zimbra.tar.gz.3\nftpfile rename zimbra.tar.gz.2 zimbra.tar.gz.3\nftpfile rename zimbra.tar.gz.1 zimbra.tar.gz.2\nftpfile rename zimbra.tar.gz zimbra.tar.gz.1\nftpfile put zimbra.tar.gz<\/pre>\n<p>Le script est \u00e0 ex\u00e9cuter en tant que root (n\u00e9cessaire pour conserver les propri\u00e9taires des fichiers).<br \/>\nEt on n&rsquo;oubliera pas d&rsquo;ajouter\u00a0 une ligne idiote dans la <strong>crontab<\/strong>. Je ne vous fait pas l&rsquo;affront de l&rsquo;\u00e9crire \u00e0 votre place, mais je me permets deux petits conseils :<br \/>\n&#8211; redirigez la sortie standard de votre op\u00e9ration de \u00ab\u00a0tar\u00a0\u00bb quelque part.<br \/>\n&#8211; mentionnez express\u00e9ment l&rsquo;interpr\u00e9teur en t\u00eate de votre commande dans la ligne cron.<br \/>\nPourquoi? Personne ne semble capable de l&rsquo;expliquer, mais parfois le tar s&rsquo;interrompt en plein milieu si\u00a0 ceci n&rsquo;est pas rajout\u00e9 (j&rsquo;ai pu le constater, avec beaucoup d&rsquo;\u00e9tonnement d&rsquo;ailleurs). Ce qui donne par exemple :<\/p>\n<pre>0 3 * * *\u00a0 \/bin\/bash &lt;chemin&gt;\/sauvegarde.sh &gt; \/var\/log\/sauvegarde.log<\/pre>\n<h2>Bonus : comment restaurer la sauvegarde<\/h2>\n<p>Rien de plus simple. Remplacer le r\u00e9pertoire <strong>\/opt\/zimbra<\/strong> par le contenu de votre tar.<br \/>\nS&rsquo;il s&rsquo;agit d&rsquo;une nouvelle machine parce que l&rsquo;impitoyable crash de votre disque dur \u00e0 \u00e9t\u00e9 total, n&rsquo;oubliez pas de r\u00e9installer la m\u00eame version de <strong>Zimbra <\/strong>par la proc\u00e9dure standard avant d&rsquo;extraire le tar. En effet les paquets doivent \u00eatre proprement install\u00e9s au moins une fois.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En informatique, rien n&rsquo;est plus vrai que l&rsquo;adage \u00ab\u00a0un script qui peut le plus peut le moins\u00a0\u00bb. A ceci, j&rsquo;aime rajouter son corollaire : \u00a0\u00bb un script qui peut le plus co\u00fbte cher et est relou \u00e0 maintenir \u00ab\u00a0&#8230; Tout l&rsquo;art consiste \u00e0 choisir son camp en fonction des circonstances&#8230; Vous vous en doutez sans [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[18,19,39,41,56],"_links":{"self":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/posts\/23"}],"collection":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=23"}],"version-history":[{"count":0,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/posts\/23\/revisions"}],"wp:attachment":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=23"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=23"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=23"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}