<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MentorMate Company Blog&#187; IT Archives  | MentorMate Company Blog</title>
	<atom:link href="http://mentormate.com/blog/category/it/feed/" rel="self" type="application/rss+xml" />
	<link>http://mentormate.com/blog</link>
	<description></description>
	<lastBuildDate>Thu, 12 Aug 2010 14:59:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>MentorMate&#8217;s Backup Script</title>
		<link>http://mentormate.com/blog/mentormates-backup-process/</link>
		<comments>http://mentormate.com/blog/mentormates-backup-process/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 21:37:04 +0000</pubDate>
		<dc:creator>Doug</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://mentormate.com/blog/?p=256</guid>
		<description><![CDATA[Backups are important and automated backups help reduce error by removing the human component.  Of course it is always good to check in and make sure that everything is working properly, and audit your systems periodically to see if you need to add anything new to your backup.  MentorMate uses a script with a few simple tools to get all important information in one place and make redundant onsite and offsite backups of it.]]></description>
			<content:encoded><![CDATA[<h2>Overview</h2>
<p>The script starts by creating a copy of all of the important information in a staging area.  Keeping the staging area intact will help speed up the backup after it has been run once since rsync is used for most of the copying.  After the staging area is updated, we use rdiff-backup as our incremental backup system.  The rdiff-backup repository can then be copied to other local and offsite locations to increase reduncancy in the backup.  The output is sent by email every time the backup runs, so we are automatically updated on its status, and can correct any errors that may have taken place.</p>
<h2>Relevant Tools</h2>
<p>Following is a description of the tools that are used to back up our data, as well as some of the tools that are holding out data.  Different sets of data must be backed up in different was in order to maximize efficiency and reliability.</p>
<h3>Hardware</h3>
<p>We use a mixture of standard desktop hardware, server hardware, and virtual dedicated servers for our infrastructure.  Services requiring reliability are all run on the virtual dedicated servers providing uptime guarantees.  All of our backups are gathered and stored on two local computers, each with a raid 1 array, and copied to an offsite computer.</p>
<h3>Bash</h3>
<p><a href="http://www.gnu.org/software/bash/manual/bashref.html">http://www.gnu.org/software/bash/manual/bashref.html</a></p>
<p>Bash is an interactive shell and a scripting language that is installed by default on Linux, and can be configured on many other operating system.  We use it for the backup system because it is easy to call other programs that are already designed to do a lot of the work that we need to do for the backup.  This gets us a full backup in less than 100 lines of code.  The small amount of code makes it easy to proof read and test for errors.</p>
<h3>Rsync</h3>
<p><a href="http://samba.anu.edu.au/rsync/">http://samba.anu.edu.au/rsync/</a></p>
<p>Rsync is a very common program for copying data from one location to another when bandwidth can be limited, or when large amounts of data must be copied.  It first checks if the file exists in the destination, and, if it does exist, makes sure that it is that same file.  If the file already exists, and is up to date, the file is not copied.  For our backup, this saves a lot of time since there is generally only a small amount of files that change.</p>
<h3>Rdiff-Backup</h3>
<p><a href="http://rdiff-backup.nongnu.org/">http://rdiff-backup.nongnu.org/</a></p>
<p>After the staging area has been updated, we use rdiff-backup to keep track of 10 days of history.  rdiff-backup copies files from the source to an rdiff-backup repository.  Instead of deleting files that have been removed and overwriting files that have changed, it stores a backup of any changes.  It is possible to go into the repository later and restore any version that has not been removed.</p>
<h3>OpenVZ</h3>
<p><a href="http://wiki.openvz.org/">http://wiki.openvz.org/</a></p>
<p>OpenVZ allows us to quickly and easily set up new virtualized environments, known as containers.  OpenVZ containers are not fully virtualized, so they do not require as many resources as traditional virtual machines.  Our OpenVZ containers are used to quickly and easily set up testing environments, and to provide some of our services within our office that do not have the uptime requirements of the services running on the offsite virtual dedicated servers.</p>
<h3>Logical Volume Management</h3>
<p><a href="http://tldp.org/HOWTO/LVM-HOWTO/">http://tldp.org/HOWTO/LVM-HOWTO/</a></p>
<p>Logical Volume Management (LVM) is an abstraction layer between the hard drive and the partitions and filesystems on that hard drive.  One or more hard drives or partitions, known as physical volumes in LVM language, can be combined into a volume group.  The volume group can then be divided into multiple logical volumes, which behave like partitions and can be formatted like a normal partition would be.  There are many features in LVM that provide an advantage over normal partition management including resizing partitions and volume groups while the filesystems are mounted, moving the logical volumes from one physical drive to another, also while the filesystems are mounted, and many other management tasks.  Our backup script takes advantage of the ability to create a snapshot of a filesystem.  A snapshot creates another logical volume that is an image of the first logical volume frozen in time.  Any changes that are made to the files on the original logical volume will be stored in the extra space at the end of the volume group that is dedicated to the snapshot when the snapshot is created.  Business can continue as normal as we create a backup from a consistent set of files where we no longer need to worry about someone writing to the files while we are backing them up.</p>
<h3>MySQL</h3>
<p><a href="http://www.mysql.com/">http://www.mysql.com/</a></p>
<p>MySQL is a database that comes with it&#8217;s own set of backup tools to ensure that you get a consistent copy of the database.  Mysqldump locks the database when necessary to make sure that it does not make a copy of the database when some other program is in the middle of making a change to the database.</p>
<h3>Subversion</h3>
<p><a href="http://subversion.apache.org/">http://subversion.apache.org/</a></p>
<p>Subversion is a version control system.  We use it for all of our development projects to ensure that each team of developers is working with the most recent version of the code.  Because all of our projects use subversion, we have built up a large collection of code that would take a long time to fully back up each day.  We use subversion tools along with some bash scripting to compare the most recent version of the code in version control with the version that we last backed up, and only back up the changes.</p>
<h3>Grep, Sed, and Others</h3>
<p><a href="http://linuxmanpages.com/">http://linuxmanpages.com/</a></p>
<p>There are many other tools used throughout the script.  The two biggest examples are grep, a regular expression program, and sed, a stream editor which takes some input and changes it as specified.  If you want to know more about any of these tools, you can look them up in the Linux manual pages, or you can find more information on them using your favorite search engine.</p>
<h2>Variables</h2>
<p>﻿Following are the variables that are used in this script.  Some of the values have been changed for security reasons.</p>
<pre class="brush: plain;"># space seperated list of servers that have openvz and lvm set up
CONTAINER_SERVERS=&quot;fox walrus&quot;
# server to put a second copy of the backup on, located in MN
SECONDARY_BACKUP=&quot;walrus&quot;
# offsite server
OFFSITE_BACKUP=&quot;offsite.server.com&quot;
# Location on the openvz servers where the lvm snapshot of the openvz partition is mounted
SRC=&quot;/vzsnap/&quot;
# Location on the main backup server to collect all files
STAGING=&quot;/backup/staging/&quot;
# Location of the rdiff-backup repository
RECENT=&quot;/backup/recent_backup/&quot;
# Location on the second server for a copy of the rdiff-backup repository
SECOND_RECENT=&quot;/backup/recent_backup/&quot;
# Location on the offsite server for a copy of the rdiff-backup repository
OFFSITE_RECENT=&quot;/home/backup/recent_backup/&quot;
# Command locations
LVCREATE=/sbin/lvcreate
LVREMOVE=/sbin/lvremove
VZLIST=/usr/sbin/vzlist
VZCTL=/usr/sbin/vzctl</pre>
<h2>OpenVZ Containers</h2>
<pre class="brush: plain;"># containers
echo &quot;Staging Containers&quot;
for host in $CONTAINER_SERVERS
do
   containerlist=`ssh $host $VZLIST -aH -o veid`
   for container in $containerlist
   do
      echo &quot;Backing up $container from $host&quot;
      ssh $host $LVCREATE -L2G -s -n vzsnap /dev/filestore/vz &gt; /dev/null

      # check if the container is running
      run=&quot;`ssh $host vzlist | grep --only-matching $container`&quot;
      if [ &quot;$run&quot; == &quot;$container&quot; ]
      then
         # check if mysql server is running inside the container
         if [ -f /vz/private/$container/etc/init.d/mysql ]
         then
            ssh $host &quot;vzctl exec $container 'if [ -f /var/run/mysqld/mysqld.pid ]; then echo mysql is running; echo /var/run/mysqld/mysqld.pid &gt; /mysqld.pid; fi'&quot;
            if [ -f /vz/private/$container/mysqld.pid ]
            then
               pass=&quot;`ssh $host cat /vz/private/$container/etc/mysql/debian.cnf | grep --max-count=1 password | sed 's/^password = //'`&quot;
               user=&quot;debian-sys-maint&quot;
               ssh $host vzctl exec $container mysqldump --user=$user -p$pass --all-databases &gt; /backup/staging/$container.dump
               ssh $host vzctl exec $container rm /mysqld.pid
            fi
         fi
      fi

      ssh $host mkdir -p $SRC
      ssh $host mount /dev/filestore/vzsnap $SRC
      rsync -a --delete root@$host:$SRC/private/$container $STAGING/
      rsync -a root@$host:$SRC/etc/vz/conf/$container.conf $STAGING/
      ssh $host umount $SRC
      ssh $host $LVREMOVE /dev/filestore/vzsnap --force &gt; /dev/null
      ssh $host rmdir $SRC
   done
done</pre>
<p>For each server that is running OpenVZ containers, we want to make a full backup of each of the containers.</p>
<ol>
<li>We use LVM to create a snapshot of the filesystem.  This gives us a version of the files that we can copy that is consistent with itself at a given point in time.</li>
<li>In the case that MySQL is running in the container, we want to make sure that we do not get a corrupt copy of the database just in case it was in the middle of a commit when the LVM snapshot was taken.  For this, we will use the standard MySQL backup tool mysqldump.  This will also allow us to easily examine an old version of the database without fully restoring the entire container.</li>
<li>Finally, we copy the configuration for the container, and all of the files within the container.</li>
</ol>
<p>This will give us enough to restore any of our containers to the point at which the backup was taken.</p>
<h2>Version Control (SVN)</h2>
<pre class="brush: plain;">echo &quot;Staging Source Control&quot;
REPOS=`ssh scm.mentormate.com ls /files/repo/svn/`
echo $REPOS
for repo in $REPOS
do
   echo &quot;processing svn repo $repo&quot;
   head=`svn info svn+ssh://scm.mentormate.com/files/repo/svn/$repo/ | grep &quot;^Revision: .*&quot; | sed 's/^Revision: //'`
   curfile=$STAGING/svn.$repo.lastversion
   # check if there is currently a backup of the repo
   if [ -f $curfile ]
   then
      # if yes, read the last saved file
      current=`cat $curfile`
   else
      # if no, start from the beginning
      current=0
   fi
   if [ $current -lt $head ]
   then
      if [ $current -ne 0 ]
      then
         current=$(( $current + 1 ))
      fi
      padcurrent=`printf &quot;%05d&quot; $current`
      padhead=`printf &quot;%05d&quot; $head`
      # take incremental backup
      ssh scm.mentormate.com svnadmin dump -r$current:$head --incremental /files/repo/svn/$repo | gzip --best &gt; $STAGING/svn.$repo.$padcurrent-$padhead.dump.gz
      echo &quot;$head&quot; &gt; $curfile
   else
      echo &quot;$repo does not have any changes&quot;
   fi
done</pre>
<p>We use subversion for version control.   It&#8217;s very easy to dump a full backup of a subversion repository, but when the repositories get large, this can start to take a lot of time and bandwidth.  It is better to only back up the new revisions.</p>
<ol>
<li>Get a list of all subversion repositories</li>
<li>The head is the version that was most recently committed to the repository.  This can be obtained by checking the svn info.</li>
<li>The head that we backed up the last time that we made a backup was saved to a file.  This will give us a range for the last backup that we made to the current head.</li>
<li>An incremental backup is taken of only the new revisions, and the current head is written to a file.  The filename will tell us which revisions were backed up.</li>
</ol>
<p>When restoring this, the files can be combined and loaded into a new repository, or they can be loaded into a new repository one after the other.  If you decide that there are too many files for one repository, you can simply delete all of the files for that repository, including the last revision file, from the staging area, and a full backup will be taken the next time the backup script runs.</p>
<h2>Backup Router Configuration</h2>
<pre class="brush: plain;">wget -q https://192.168.1.1/diag_backup.php --post-data 'Submit=Download' --no-check-certificate --http-user=admin --http-password=&quot;**********&quot; --output-document=$STAGING/pfsense.xml</pre>
<p>We use pfSense for our router software.  This allows us great flexibility at a very low cost.  pfSense has a web page with a button for downloading the configuration file.  Wget can be set to send the appropriate information to request the configuration file.  In the event that the router hardware fails, we can quickly install pfSense on new hardware, and load the configuration.</p>
<h2>Crontab from the Backup Server</h2>
<pre class="brush: plain;">crontab -l &gt; $STAGING/crontab.`hostname`</pre>
<p>If our main backup server goes down, we want to make sure that we know everything that it was doing.  All of our important backups jobs run as a single user, so we only need to get one crontab here.</p>
<h2>Staging to Incremental Backup</h2>
<pre class="brush: plain;">rdiff-backup $STAGING/ $RECENT/
rdiff-backup --remove-older-than 10B $RECENT/</pre>
<p>Now that we have everything in the staging area, we want to copy it to a more long term location.  We will do this using rdiff-backup, which will store multiple revisions of our files without making a full copy of each one.  We then need to remove old revisions of the files so that the repository does not get too large.  In this case, we keep 10 versions of the files.</p>
<h2>Offsite Backup</h2>
<pre class="brush: plain;">rsync -azq --delete $RECENT/ $SECONDARY_BACKUP:$SECOND_RECENT/
rsync -azq --delete --bwlimit=10 $RECENT/ user@$OFFSITE_BACKUP:$OFFSITE_RECENT/</pre>
<p>The final step is to make sure that we have multiple copies of our big backup.  The rdiff-backup repository is copied to a second onsite server, for easy restore in the event of hardware failure on the backup machine, and an offsite server.</p>
<h2>Conclusion</h2>
<p>By gathering all of our information into one place, then taking an incremental backup and sending that to remote servers, we have easily created a backup script that stores incremental versions of all of our important data in one place.</p>
]]></content:encoded>
			<wfw:commentRss>http://mentormate.com/blog/mentormates-backup-process/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is the Google Chrome Browser faster than Internet Explorer in JavaScript performance?</title>
		<link>http://mentormate.com/blog/google-chrome-browser-faster-internet-explorer-javascript-performance/</link>
		<comments>http://mentormate.com/blog/google-chrome-browser-faster-internet-explorer-javascript-performance/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 17:38:52 +0000</pubDate>
		<dc:creator>Georgi</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://mentormate.com/blog/?p=259</guid>
		<description><![CDATA[On November 19, 2009 Google announced their open source Chrome operating system built around the core tenets of speed, simplicity and security. The presentation started with a slide showing the increasing number of Chrome users – the browser that is used as a base in their OS. The slide also stated that Chrome has “39x faster JavaScript than Internet Explorer.” Is it really that much faster or faster at all? Will their built from scratch “V8 JavaScript Engine”  outplay the latest version of the Microsoft browser and will it work almost 40 times faster?]]></description>
			<content:encoded><![CDATA[<h2>JavaScript Speed in Google Chrome versus Internet Explorer</h2>
<p>The latest stable version of Chrome browser at the time this article was written was 3.0.195.33. We will compare it to the current version of IE, which is 8.0.6001.18865. We started with Google’s own benchmark that is hosted at their site and is called <a href="http://v8.googlecode.com/svn/data/benchmarks/current/run.html" target="_blank">V8 Benchmark Suite</a>.  The result differed from one machine to another, but the score of the Google browser was always about 38 times higher than the one of IE – very close to the numbers that Google is claiming. Of course, as much we believe in the accuracy of the tests, we wanted to use some independent benchmarking sites, too. After some research, we found some of the major ones are <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html" target="_blank">SunSpider JavaScript Benchmark</a> and <a href="http://jsbenchmark.celtickane.com/" target="_blank">JSBenchmark</a>. Their tests are a complex mixture of different tasks, including drawing, code decompression, encrypting and operations with arrays, dates and handling exceptions. As we expected, the difference between the two browsers was much smaller compared to Google’s own test, but it was again pretty impressive. The results differed from platform to platform, but overall the “SunSpider” test showed that Chrome is ten times faster, while the “JSBenchmark” reported that it is “only” seven times faster.</p>
<h2>JavaScript Speed Test</h2>
<p>In order to conclude that Internet Explorer is much slower than Google Chrome in JavaScript performance though, we still needed more facts. As an alternative to the complex and heavy testing suites, we created a very short example with few array operations. We wanted it to be fairly simple and pretty close to real life examples. Basically, this piece of code assigned random numbers to an array of 20,000 items. Then we reversed the order of the elements. In the next two steps we sorted it in ascending and descending order. The script outputs the milliseconds needed for its completion. We did not expect a lot of difference in doing something so basic. Here is the code:</p>
<h2>JavaScript Speed Test Source Code</h2>
<pre class="brush: plain;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
    &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot; /&gt;
		&lt;title&gt;MentorMate JavaScript simple speed test&lt;/title&gt;
		&lt;script type=&quot;text/javascript&quot;&gt;
			&lt;!--
			function testStart() {
				var mySampleNumbers = new Array();
				var now;
				var start_time_mill;
				var end_time_mill;

				//gets the start date
				now = new Date();
				start_time_mill = now.getTime();

				//assigning random numbers to an array of 20 thousand items
				for (i=0;i&lt;=20000;i++) {
					mySampleNumbers[i] = Math.random();
				}

				//reverse the order of the elements in an array
				mySampleNumbers.reverse();

				//sort the numbers (ascending)
				mySampleNumbers.sort(sortAsc);

				//sort the numbers (descending)
				mySampleNumbers.sort(sortDesc);

				//gets the end date
				now = new Date();
				end_time_mill = now.getTime();
				displayResult(end_time_mill - start_time_mill);
			}
			function sortAsc(m, n) {
				if (m &gt; n) {
					return 1;
				}
				else if (m &lt; n) {
					return -1;
				}
				else {
					return 0;
				}
			}
			function sortDesc(m, n) {
				if (m &gt; n) {
					return -1;
				}
				else if (m &lt; n) {
					return 1;
				}
				else {
					return 0;
				}
			}
			function displayResult(result) {
				alert(&quot;Result: &quot; + result + &quot; ms.&quot;);
			}
			// --&gt;
		&lt;/script&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;form action=&quot;&quot;&gt;
			&lt;p&gt;
				&lt;input type=&quot;button&quot; value=&quot;Start&quot; onclick=&quot;testStart()&quot; /&gt;
			&lt;/p&gt;
		&lt;/form&gt;
	&lt;/body&gt;
&lt;/html&gt;
</pre>
<h2>JavaScript Speed Test Results</h2>
<p>There were differences from PC to PC as with the other tests, but the tendency stayed the same. The time of completion of the tasks in Chrome was about six times faster than IE. This was the smallest advantage the Google browser had compared to the tests that were run so far, but it sounds pretty prestige for Chrome to have such a boost in performance for a really small task.</p>
<p>In conclusion, we can say that Google Chrome has set new standards for speed as far as JavaScript is concerned. Although the advantage the browser has might not be as big as Google claim in their advertising campaigns, it is something very impressive and gives the users additional speed for simple everyday tasks as we saw in the example above. We are looking forward to see the ninth version of Internet Explorer soon, as in the early discussions the developers show ambition to reach the level of performance that Chrome already has. The acceleration of the JavaScript engines for all the browsers can only bring benefits to users and contribute to the creation of richer, more complex Internet applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://mentormate.com/blog/google-chrome-browser-faster-internet-explorer-javascript-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Secure Data Backup and Recovery Best Practices</title>
		<link>http://mentormate.com/blog/backups/</link>
		<comments>http://mentormate.com/blog/backups/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 13:53:50 +0000</pubDate>
		<dc:creator>Doug</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://mentormate.com/blog/?p=72</guid>
		<description><![CDATA[Why make backups? There are many reasons, and it is important to keep them all in mind when you are creating your backup system. Different types of disasters require different methods of recovery.]]></description>
			<content:encoded><![CDATA[<p><strong>Reasons to backup:</strong></p>
<ul>
<li>Hardware Failure, hard drives and other computer components fail regularly.</li>
<li>Destruction of your site, fire or flooding.</li>
<li>Accidental data loss, somebody unintentionally deletes one or more files.</li>
<li>Software error, a software error could corrupt one or more of your files.</li>
</ul>
<h1>The difference between backup and redundancy</h1>
<p>Most modern servers use RAID for redundancy.  This usually means that when you put something on the server, it gets written to two hard drives.  In the event that one hard drive goes down, you can replace it with no disruption to service.  This is an example of redundancy, and will help protect you against a very specific type of failure.  Some systems, like Google, will have multiple servers, allowing an entire server to go down without disruption to service.  It is important to have redundancy so that services to your company or to your clients are not disrupted, but it is not a replacement for backups.</p>
<p>Backups involve creating a second copy of your data.  Often times, multiple backups from different points in time will be maintained.  Restoring a backup takes time, and can result in disruption of service.  Backups help protect from user errors like accidental deletion and software errors that could corrupt data.  Having more than one copy of your files is very important for recovery from these errors.</p>
<h1>What to backup</h1>
<h2>Email</h2>
<p>If you host your own email, this is probably one of the most important things to backup.  If your email is hosted, see if you can backup your email, or see what your provider is doing to backup your email.</p>
<h2>Document Management System</h2>
<p>If you have a document management system or some other type of server that you store your files on, this is also a very important group of files to back up.</p>
<h2>Desktops</h2>
<p>If you have a lot of people, it can be very difficult to back up each desktop that you have.  A better solution is to make sure that all important files are stored on a server so you only need to back up a single server.  You should have a plan in place for what happens when a desktop goes down in order to reduce the impact on the productivity of the person who was using it.</p>
<h2>Web Application Data</h2>
<p>If your website collects data, or if you have any web applications that collect data, make sure that you back up the databases and other information stores.  SQL databases have backup programs that can be run.  You can set your operating system to run the backup regularly.  Also, if there is space where users can upload files, make sure to back up the files as well.</p>
<h2>Custom Software</h2>
<p>Custom software can be expensive to develop.  Make sure that you have a backup of any custom software that you have had built so that you can easily deploy it again if you need to.</p>
<h2>Information in &#8220;The Cloud&#8221;</h2>
<p>You may have documents or other information that is hosted on the internet.  If at all possible, you should take your own backups.  If you cannot take your own backups, how reliable is the service provider?  Think carefully about each of the services that you are subscribed to.  These could be Salesforce, Google Docs, email providers, Online stores (do you need your amazon.</p>
<h2>Any other products that are generated</h2>
<p>Each company produces different types of products.  Make sure that you go through the list of products that you have and ask yourself what would happen and how you would recover if you lost some data.  Make sure to think about digital components that are created to support physical products.</p>
<h1>How</h1>
<p>The number of backup programs that exist and techniques that are available are too numerous to count, so I will only cover a few concepts.</p>
<h2>Important Concepts</h2>
<h3>Local and Offsite</h3>
<p>It is a good idea to have a copy of your data locally and a copy of your data offsite.  The offsite backup is important in the event that your office is destroyed.  The location of the offsite backup could also be destroyed, so having an onsite backup will help protect you against that.  Another reason to keep an onsite backup is that if you need to restore an item, the backup is immediately available.</p>
<h3>Automated Vs. Manual</h3>
<p>Human memory is flawed, people take vacations and sick time, and staffing changes.  If your backup is automated, these events will have a smaller impact on your backup system.  An automated backup system can grab all of your data every night, and push it to an offsite location over the internet or a T1 pipe.  There may be parts of the backup that must be done manually, like changing media, or a few parts of the backup that are difficult to automate, but the more automatic it is, the better.  Still, make sure to check it periodically to make sure that it is still taking the backup and you are not getting errors.</p>
<h3>Backup Media</h3>
<p>Depending on how much you need to back up, you may want different types of media.  Tape drives are popular for large quantities of data.  CD or DVD media is a cheap way to back up small amounts of data, but make sure that you get high quality media, and check it from time to time to make sure that it is not deteriorating.  Hard drives are very convenient since they are rewritable.  Keep in mind that hard drives fail.  Using RAID for redundancy is a good way to help protect yourself from hard drive failure.</p>
<h3>Ensure it works</h3>
<p>After you have created your backup system and are making sure that it runs, make sure to test it by restoring data from the backup.  If you cannot restore a backup, it is not really a backup.</p>
<h3>Security</h3>
<p>If you are backing up confidential or sensitive data, make sure that the backup is at least as secure as the data that you are backing up.  A compromised backup is just as bad as the data being compromised since you have a copy of everything.  If the backup is encrypted, make sure that enough people have the key, and that the key is backed up somewhere.  If you encrypt the data and lose the key, you lose the backup.</p>
<h3>Organization</h3>
<p>Make sure that you always know what backup is current, what backup is old, and when you&#8217;ve taken the backups.  Your software may take care of this for you.  If it does not, putting dates on the folders, or a file with the information within the folder can be good ways to keep organized.  You also need to know where it is going and how to restore it.  Make sure that this is documented in case the person who built the backup is not available when a restore is needed.  You can also streamline the backup process by making sure that the files that need backing up are organized in as few places as possible.</p>
<h3>Human Redundancy</h3>
<p>Make sure that multiple people know where the backup is and how to restore it.  It is a good idea to have some documentation on the backup system, how the backups are created, any manual steps and when they need to be performed, and how to restore each component of the backup, either fully or partially.</p>
<h2>Software</h2>
<h3>Virtual Machines</h3>
<p>Virtual machines typically have a way to make a copy of the entire machine.  This can be taken advantage of to backup an entire system from all of the software that is in stalled to the data files that are on the machine.</p>
<h3>rsync and rdiff-backup</h3>
<p>rsync is used to copy files from one place to another, optionally over the network or internet.  All data transfers are encrypted.  When files are copied, only the files that have changed are copied, reducing the amount of bandwidth required for most cases.  rdiff-backup is similar, but it will keep incremental backups making it so that you can revert to a previous version of your backup.  To save space, files are only saved twice if they have changed.</p>
<h3>dd</h3>
<p>dd can make a copy of a hard drive.  This can be used to make an image of your operating system hard drive from time to time.  If you ever need to restore, you can reload the image to the drive, and all of your software will be ready to go.</p>
<h3>Others</h3>
<p>There is enough backup software out there that I could not hope to cover all of it.  Look at your needs and find the group of software that fills your needs.</p>
<h1>Conclusion</h1>
<p>Make sure you think carefully about why you are backing up your data.  Your reasons for backing up your data will have an impact on how you back it up.  What would happen to you or your business if you lost some or all of your files?  Who is going to be able to restore your files?</p>
]]></content:encoded>
			<wfw:commentRss>http://mentormate.com/blog/backups/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
