Difference between revisions of "Affa"
(Level) |
(split page, wiki says it's too large) |
||
Line 663: | Line 663: | ||
=== Additional information === | === Additional information === | ||
− | + | For details of performance, changelog etc see [[:Affa:Additional information]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==== Acronym ==== | ==== Acronym ==== |
Revision as of 03:15, 18 October 2008
Affa for SME Server
Maintainer
Michael Weinberger
Description
The main purpose of this affa package is to make a SME 7 Server a dedicated backup box in a few minutes. Affa backs up as many SME servers as you like or any other servers which have sshd running and rsync installed. Once it is configured, Affa runs reliably unattended and sends warning messages in case of any errors.
All backup archives are full backups, as Affa make use of the hardlink technique. Therefore a new full backup only needs disk space for the differences plus the filesystem overhead for the hardlinks and directories (which is typically 2-3%).
Affa is based on the rsync program and supports the rsync --compress option. This allows you to run backups over the internet or VPN. A typical setup is one or more Affa backup servers placed in different locations, which backup the production server(s) over the VPN.
A special feature is the rise option, which allows you to rise the backup server to your production server from a backup archive in case of a dead loss of your production server. The rise is executed within a extremely short time, even with huge amount of data. The rise feature uses hardlinks and therefore does not use up additional disk space.
Affa is a command line tool for system administrators and is intentionally designed without a GUI. Therefore it can be efficiently managed on the console and over slow internet connections.
Affa features at a glance
- Affa is secure: All transfers and connections are made by using the ssh protocol with public/private key authentication
- Periodically runs unattended full backups. Only differences to the previous full backup are transferred over the network
- Using rsync with optional bandwidth limit and compression allows backups over the internet
- Uses hardlink technique, i.e. physical disk space only needed for the differences between two full backups
- Keeps a configurable number of scheduled, daily, weekly, monthly and yearly full backup archives
- The archives are browseable. No need to unpack them first.
- Backup jobs are started by the cron daemon
- Interrupted jobs continuing with already transfered data when restarted
- Backups the default e-smith directories and files, when property SMEServer is set to yes
- Additional directories and files can be included
- Directories and files can be excluded from the backup
- Non-SME server linux systems can be backed up by setting the SMEServer property to no and using an include list
- Configurable nice level for rsync processes on the backup and source server
- Optional run of custom programs before and after a job run (e.g. running tape backup)
- Checks the disk space left after a job run with warning levels strict, normal or risky
- Extensive checking of failure conditions
- Sends failure messages to a configurable list of email addresses
- Sends a warning message, if the backup server runs out of disk space
- Installs an optional watchdog on the source server in case the backupserver fails
- Watchdog sends warning, if an expected backup did not run
- Watchdog sends a daily reminder message, if the error continues unchecked
- Option to display current status of all jobs showing times of last and next run, size and disk usage
- Status can be mailed on a daily, weekly or monthly schedule
- Option to display all existing archives of a job shown date, size, nbr of files and disk usage
- Option to send (and revoke) the public key to the source server (SME Server only)
- Option to rise the backup server to a production server from a backup. For SME 7 only
- The rise feature does not physically move data and therefore is extremly fast and needs (almost) no extra disk space
- Rise option can be run remotely as the NIC driver configuration of the backup server are preserved
- Compares installed RPMs on source with backup server. Sends warning message, if not in sync
- Undo rise option to restore the backup server
- Configurable via a e-smith style db, with one record for each job and a default record for all jobs
- Logs to /var/log/affa/JOB.log and /var/log/affa/affa.log with optional debug switch for higher verbosity
- Log files are rotated weekly, with 5 logs kept
Installation or Update
/usr/bin/yum install --enablerepo=smecontribs smeserver-affa
When you have installed Affa for the first time run the following command to initialize the Affa database
affa --make-cronjobs
and logout and re-login to the console to take the bash auto-completion (TAB key) in effect.
Quick start example
You have a SME 7 production server with hostname 'prodbox‘ and IP 10.200.48.1.
Set up a second SME 7 box as your backupserver with hostname 'affabox‘ and IP 10.200.48.2.
- log into the 'affabox' and install the packages as described above.
- copy the config helper script sample cp /usr/lib/affa/jobconfig-sample.pl /root/prodbox-job.pl
- edit /root/prodbox-job.pl and set my $jobname='prodbox'; and 'remoteHostName‘=>'10.200.48.1', optionally, if the remote server port is configured to e.g. 2222 then set 'sshPort'=>2222,
- write the configuration (this makes the database entries and sets up the cronjobs) /root/prodbox-job.pl
- generate the DSA keys and send the public key to the 'prodbox'
affa --send-key prodbox
- run the job manually affa --run prodbox
Configuration
The configuration is stored in an e-smith style database. Use the db command to configure Affa.
The jobname is the record key with the type 'job'.
To setup a new job with the name 'prodbox' enter:
db affa set prodbox job
then set the properties
db affa setprop prodbox remoteHostName 192.168.1.1 db affa setprop prodbox TimeSchedule '0030,0730,1130,1330,1730,2030' db affa setprop prodbox Description 'My Production Server' db affa setprop prodbox status enabled
and so on...
Alternatively you can you use a script as described above in the 'Quick start' chapter.
To verify your work, type:
db affa show prodbox
Finally set up the cronjobs:
affa --make-cronjobs
Job configuration properties
Property | Value | Default | Description |
remoteHostName | FQHN or IP | FQHN or IP of the source host (mandatory) | |
TimeSchedule | HHMM,HHMM,... | doesn't need to be ordered. At least one time is mandatory | |
Description | text string | ||
scheduledKeep dailyKeep weeklyKeep monthlyKeep yearlyKeep |
integer >= 1 | 2 7 4 12 2 |
how many of the scheduled, daily, weekly, monthly or yearly backups should be kept |
SMEServer | yes or no | yes | when set to yes the default e-smith directories are automatically included and the property RPMCheck=yes can be used |
Include[0] Include[1] ... |
full path | additional files or directories to include | |
Exclude[0] Exclude[1] ... |
full path | additional files or directories exclude from backup | |
RPMCheck | yes or no | no | Only applicable to jobs that backups a SME 7 server. Compares the packages installation of the source host with this affa backup host. Sends a message with diff list if not in sync. This check is usefull, if you want have the option to rise the backup server to a production server from a backup. |
DiskSpaceWarn | strict or normal or risky or none | strict | run a disk space check after a job has been completed. With level 'strict' a warning message will be sent, if the available space is less then the size of the just completed backup. With level 'normal'/'risky' the message is sent, if less than 50%/10% of the backup size is still available. |
localNice | -19...+19 | 0 | run rsync local process niced. |
remoteNice | -19...+19 | 0 | run rsync process on source niced. |
Watchdog | yes or no | yes | Only applicable to jobs that backups a SME 7 server. When a job is started, affa installs a watchdog script on the source in /etc/cron.d/, which sends a warning message, if the next scheduled job (taken from the TimeSchedule property + 10 minutes) did not run. This guarantees, that you will be notfied even in case of a affa server outage. The watchdog script send a daily reminder message, if the error continues. The next run job replaces the watchdog script with a new trigger time. |
sshPort | service port | 22 | When sshd on the source host or your firewall listen on a non-standard port set the port here. |
ConnectionCheckTimeout | seconds | 120 | before the rsync process is started on the remote source host, affa checks the ssh connection and exits with an error after the configured time, if the host does not respond. |
rsyncTimeout | seconds | 900 | Rsync exits, if no data is transferred for the configured time. This avoids infinitely hanging in case of a network error. |
BandwidthLimit | integer>=0 kilobytes per second | 0 | Limits the data transfer rate. A value of zero specifies no limit. |
rsyncCompress | yes or no | no | compress the transferred data. May be useful with slow internet connections. Increases CPU load on source and backup host. |
EmailAddresses | name@domain.com,name@domain.com,... | admin | comma separated list of mail addresses, where the messages should be sent to Note: By default Affa only sends messages on errors, never on success (see property chattyOnSuccess). |
chattyOnSuccess | integer >= 0 | 0 | when set to a value>0, Affa sends a message on a successfully completed job run and decrements the chattyOnSuccess value. When the value has reached zero, Affa falls back to the default and only sends messages on errors. |
AutomountDevice AutomountPoint |
full path | Device and mountpoint of backup device (e.g. USB disk). Device is automounted before a job starts and unmounted after job completion. With both properties empty no automount is done. | |
AutomountOptions | string | An option string passed to the mount command | |
AutoUnmount | yes or no | yes | When set to 'no' the automounted device stay mounted after the Affa run. |
preJobCommand postJobCommand |
full path | programs (local on the affa server) to be executed before/after a job run. The job name and type (scheduled, daily etc.) are passed as arguments to the program. The exit code is additionally passed to the post job command program. See /usr/lib/affa/ for sample perl scripts. | |
RootDir | full path | /var/affa | where to store the backup archives, Do not use /home/e-smith or /root as these are included in the backup and therefore the rise option will not work! Recommended: /var/affa |
Debug | yes or no | no | set to yes to increase log verbosity |
status | enabled or disabled | enabled | with set to disabled, no cron entries will made. You can still run a job manually. |
rsync--inplace | yes or no | yes | set to no, if the rsync version on the source does not support this option (like rsync on SME6) |
rsync--modify-window | integer >= 0 | 0 | When comparing two timestamps, rsync treats the timestamps as being equal if they differ by no more than the modify-window value. This is normally 0 for an exact match. A value >= 0 is useful if you can't get the clocks of the source and the Affa server in sync. |
rsyncdMode | yes or no | no | set to yes to connect to the rsync daemon on the remote host (instead of running rsync over ssh) |
rsyncdModule | string | AFFA | the rsyncd module name (only applicable with rsyncdMode=yes) |
rsyncdUser | string | affa | the username for authentication to the rsync daemon (only applicable with rsyncdMode=yes) |
rsyncdPassword | string | the password for authentication to the rsync daemon (only applicable with rsyncdMode=yes) | |
remoteOS | cygwin | with remoteOS=cygwin the options --send-key and --revoke-key uses the account 'Administrator' and the correct path for the public key on a Windows/Cygwin remote host. |
Default configuration properties
All properties can be set as defaults in the DefaultAffaConfig record. This is useful, when you set up many similar jobs. Example: You want to set the property 'localNice' to 19 for all jobs. Then run
db affa setprop DefaultAffaConfig localNice 19
and don't set this property for the jobs. Properties set in the job record overrides the defaults.
The special property 'sendStatus' is only applicable to the DefaultAffaConfig record. It controls the status report sent by email and can be set to the values 'none', 'daily', 'weekly' or 'monthly'. To setup a weekly status report run:
db affa setprop DefaultAffaConfig sendStatus weekly
then setup the cronjob:
affa --make-cronjobs
Global disable
All jobs can be disabled with setting the AffaGlobalDisable record type to 'yes'.
db affa set AffaGlobalDisable yes affa --make-cronjobs
to re-enable run:
db affa set AffaGlobalDisable no affa --make-cronjobs
Usage and command line options
affa --run JOB
Starts a job run. Usually done by the cronjob.
affa --make-cronjobs
Configures the cronjobs as scheduled in the jobs records.
affa --send-key JOB
affa --send-key --host=TARGETHOST [--port=PORT] [--remoteOS=cygwin]
This first generates the DSA key for the Affa Server, if not already done. Then it sends the public key to the host 'remoteHostName' as configured in the record of job JOB and generates the job specific ssh known host entry.
affa --full-restore JOB [ARCHIVE]
Does a full restore of the standard files and directories from the backup ARCHIVE on the remote source server as defined in the JOB record. If ARCHIVE is not given, the archive 'scheduled.0' is used as the default. The full restore reconstructs the server as it was at the time of the backup. After the restore the source host reboots.
affa --rise [--all] JOB [ARCHIVE]
Runs a full restore on the Affa server (!) of all standard files and directories from the backup ARCHIVE of job JOB. In other words: After completion, the Affa box reboots as a clone of the source server. Ensure, that the source server has been powered off before you reboot the Affa box, otherwise the network interface will not come up. This is important, when you run --rise remotely. The --rise feature only works with SME 7 servers und should only be used on dedicated backup servers.
With option --all, all files and directories of the archive as defined by the include[] properties are restored. Files or directories with the same name on the Affa server will be overwritten and cannot be restored by a undorise. This should not be an issue on a dedicated Affa server which does not hold any other data. After a possible undorise those additional restored dada must be removed manually.
Please note, that the rise process backs up the the Affa server itself before doing the restore from the archive. This backup is used by a possible undorise run to restore the Affa server. Only the standard files and directories are backed up. Data in non-standard loctions (like /opt) are untouched and will still exist after the rise run. See also: Backup_server_config#Standard_backup_.26_restore_inclusions
affa --undo-rise
This feature reverts a risen Affa box to a backup server. After a reboot, all configured jobs will work again.
affa --create-backup-file JOB [ARCHIVE] [--outfile=FILE]
Creates a gzipped tar archive FILE from the ARCHIVE of job JOB. During creation the MD5 checksum is calculated against which the written tar is checked. The default ARCHIVE is scheduled.0 and default the FILE is ./smeserver.tgz. The checksum is written to FILE.md5sum.
A smeserver.tgz file stored on an USB disk can be used for restore during a SME Server fresh install.
affa --list-archives [--csv] JOB
Displays a table of all present archives of job JOB with date, number of files, size and disk usage. See chapter 'Restore' for an output example. With --csv, the output is in machine readable colon separared format.
affa --status [--csv]
Displays a table of all configured jobs with enable status, time of last and next run, size, disk usage and the number of scheduled (s), daily (d), weekly (w), monthly (m) and yearly (y) archives. Last time shows 'failed', if a job did not run in the last 24h. For disabled jobs 'Last' always shows 'failed' after 24 h. To see the date and time of the last run of those jobs use the --list-archives option. Column 'Next' shows the time when the next run will be started, if 'Enabled' is 'yes'. Column 'Disk usage' shows the usage of the partion, where the RootDir of the job is located on. If all jobs are located in the same RootDir, identical disk usage is shown for all jobs. If RootDir is /var/affa, the usage of the SME server system partition is shown.
Affa version 1.0.0-1 on backup.mydomain.de (10.204.48.2) +---------------+------+--------+-------+--------+------------+----------------+ | Job | ENBL | Last | Next | Size | Disk usage | N of s,d,w,m,y | +---------------+------+--------+-------+--------+------------+----------------+ | bookkeep | yes | 23:48 | 23:30 | 4.5GB | 616GB/47% | 2,7,4,2,0 | | crm | yes | 11:20 | 13:20 | 47MB | 616GB/47% | 7,7,4,2,0 | | fespdc | yes | 09:55 | 12:45 | 40GB | 616GB/47% | 6,7,4,2,0 | | helpdesk | yes | failed | 13:40 | 70MB | 616GB/47% | 7,7,4,2,0 | | imageserv | yes | 23:01 | 23:00 | 19GB | 616GB/47% | 2,7,4,1,0 | | intraweb | yes | 10:32 | 13:30 | 1.4GB | 616GB/47% | 7,7,4,2,0 | | pdcaus2 | yes | 23:01 | 12:15 | 5.4GB | 616GB/47% | 2,7,4,2,0 | | persoff | yes | running (pid 17521) | 616GB/47% | 2,7,4,2,0 | | primmail | yes | 10:09 | 13:00 | 45GB | 616GB/47% | 7,7,4,2,0 | | rayofhope | yes | 22:32 | 22:30 | 20GB | 616GB/47% | 2,7,4,1,0 | | sozserv | yes | 22:30 | 22:30 | 8.0GB | 616GB/47% | 2,7,4,2,0 | +---------------+------+--------+-------+--------+------------+----------------+ | az32share | no | - | 02:20 | 234MB | 616GB/47% | 7,7,2,0,0 | | azpdc | no | - | 21:00 | 42GB | 616GB/47% | 2,7,1,0,0 | +---------------+------+--------+-------+--------+------------+----------------+
With --csv, the output is printed in a machine readable colon separated format.
affa --show-schedule
Prints a 'graphical' timetable for all enabled jobs. The resolution is 30 minutes. Disabled jobs are not shown.
Affa version 1.0.0-1 on backup.mydomain.de (10.204.48.2) TIME 0:00 4:00 8:00 12:00 16:00 20:00 crm -X------ -------- -------- -------- -------- -------- sozserv --X----- -------- -------- -------- -------- -------- fespdc ----X--- -------- -------- -------- -------- -------- imageserv -----X-- -------- -------- -------- -------- -------- primmail ------X- -------- -------- -------- -------- -------- intraweb -------- X------- -------- -------- -------- -------- bookkeep -------- ------X- X-X-X-X- X-X-X-X- X-X-X-X- X-X-X--- pdcaus2 -------- -------- -------- X------- -------- ------X- persoff -------- -------- -------- -------- -------- ---X---- helpdesk -------- -------- -------- -------- -------- -----X-- rayofhope -------- -------- -------- -------- -------- -----X-- 2 disabled jobs not listed
affa --send-status
Sends the status table to the email adresses configured in the 'DefaultAffaConfig' record. Used by the cronjob 'affa-status'.
affa --mailtest JOB
Sends a test email to the email adresses configured in the JOB record. With property Watchdog=yes, a test email is sent from the remote host, too. Use this to verify, that your mail processing is functional.
Note: By default Affa only sends messages on errors, never on success (see property chattyOnSuccess).
affa --cleanup JOB
After you have lowered a keep value, e.g. scheduledKeep, then archives with a higher indices will no longer be shifted and will exist for ever. This option finds these archives and deletes them.
affa --rename-job JOB NEWNAME
Renames the job JOB to NEWNAME including all database records and archive directories.
affa --move-archive JOB NEWROOTDIR
Moves the archive directory of job JOB to the rootdir NEWROOTDIR and adjusts the property RootDir. NEWROOTDIR must be a full path starting with a slash. As moving across filesystems (e.g. from an external USB drive to the local disk) is not possible, Affa uses a copy command in this case and deletes the source directory after that. Depending on the archive size, copying across filesystems can take a long time.
affa --delete-job [--revoke-key] JOB
Irreversibly deletes a job including all archives, configuration and report databases. With given --revoke-key option, the public key on the remote server will be deleted.
affa --revoke-key JOB
affa --revoke-key --host=TARGETHOST [--port=PORT] [--remoteOS=cygwin]
Deletes the public dsa key on the remote server.
affa --check-connections
Checks the ssh login for all configured jobs. For jobs where the public key was not yet sent, you are prompted for the password and the key will be sent then.
affa --kill JOB
Terminates the running job JOB and all its child processes (rsync processes).
Example setups
Dedicated backup server
- Set up a job for every server you want to backup
- Send the public keys to every server
affa --send-key JOBNAME
- Check whether password-less logins are working
affa --check-connections
- Check whether the scheduled jobs are evenly distributed over the day
affa --show-schedule
- Create the cron jobs
affa --make-cronjobs
- Check the status after 24 hours
affa --status
Backup single ibays
Suppose you want to backup the ibays 'staff1' and 'staff2' on your production server with WAN IP 82.123.1.1 to an Affa server in a different location over the internet every night at 2:30am.
- log into the Affa server and install the packages as described above.
- copy the config helper script sample cp /usr/lib/affa/jobconfig-sample.pl /root/ibay-staff-job.pl
- edit /root/ibay-staff-job.pl and set my $jobname='ibay-staff'; and 'remoteHostName‘=>'82.123.1.1', 'TimeSchedule'=>'0230', 'SMEServer'=>'no', 'Include[0]'=>'/home/e-smith/files/ibays/staff1', 'Include[1]'=>'/home/e-smith/files/ibays/staff2',
- write the configuration /root/ibay-staff-job.pl
- send the public key to the production server affa --send-key ibay-staff
- check next morning affa --list-archives ibay-staff affa --status ls /var/affa/ibay-staff
Two production servers backup each other
You have two sites connnected via a VPN and a SME Server running on each site. In that case you don't need a dedicated Affa backup server. Both production servers can additionally act as Affa backup servers backing up the server of the other site. Simply install Affa and configure a job that backs up the other one. You can use all Affa features except of the rise feature. When using the rise feature the server become any of the backed up systems, which is less useful in this scenario as it would give you a running copy of the server of the other site while the server of this site is down.
To get redundancy and a faster restore you can configure a local backup to an external USB or NAS device.
Please pay attention, that you do not backup the archives back to the other site. Set the RootDir property to a path which is not included in the SME default backup list. When leaving the RootDir property to its default '/var/affa', this is guaranteed.
Backing up a Windows computer
Backing up data from a Windows system requires the Cygwin Rsyncd daemon installed and configured on Windows. The standard procedure rsync over ssh does not work, as the Cygwin rsync process always hangs after some files were transferred.
Rsyncd setup on the Windows computer
Install the Cygwin base, the rsync package and configure the Rsyncd service as described in this document: Rsyncd setup on a windows computer for use with Affa backup'. The installation of the sshd service is optional and not needed for the backup itself, but having a ssh login can be very helpful for administration or executing scripts on the Windows system. Affa supports sending the public key to a Windows Cygwin for password-less login.
Note: Affa does not backup the Windows Access Control List (ACL) information. You may need to correct the ACLs manually after a restore.
Affa Rsyncd mode setup (Quick start example)
You want to backup the My Documents folders of the users ssorglos and bsimpson from the Windows computer 'ws001' with IP 192.168.1.65 to your Affa server 'affabox' with IP 192.168.1.3.
1. log into the 'affabox' and copy the Cygwin config helper script sample
cp /usr/lib/affa/jobconfig-cygwin-sample.pl /root/ws001-mydocs-job.pl
2. edit /root/ws001-mydocs-job.pl and set
my $jobname='ws001-mydocs';
and
'remoteHostName‘=>'192.168.1.65', 'rsyncdPassword'=>'secretword', 'Include[0]'=>'/c/Documents and Settings/ssorglos/My Documents/', # don't use backslashes in pathnames! 'Include[1]'=>'/c/Documents and Settings/bsimpson/My Documents/',
where secretword must be replaced by the password you have chosen in the rsyncd.secretsfile on the Windows box.
3. write the configuration (this makes the database entries and sets up the cronjobs)
/root/ws001-mydocs-job.pl
4. run the job manually. After completion check the archive /var/affa/ws001-mydocs/scheduled.0 and the logfile /var/log/affa/ws001-mydocs.log
affa --run ws001-mydocs
Affa Rsyncd mode manual setup
In case you want to do the setup manually using the db command, these are the mandatory settings for Cygwin Rsyncd mode
db affa setprop JOB rsyncdMode yes db affa setprop JOB rsyncdModule AFFA db affa setprop JOB rsyncdUser affa db affa setprop JOB rsyncdPassword secretword db affa setprop JOB SMEServer no db affa setprop JOB RPMCheck no db affa setprop JOB Watchdog no
Optional for ssh login
db affa setprop JOB remoteOS cygwin
Use Affa to backup to a NFS-mounted NAS or a local attached USB drive
You want to backup your SME 7 production server with hostname 'prodbox‘ and IP 10.200.48.1 on a mounted filesystem instead of setting up a dedicated Affa box.
Setup NAS
You have a FreeNAS box with IP 10.200.48.2 up and running with NFS service enabled. The disk is mounted to /mnt/affashare. You have authorized the IP address of your prodbox server to access share /mnt/affashare.
- log into the 'prodbox' and install the NFS packages /usr/bin/yum install --enablerepo=smecontribs smeserver-nfs Now enable and start the portmapper service config setprop portmap status enabled service portmap start
- mount the NFS share mkdir -p /mnt/affadevice mount 10.200.48.2:/mnt/affashare /mnt/affadevice
Alternatively setup a USB drive
- log into the 'prodbox'
- Connect a USB hard disk to the USB Bus. Now you must determine what device the kernel has assigned to the drive. View the /var/log/message and search for Initializing USB Mass Storage driver. A few lines below you'll find the name of the device. In this example it is sdh. Replace /dev/sdh by your device in following instructions.
- Use the fdisk program to create a linux partition. Verify that this is really the attached USB drive before you continue! fdisk /dev/sdh You'll most likely find an existing vfat dos partition, which you have to delete first. In the following we assume, that you have created a single partition /dev/sdh1.
- Now format the drive with an ext3 filesystem mkfs.ext3 /dev/sdh1
- Make the mount point mkdir -p /mnt/affadevice
- Add the following line to the /etc/fstab /dev/sdh1 /mnt/affadevice ext3 defaults
- Mount the drive mount /mnt/affadevice
- Crosscheck your work using the df command df
Setup Affa
You want to run backups on 11:30 h, 15:30 h and 19:30 h and you want to keep the last 3 scheduled backups, 7 daily, 5 weekly, 12 monthly and 1 yearly backups.
- log into the 'prodbox' and install the Affa packages as described above.
- copy the config helper script sample cp /usr/lib/affa/jobconfig-sample.pl /root/prodbox-job.pl
- edit /root/prodbox-job.pl and set my $jobname='prodbox'; and 'remoteHostName‘=>'localhost', 'TimeSchedule'=>'1130,1530,1930', 'scheduledKeep'=>3, 'dailyKeep'=>7, 'weeklyKeep'=>5, 'monthlyKeep'=>12, 'yearlyKeep'=>1, 'RootDir=>'/mnt/affadevice', Review the other properties and change them to your needs.
- write the configuration /root/prodbox-job.pl
- run the job manually affa --run prodbox
Limitations
With this kind of setup you cannot use the affa rise feature, as it requires the backup archive to be located on the same fileystem as the server installation. The rise option uses hardlinks, which are not working across filesystems.
Automount
Having the backup archives in the same filesystem is always a risk, which can be minimized by using the automount feature. Then the external filesystem is only mounted during a job run.
In the NAS example set
'AutomountDevice=>'10.200.48.2:/mnt/affashare', 'AutomountPoint =>'mnt/affadevice',
and skip the step 2.
In the USB drive example set
'AutomountDevice=>'/dev/sdc1', 'AutomountPoint =>'mnt/affadevice',
and skip the steps 5 to 8.
The mount point will be automatically created, if it does not exist.
For access to the archive directory, you need to mount it manually.
Restore
Restore single files or directories
Example 1: It's Tuesday April 8th 2008, when user 'briedlin' asks you to restore the messages of his mailbox 'orders' he has inadvertently deleted on Monday morning.
- You first must check what backup archives are available. The jobname of this server backup is 'prodserv'.
On the Affa backup server do:
affa --list-archives prodserv
Affa version 1.0.0-1 on affa1.mydomain.de (10.204.48.2) +------------------------------------------------------------------------------+ | Job: prodserv | | Description: File- and Mailserver Alfdorf | | Directory: /var/affa/prodserv/ | | Hostname: 10.204.48.1 | | Email: sysadmin@mydomain.de | +-----------------------+----------------+--------------+--------+-------------+ | Date | Archive | Files | Size | Disk usage | +-----------------------+----------------+--------------+--------+-------------+ | Sat 2007 Apr 28 00:45 | monthly.10 | 39625 | 7.7GB | 118GB/9% | | Sat 2007 May 26 00:41 | monthly.9 | 39928 | 7.8GB | 88GB/6% | | Sat 2007 Jun 30 00:41 | monthly.8 | 40343 | 7.8GB | 155GB/11% | | Fri 2007 Jul 27 00:41 | monthly.7 | 39530 | 7.9GB | 172GB/13% | | Sat 2007 Aug 25 00:41 | monthly.6 | 39613 | 7.9GB | 179GB/13% | | Sat 2007 Sep 29 00:42 | monthly.5 | 40157 | 8.2GB | 198GB/15% | | Sat 2007 Oct 27 00:46 | monthly.4 | 40453 | 7.6GB | 213GB/16% | | Sat 2007 Dec 01 00:43 | monthly.3 | 40545 | 7.6GB | 228GB/17% | | Sun 2007 Dec 30 00:42 | monthly.2 | 40378 | 7.6GB | 284GB/21% | | Sun 2008 Jan 27 00:44 | monthly.1 | 40545 | 7.5GB | 422GB/32% | | Sun 2008 Mar 02 00:42 | monthly.0 | 40924 | 7.7GB | 479GB/36% | +-----------------------+----------------+--------------+--------+-------------+ | Sun 2008 Mar 09 00:41 | weekly.3 | 40976 | 7.7GB | 501GB/38% | | Sun 2008 Mar 16 00:42 | weekly.2 | 41027 | 7.7GB | 506GB/38% | | Sun 2008 Mar 23 00:41 | weekly.1 | 41051 | 7.7GB | 500GB/38% | | Sun 2008 Mar 30 00:41 | weekly.0 | 41062 | 7.7GB | 503GB/38% | +-----------------------+----------------+--------------+--------+-------------+ | Tue 2008 Apr 01 00:58 | daily.6 | 41090 | 7.7GB | 500GB/38% | | Wed 2008 Apr 02 00:43 | daily.5 | 47680 | 7.8GB | 501GB/38% | | Thu 2008 Apr 03 00:46 | daily.4 | 47680 | 7.8GB | 507GB/38% | | Fri 2008 Apr 04 00:42 | daily.3 | 47686 | 7.8GB | 513GB/39% | | Sat 2008 Apr 05 00:45 | daily.2 | 47687 | 7.8GB | 512GB/39% | | Sun 2008 Apr 06 00:42 | daily.1 | 47687 | 7.8GB | 511GB/39% | | Mon 2008 Apr 07 00:42 | daily.0 | 47687 | 7.8GB | 511GB/39% | +-----------------------+----------------+--------------+--------+-------------+ | Tue 2008 Apr 08 00:43 | scheduled.0 | 47688 | 7.8GB | 525GB/40% | +-----------------------+----------------+--------------+--------+-------------+
- Choose the daily.0 archive, which was created Monday night. Now restore the mailbox 'orders' using the rsync command.
- Now run the rsync command (note the trailing slash!) on the Affa backup server: export RDIR=/home/e-smith/files/users/briedlin/Maildir/.orders/ rsync -av /var/affa/prodserv/daily.0/$RDIR 10.204.48.1:$RDIR If the servers are configured to use a different ssh port eg 2222, then instead do: export RDIR=/home/e-smith/files/users/briedlin/Maildir/.orders/ rsync -av -e 'ssh -p 2222' /var/affa/prodserv/daily.0/$RDIR 10.204.48.1:$RDIR
Example 2: A user has deleted the file orderform.pdf from ibay 'docs' and asks you to restore it.
- You have searched and found the latest version of this file in archive weekly.
- Copy it back to the server - On the Affa backup server do: export RFILE=/home/e-smith/files/ibays/docs/files/orderform.pdf rsync -av /var/affa/prodserv/weekly.1/$RFILE 10.204.48.1:$RFILE If the servers are configured to use a different ssh port eg 2222, then instead do: export RFILE=/home/e-smith/files/ibays/docs/files/orderform.pdf rsync -av -e 'ssh -p 2222' /var/affa/prodserv/weekly.1/$RFILE 10.204.48.1:$RFILE
Example 3: Restoring a file with special characters in the path
Do not use shell variables to shorten the command. It would complicate things more than it would help. Quote the source and destination path. In the destination path escape blank characters with a double backslash and brackets with a single backslash. On the Affa backup server do:
rsync -av "/var/affa/fileshare/daily.4/home/e-smith/files/ibays/mechfiles/files/Valve Control (Design Gr)/VALVE LIST FOR ISSUED.xls" "192.168.1.7:/home/e-smith/files/ibays/mechfiles/files/Valve\\ Control\\ \(Design\\ Gr\)/VALVE\\ LIST\\ FOR\\ ISSUED.xls"
If the servers are configured to use a different ssh port eg 2222, then instead do:
rsync -av -e 'ssh -p 2222' "/var/affa/fileshare/daily.4/home/e-smith/files/ibays/mechfiles/files/Valve Control (Design Gr)/VALVE LIST FOR ISSUED.xls" "192.168.1.7:/home/e-smith/files/ibays/mechfiles/files/Valve\\ Control\\ \(Design\\ Gr\)/VALVE\\ LIST\\ FOR\\ ISSUED.xls"
Full restore
To run a full restore of user and configuration data run on the Affa server
affa --full-restore <JOB> [<ARCHIVE>]
This rsyncs the data from the backup ARCHIVE back to the 'remoteHostname' defined in the configuration of the job JOB.
Example: You have backuped your production server 'prodsrv' as job 'prodbox'. To restore from the latest backup run
affa --full-restore prodbox
To restore from the older archive daily.3 run
affa --full-restore prodbox daily.3
Moving a SME 7 server installation to new hardware using the Affa rise feature
Please see this Howto: Moving SME to new Hardware
FAQ
What files and directories are included by default?
With SMEServer=no nothing at all.
With SMEServer=yes the SME default backup list. The following command displays the list:
perl -e 'use esmith::Backup;$b=new esmith::Backup;print join("\n",$b->restore_list)."\n"'
Can I use Affa to backup a SME 6 server?
To backup a SME 6 server set the property 'rsync--inplace' to 'no' and install the perl-TimeDate package on the SME 6 box. The perl-TimeDate package is needed by the watchdog script running on the SME 6. Use the RPM from DAG: perl-TimeDate-1.16-0.rh73.dag.noarch.rpm
You cannot use the RPMCheck property.
How can I move a backup archive from my production server in a remote branch office to the Affa server using an USB disk? I want to avoid to download the first full backup over the internet.
Install Affa on your production server, connect and mount the USB disk. Setup a job to write the archive to the USB disk. After the job run, connect the USB disk to your Affa server and setup the job in the same way. Use the setup script from the archive directory. You only need to change the remoteHostName property. Now use the --move-archive option to move the archive to the local disk. If not already done, send the public key to your production server. You're done.
How do I backup two SME servers behind a firewall?
First you need to configure port forwardings for the ssh service on your firewall. Use a non-standard port ,e.g 2200->22, for your second server. Setup a job on your Affa server for each of your production servers. Set up the job property sshPort=2200 for second server.
Uninstall
This removes the installed Affa package, all configuration data and all backup archives.
Run the following commands for each job:
affa --revoke-key JOBNAME affa --delete-job JOBNAME
Verify that all jobs have been deleted
affa --status
Remvove the Affa package
rpm -e smeserver-affa
and, if perl-Filesys-DiskFree is not needed by any other packages:
rpm -e perl-Filesys-DiskFree
Cleaning up
rm -f /etc/cron.d/affa /etc/cron.d/affa-status rm -rf /home/e-smith/db/affa /home/e-smith/db/affa-report rm -rf /var/affa /var/log/affa
Additional information
For details of performance, changelog etc see Affa:Additional information
Acronym
Affa stands for Automatische Festplatten Fernarchivierung