<div dir="ltr">I use the script included in this email to run backups. It&#39;s really just a call to duplicity after some sanity checks. Run on a system that hasn&#39;t been backed up before, where that system is about 1.7GB of data, it takes about 8 minutes to run.<div><br></div><div>````</div><div><div>#!/bin/bash</div><div> </div><div># Pre-execution check for bsfl</div><div># Set options afterward</div><div>if [ ! -f /etc/bsfl ]; then</div><div>  echo &quot;Backup script requires bsfl (<a href="https://code.google.com/p/bsfl/)">https://code.google.com/p/bsfl/)</a>.&quot;</div><div>  exit 1</div><div>fi</div><div>source /etc/bsfl</div><div> </div><div>### Options ###</div><div> </div><div># Set to the desired logfile path and name</div><div>LOG_FILE=&quot;$(dirname $0)/logs/runbackup-$(date +&#39;%m-%d-%Y&#39;).log&quot;</div><div> </div><div># Set to the file that contains backup exclusions (format = line separated paths)</div><div>EXCLUDES=&quot;$(dirname $0)/excludes&quot;</div><div> </div><div># Set to the NFS mount point</div><div># Be sure to configure /etc/fstab appropriately</div><div>NFS_DIR=&quot;$(dirname $0)/remote&quot;</div><div> </div><div># Set to test string for testing NFS mount success</div><div>NFS_MOUNT_TEST=&quot;^//bigspace.*/this_system_dn&quot;</div><div> </div><div># Set to the remote backup container directory</div><div># Backups will be stored in subdirectories of this directory</div><div>BACKUP_DIR=&quot;${NFS_DIR}&quot;</div><div> </div><div># Set to the email address that will receive notifications</div><div># of backup failures</div><div>ERROR_EMAIL_ADDR=&quot;<a href="mailto:admin@example.com">admin@example.com</a>&quot;</div><div> </div><div># Set to the list of switches you want passed to Duplicity</div><div># Add &#39;--time-separator .&#39; if using an old version of Duplicity</div><div>DUPLICITY_SWITCHES=&quot;-v4 --no-encryption --exclude-globbing-filelist ${EXCLUDES} --exclude-other-filesystems --volsize 150 --full-if-older-than 30D&quot;</div><div> </div><div> </div><div>### Begin actual script ###</div><div> </div><div>function notify {</div><div>  mail -s &quot;Backup failure on $(hostname)&quot; ${ERROR_EMAIL_ADDR} &lt; ${LOG_FILE}</div><div>}</div><div> </div><div># Turn on bsfl logging support</div><div>LOG_ENABLED=&quot;yes&quot;</div><div> </div><div># We need to be root to 1) read all files and 2) mount the NFS</div><div>USER=$(whoami)</div><div>if [ &quot;${USER}&quot; != &quot;root&quot; ]; then</div><div>  notify</div><div>  die 2 &quot;Backup must be run as root.&quot;</div><div>fi</div><div> </div><div>log &quot;Mounting NFS&quot;</div><div>mount ${NFS_DIR}</div><div> </div><div>NFS_MOUNTED=$(cat /proc/mounts | grep ${NFS_MOUNT_TEST})</div><div>if [ ! $? -eq 0 ]; then</div><div>  notify</div><div>  umount ${NFS_DIR}</div><div>  die 3 &quot;Could not mount remote share.&quot;</div><div>fi</div><div> </div><div># Let&#39;s make sure we have enough room on the remote system</div><div>STAT_INFO=$(stat -f --format=&#39;%b %a %S&#39; ${NFS_DIR})</div><div>TOTAL_BLOCKS=$(echo ${STAT_INFO} | awk &#39;{print $1}&#39;)</div><div>FREE_BLOCKS=$(echo ${STAT_INFO} | awk &#39;{print $2}&#39;)</div><div>BLOCK_SIZE=$(echo ${STAT_INFO} | awk &#39;{print $3}&#39;)</div><div># (1024bytes * 1024kilobytes) / (x bytes) = (1 megabyte [in bytes]) / (x bytes)</div><div># =&gt; number of blocks in 1 megabyte = y</div><div>REMOTE_FREE_BYTES=$(echo &quot;${FREE_BLOCKS} / (1048576 / ${BLOCK_SIZE})&quot; | bc -l)</div><div>log &quot;Remote free bytes = ${REMOTE_FREE_BYTES}&quot;</div><div> </div><div>STAT_INFO=$(stat -f --format=&#39;%b %a %S&#39; /)</div><div>TOTAL_BLOCKS=$(echo ${STAT_INFO} | awk &#39;{print $1}&#39;)</div><div>FREE_BLOCKS=$(echo ${STAT_INFO} | awk &#39;{print $2}&#39;)</div><div>BLOCK_SIZE=$(echo ${STAT_INFO} | awk &#39;{print $3}&#39;)</div><div>LOCAL_USED_BYTES=$(echo &quot;(${TOTAL_BLOCKS} - ${FREE_BLOCKS}) / (1048576 / ${BLOCK_SIZE})&quot; | bc -l)</div><div>log &quot;Local used bytes = ${LOCAL_USED_BYTES}&quot;</div><div> </div><div>REMOTE_HAS_ROOM=$(echo &quot;${REMOTE_FREE_BYTES} &gt; ${LOCAL_USED_BYTES}&quot; | bc -l)</div><div>if [ ${REMOTE_HAS_ROOM} -eq 0 ]; then</div><div>  log_error &quot;Remote system does not have enough free space for the backup.&quot;</div><div>  notify</div><div>  umount ${NFS_DIR}</div><div>  die 4 &quot;Remote system does not have enough free space for the backup.&quot;</div><div>else</div><div>  log &quot;Remote system has enough room. Proceeding with backup.&quot;</div><div>  log &quot;===== ===== ===== =====&quot;</div><div>  log &quot;&quot;</div><div>fi</div><div> </div><div># Send today&#39;s delta over</div><div>duplicity ${DUPLICITY_SWITCHES} / file://${BACKUP_DIR} 2&gt;&amp;1 1&gt;&gt;${LOG_FILE}</div><div> </div><div># Remove unnecessary data over 6 days old</div><div>duplicity remove-older-than 6D --force ${DUPLICITY_SWITCHES} file://${BACKUP_DIR} 2&gt;&amp;1 1&gt;&gt;${LOG_FILE}</div><div> </div><div>log &quot;&quot;</div><div>log &quot;===== ===== ===== =====&quot;</div><div>log &quot;Backup complete.&quot;</div><div> </div><div>umount ${NFS_DIR}</div></div><div>````<br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 21, 2015 at 1:21 PM, Edward Holcroft <span dir="ltr">&lt;<a href="mailto:eholcroft@mkainc.com" target="_blank">eholcroft@mkainc.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div style="font-size:small">I&#39;m trying without encryption. It still seems the same, not constant hard drive i/o going on. Will let it run for a while and see what happens.</div><div style="font-size:small"><br></div><div style="font-size:small">ed</div></div></blockquote></div><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>James Sumners<br><a href="http://james.sumners.info/" target="_blank">http://james.sumners.info/</a> (technical profile)</div><div><a href="http://jrfom.com/" target="_blank">http://jrfom.com/</a> (personal site)</div><div><a href="http://haplo.bandcamp.com/" target="_blank">http://haplo.bandcamp.com/</a> (band page)</div></div></div></div></div>
</div></div></div>