<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>firewire</title>
  <link rel="alternate" type="text/html" href="http://tumbleweed.org.za/tags/firewire"/>
  <link rel="self" type="application/atom+xml" href="http://tumbleweed.org.za/taxonomy/term/113/atom/feed"/>
  <id>http://tumbleweed.org.za/taxonomy/term/113/atom/feed</id>
  <updated>2008-09-19T07:57:07+00:00</updated>
  <entry>
    <title>Automated backups to external disk</title>
    <link rel="alternate" type="text/html" href="http://tumbleweed.org.za/2007/10/11/automated-backups-to-external-disk" />
    <id>http://tumbleweed.org.za/2007/10/11/automated-backups-to-external-disk</id>
    <published>2007-10-11T15:27:29+00:00</published>
    <updated>2008-09-19T07:57:07+00:00</updated>
    <author>
      <name>tumbleweed</name>
    </author>
    <category term="automated" />
    <category term="backup" />
    <category term="debian" />
    <category term="firewire" />
    <category term="ubuntu" />
    <category term="udev" />
    <summary type="html"><![CDATA[<p>I remember somebody asking how to do this on the <span class="caps"><span class="caps">CLUG</span></span> lists a while back. But here&#8217;s&nbsp;the&nbsp;problem:</p>

<p>You&#8217;ve got an automated backup system, but you want offsite backups. DVDs are too small, external hard drives are the only option. You want the user to be able to plug in the firewire disk, have the backup start automatically, and let them know when&nbsp;it&#8217;s&nbsp;done.</p>

<p>Here&#8217;s how I&nbsp;implemented&nbsp;it:</p>

<p>The backups are implemented with <a href="http://www.backup-manager.org/">backup-manager</a>, they backup into <span class="geshifilter"><code class="geshifilter-text">/mnt/backup-tmp/</code></span></p>

<p>The external hard drive connects by firewire. Running <span class="geshifilter"><code class="geshifilter-text">udevinfo -a -p /sys/block/sdd</code></span> on it showed me&nbsp;it&#8217;s&nbsp;<span class="caps">ID</span>:</p>

<div class="geshifilter"><div class="text geshifilter-text" style="font-family:monospace;"><span class="caps"><span class="caps">ATTRS</span></span>{ieee1394_id}==&quot;0090a9787b339de6:1:0&quot;</div></div>

<p>I created this <span class="caps"><span class="caps">UDEV</span></span> rule file <span class="geshifilter"><code class="geshifilter-text">/etc/udev/rules.d/local-backup.rules</code></span>:</p>

<div class="geshifilter"><div class="text geshifilter-text" style="font-family:monospace;"><span class="caps"><span class="caps">ATTRS</span></span>{ieee1394_id}==&quot;0090a9787b339de6:1:0&quot;, <span class="caps"><span class="caps">SYMLINK</span></span>=&quot;backupdisk&quot;, <span class="caps"><span class="caps">RUN</span></span>+=&quot;/usr/local/sbin/backup-to-external.sh&quot;</div></div>

<p>And the relevant&nbsp;fstab&nbsp;entry:</p>

<div class="geshifilter"><div class="text geshifilter-text" style="font-family:monospace;">/dev/backupdisk /mnt/backup-disk vfat &nbsp; sync &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; 0</div></div>

<p>And the backup script <span class="geshifilter"><code class="geshifilter-text">/usr/local/sbin/backup-to-external.sh</code></span>:</p>

<div class="geshifilter"><div class="bash geshifilter-bash" style="font-family:monospace;"><span class="co0">#!/bin/sh -e</span><br />
<br />
<span class="re2"><span class="caps"><span class="caps">LOCKFILE</span></span></span>=<span class="sy0">/</span>var<span class="sy0">/</span>run<span class="sy0">/</span>backup-to-external.lock<br />
<br />
logger <span class="st0">&quot;Backup disk detected&quot;</span><br />
<br />
<span class="co0"># Test for expired locks</span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re5">-e</span> <span class="st0">&quot;<span class="es2">$<span class="caps"><span class="caps">LOCKFILE</span></span></span>&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; <span class="kw1">if</span> <span class="sy0">!</span> <span class="kw2">kill</span> <span class="re5">-0</span> <span class="sy0">`</span><span class="kw2">cat</span> <span class="st0">&quot;<span class="es2">$<span class="caps"><span class="caps">LOCKFILE</span></span></span>&quot;</span><span class="sy0">`</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; <span class="kw2">rm</span> <span class="st0">&quot;<span class="es2">$<span class="caps"><span class="caps">LOCKFILE</span></span></span>&quot;</span><br />
&nbsp; <span class="kw1">fi</span><br />
<span class="kw1">fi</span><br />
<br />
<span class="kw2">lockfile</span> <span class="re5">-r0</span> <span class="st0">&quot;<span class="es2">$<span class="caps"><span class="caps">LOCKFILE</span></span></span>&quot;</span><br />
<span class="kw3">echo</span> <span class="re4">$$</span> <span class="sy0">&gt;</span> <span class="st0">&quot;<span class="es2">$<span class="caps"><span class="caps">LOCKFILE</span></span></span>&quot;</span><br />
<br />
<span class="kw2">sleep</span> 5s<br />
<br />
logger <span class="st0">&quot;Backup to external begun&quot;</span><br />
<br />
<span class="kw2">mount</span> <span class="sy0">/</span>mnt<span class="sy0">/</span>backup-disk<br />
rsync <span class="re5">-a</span> <span class="sy0">/</span>mnt<span class="sy0">/</span>backup-tmp<span class="sy0">/</span> <span class="sy0">/</span>mnt<span class="sy0">/</span>backup-disk<span class="sy0">/</span><br />
<span class="kw2">umount</span> <span class="sy0">/</span>mnt<span class="sy0">/</span>backup-disk<br />
<br />
beep <span class="re5">-l</span> <span class="nu0">1000</span> <span class="re5">-f</span> <span class="nu0">3000</span> <span class="re5">-r</span> <span class="nu0">5</span><br />
<span class="kw3">echo</span> <span class="re5">-e</span> <span class="st0">&quot;You can disconnect the disk now.<span class="es1">\n</span>Thank you.<span class="es1">\n</span><span class="es1">\n</span>The backup System.&quot;</span> <span class="sy0">|</span> mail <span class="re5">-s</span> <span class="st0">&quot;Backup completed&quot;</span> the-secretary<span class="sy0">@</span>email.address<br />
<br />
<span class="kw2">rm</span> <span class="st0">&quot;<span class="es2">$<span class="caps"><span class="caps">LOCKFILE</span></span></span>&quot;</span><br />
logger <span class="st0">&quot;Backup to external completed&quot;</span></div></div>
    ]]></summary>
    <content type="html"><![CDATA[<p>I remember somebody asking how to do this on the <span class="caps">CLUG</span> lists a while back. But here&#8217;s the&nbsp;problem:</p>

<p>You&#8217;ve got an automated backup system, but you want offsite backups. DVDs are too small, external hard drives are the only option. You want the user to be able to plug in the firewire disk, have the backup start automatically, and let them know when it&#8217;s&nbsp;done.</p>

<p>Here&#8217;s how I implemented&nbsp;it:</p>

<p>The backups are implemented with <a href="http://www.backup-manager.org/">backup-manager</a>, they backup into <code>/mnt/backup-tmp/</code></p>

<p>The external hard drive connects by firewire. Running <code>udevinfo -a -p /sys/block/sdd</code> on it showed me it&#8217;s&nbsp;ID:</p>

<div class="geshifilter"><div class="text geshifilter-text" style="font-family:monospace;"><span class="caps">ATTRS</span>{ieee1394_id}==&quot;0090a9787b339de6:1:0&quot;</div></div>

<p>I created this <span class="caps">UDEV</span> rule file <code>/etc/udev/rules.d/local-backup.rules</code>:</p>

<div class="geshifilter"><div class="text geshifilter-text" style="font-family:monospace;"><span class="caps">ATTRS</span>{ieee1394_id}==&quot;0090a9787b339de6:1:0&quot;, <span class="caps">SYMLINK</span>=&quot;backupdisk&quot;, <span class="caps">RUN</span>+=&quot;/usr/local/sbin/backup-to-external.sh&quot;</div></div>

<p>And the relevant fstab&nbsp;entry:</p>

<div class="geshifilter"><div class="text geshifilter-text" style="font-family:monospace;">/dev/backupdisk /mnt/backup-disk vfat &nbsp; sync &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; 0</div></div>

<p>And the backup script <code>/usr/local/sbin/backup-to-external.sh</code>:</p>

<div class="geshifilter"><div class="bash geshifilter-bash" style="font-family:monospace;"><span class="co0">#!/bin/sh -e</span><br />
<br />
<span class="re2"><span class="caps">LOCKFILE</span></span>=<span class="sy0">/</span>var<span class="sy0">/</span>run<span class="sy0">/</span>backup-to-external.lock<br />
<br />
logger <span class="st0">&quot;Backup disk detected&quot;</span><br />
<br />
<span class="co0"># Test for expired locks</span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re5">-e</span> <span class="st0">&quot;<span class="es2">$<span class="caps">LOCKFILE</span></span>&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; <span class="kw1">if</span> <span class="sy0">!</span> <span class="kw2">kill</span> <span class="re5">-0</span> <span class="sy0">`</span><span class="kw2">cat</span> <span class="st0">&quot;<span class="es2">$<span class="caps">LOCKFILE</span></span>&quot;</span><span class="sy0">`</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; <span class="kw2">rm</span> <span class="st0">&quot;<span class="es2">$<span class="caps">LOCKFILE</span></span>&quot;</span><br />
&nbsp; <span class="kw1">fi</span><br />
<span class="kw1">fi</span><br />
<br />
<span class="kw2">lockfile</span> <span class="re5">-r0</span> <span class="st0">&quot;<span class="es2">$<span class="caps">LOCKFILE</span></span>&quot;</span><br />
<span class="kw3">echo</span> <span class="re4">$$</span> <span class="sy0">&gt;</span> <span class="st0">&quot;<span class="es2">$<span class="caps">LOCKFILE</span></span>&quot;</span><br />
<br />
<span class="kw2">sleep</span> 5s<br />
<br />
logger <span class="st0">&quot;Backup to external begun&quot;</span><br />
<br />
<span class="kw2">mount</span> <span class="sy0">/</span>mnt<span class="sy0">/</span>backup-disk<br />
rsync <span class="re5">-a</span> <span class="sy0">/</span>mnt<span class="sy0">/</span>backup-tmp<span class="sy0">/</span> <span class="sy0">/</span>mnt<span class="sy0">/</span>backup-disk<span class="sy0">/</span><br />
<span class="kw2">umount</span> <span class="sy0">/</span>mnt<span class="sy0">/</span>backup-disk<br />
<br />
beep <span class="re5">-l</span> <span class="nu0">1000</span> <span class="re5">-f</span> <span class="nu0">3000</span> <span class="re5">-r</span> <span class="nu0">5</span><br />
<span class="kw3">echo</span> <span class="re5">-e</span> <span class="st0">&quot;You can disconnect the disk now.<span class="es1">\n</span>Thank you.<span class="es1">\n</span><span class="es1">\n</span>The backup System.&quot;</span> <span class="sy0">|</span> mail <span class="re5">-s</span> <span class="st0">&quot;Backup completed&quot;</span> the-secretary<span class="sy0">@</span>email.address<br />
<br />
<span class="kw2">rm</span> <span class="st0">&quot;<span class="es2">$<span class="caps">LOCKFILE</span></span>&quot;</span><br />
logger <span class="st0">&quot;Backup to external completed&quot;</span></div></div>
    ]]></content>
  </entry>
</feed>
