ccollect - Restoring backups
============================
Nico Schottelius <nico-ccollect__@__schottelius.org>
0.1, for all ccollect version, Initial Version from 2008-07-04
:Author Initials: NS


Having backups is half the way to success on a failure.
Knowing how to restore the systems is the other half.


Introduction
------------
You made your backup and now you want to restore your
data. If you backuped only parts of a computer and need
only to restore them, it is pretty easy to achieve.
Restoring a whole system is a little bit more
difficult and needs some knowledge of the operating system.


Restoring parts of a system
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Log into your backupserver. Change into the 
backup directory you want to restore from.
Do `rsync -av './files/to/be/recovered/' 'sourcehost:/files/to/be/recovered/'.

Restoring a complete system (general)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Boot the system to be rescued from a media that contains low level tools
for your OS (like partitioning, formatting) and the necessary tools
(ssh, tar or rsync).
Use 
- create the necessary partition table (or however it is called

Get a live-cd, that ships with
- rsync / tar
- ssh (d) -> from backupserver
- support for the filesystems

Restoring a complete FreeBSD system
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Get a FreeBSD-live-cd (I used the FreeBSD 7.0 live CD,
but FreeSBIE (http://www.freesbie.org/),
Frenzy (http://frenzy.org.ua/en/) or the
FreeBSD LiveCD (http://livecd.sourceforge.net/)
may also be helpful. The following way uses the FreeBSD 7.0
live cd.

So boot it up, select your language. After that select
*Custom* then *Partition*. Create the slice like you want
to have it. Then let the installer write into the MBR,
select *BootMgr*.

After that create the necessary labels, select *Label* and
make sure "Newfs" flag is set to "Y".

Finally, select *Commit* and choose an installation type
that must fail, because we want the installer only to write
the partitions and labels, but not to install anything on it.

At this point we have created the base for restoring the whole
system. Move back to the main menu and select *Fixit*, then
*CDROM/DVD*. This starts a shell on TTY4, which can be reached
by pressing *ALT+F4*. Then enter the following data:

--------------------------------------------------------------------------------
   rootdir=/ccollect
   rootdev=/dev/ad0s1a
   backupserver=192.42.23.5

   # create destination directory
   mkdir "$rootdir"

   # mount root; add other mounts if you created more labels
   mount "$rootdev" "$rootdir"

   # find out which network devices exist
   ifconfig

   # create the directory, because dhclient needs it
   mkdir /var/db

   # retrieve an ip address
   dhclient fxp0

   # test connection
   ssh "$backupserver"

   # go back
   backupserver% exit
--------------------------------------------------------------------------------

Now we've prepared everything for the real backup. The next problem maybe,
that we cannot (should not) be able to login as root to the backup server.
Additionally the system to be restored may not reachable from the backup server,
because it is behind a firewall or nat.
Thus I describe a way, that is a little bit more complicated for those, that
do not have these limitations, but works in both scenarios.

I just start netcat on the local machine, pipe its output to tar and put
both into the background. Then I create a ssh tunnel to the backupserver,
which is then able to connect to my netcat "directly".

--------------------------------------------------------------------------------
   # user to connect to the backupserver
   myuser=nico

   # our name in the backup
   restorehost=server1

   # the instance to be used
   backup="weekly.20080718-2327.23053"

   # Need to setup lo0 first, the livecd did not do it for me
   ifconfig lo0 127.0.0.1 up

   # change to the destination directory
   cd "$rootdir"
   
   # start listener
   ( nc -l 127.0.0.1 4242 | tar xvf - ) &

   # verify that it runs correctly
   sockstat -4l

   # connect as a normal user to the backupserver
   ssh -R4242:127.0.0.1:4242 "$myuser@$backupserver"

   # become root
   backupserver% su -

   # change to the source directory
   backupserver# cd /home/server/backup/$restorehost/$backup

   # begin the backup
   backup # tar cf - . | nc 127.0.0.1 4242

   # wait until it finishes, press ctrl-c to kill netcat
   # logoff the backupserver
   backupserver# exit
   backupserver% exit
--------------------------------------------------------------------------------

Now we are just right next to be finished. Still, we have to take care about
some things:

- Do the block devices still have the same names? If not, correct /etc/fstab.
- Do the network devices still have the same names? If not, correct /etc/rc.conf.

If everything is fixed, let us finish the restore:

--------------------------------------------------------------------------------
   # cleanly umount it
   umount "$rootdir"
   
   # reboot, remove the cd and bootup the restored system
   reboot
--------------------------------------------------------------------------------

Restoring a complete Linux system
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Knoppix
   knoppix 2 at boot prompt

   rootdir=/ccollect
   dev=/dev/hda
   rootdev="${dev}1"
   fs=jfs
   tar

   # create the needed partitions
   cfdisk $dev

   mkfs.$fs $rootdev

   mkdir $rootdir

   mount $rootdev $rootdir

   cd $rootdir

   pump
   ifconfig

   # start listener (from now on it is the same as 
   ( nc -l 127.0.0.1 4242 | tar xvf - ) &



TO BE DONE

Future
------
I think about automating full system recoveries in the future.
I think it could be easily done and here are some hints for
people who would like to implement it.
