Main page     Download    


katarina - rsync based multi profile, multi servers backup system


     help mode :
       [-h] [-H]
     backup mode :
       -t backup -n cyclename -p profilename [-m] 
     retry mode :
       -t retry -n cyclename -p profilename [-m]
     verify clients mode :
       -t check -p profilename
     use: -t mode :
        backup : to actualy backup
        check : to verify clients availability
     use: -h : to read this
     use: -H : to read perldoc
     use: -m : report by mail
     use: -s : report on screen
     use: -n : to specify cycle name (daily, weekly...)
     use: -p profilename : to specify $config_dir/profilename.kat


katarina is a perl backup system.

It reads its config in a text file (perl syntax) to determine global parameters a list of targets with specific parameters

Remote data is backed up using rsync. An rsync agent must be running on the remote system and available for the katarina server.

When using copy mode, data directories are rotated using cp -la which means data is deduplicated server by server (not between different servers). Old directories are recycled if possible to avoid re-creation of the last rotated backup.

When using snap mode, you should have a volume for backup_dir. Snaphosts will then be created globaly and not server by server. Links will be made to keep the same kind of access to backup history for each server.

Global parameters in config file can be :

  active          : 0 or 1 to globaly (de)activate the profile
  mail            : email address of the Katarina administrators
  forks           : number of concurrent backup threads
  backup_dir      : root directory for backups
  rotate_mode     : rotation mode : "copy" or "snap"
                    copy will use cp -la like command (default value)
                    snap will use zfs snapshot or custom command
  premounted      : abort if this filesystem is not mounted in order
                    to not fill wrong partitions
  cycle           : hash of different cycles and the time to keep data
                    before expiration. This can be used to define daily
                    profiles, weekly or much more complicated policies.
                    See EXAMPLES below.
  exclude         : array of remote directories to exclude
  bwlimit         : bandwith limit (in kByte) to be applied to every
  rmcmd           : rm command. For example : ionice -c 3 /bin/rm
  cpcmd           : cp command. For example : ionice -c 3 /bin/cp
  rsynccmd        : rsync command. For example : 
                      ionice -c 3 /usr/local/bin/rsync
  snap_create_cmd : snapshot creation command. For example : zfs snapshot
  snap_remove_cmd : snapshot remove command. For example : zfs destroy
  snap_sub_dir    : snapshots subdirectory. For example : 
                      .zfs/snapshot/ (relative to $backup_dir)
  rsyncretries    : number of rsync tries if it fails

Specific server parameters in config file can be :

  active     : 0 or 1 to to (de)activate the server
  ip         : IP address (v4 or v6) to use to connect to server if 
               servername is not an FQDN
  module     : name of the rsync module to use on remote server. If 
               not specified, it will be "katarina"
  exclude    : array of remote directories to exclude (in addition to 
               those given in global parameter)
  bwlimit    : bandwith limit (in kByte). Replace the provided global
               value (if provided)

Rotation modes

Note that there is no data conversion between copy mode and snapshot mode You need to start from your last daily (or whatever cycle you have defined) clean links, directories and/or snapshots up.


Configuration files should be placed in /etc/katarina

Here is a .kat example configuration file :

  our %globals = (
    "mail"       => "root@example.com",
    "active"     => 1,
    "forks"      => 2,
            # 2 threads will be used to backup in parallel
    "backup_dir" => "/backup/test",
            # directory used to write servers data
    "premounted" => "/backup", 
            # abort if this filesystem is not mounted in order
            # to not fill wrong partitions
    "rotate_mode"=> "copy",
    "cycles"  => {
      "daily" => {
        "method" => "rsync",
        "retention" => (7 * 86400) },
              # Keep up daily backups younger than 7 days
      "weekly" => {
        "method" => "use daily",
              # Do not rsync to the server for this backup : use
              # the existing "daily" archives to build last "weekly"
        "retention" => (30 * 86400) },
              # Keep up weekly backups younger than 30 days
    "exclude" => [
      "lost+found/", "tmp/", "proc/", "sys/",
      "selinux/", "dev/",
      "media/", "lib/init/rw" ],
  our %targets = (
    "server1.example.com" => {
        "active"  => 1,
        "exclude" => [
    "server2.example.com" => {
        "active"  => 1,
        "ip" =>,
    "server3.example.com" => {
        "active"  => 0,
          # This one is in maintenance: no backup will be done
    "server4.example.com" => {
        "active"  => 1,
        "ip" =>,
        "module" => "export",
          # rsyncd.conf on the backuped host specifies "export" as 
          # a rsync module.

For this configuration file the following crons could be used :

  # Daily backup
  0 6 * * * root katarina.pl -t backup -m -p test -n daily
  # Weekly backup
  0 6 * * 0 root katarina.pl -t backup -m -p test -n weekly

A scheduler is provided in order to handle daily like launch when you have to backup a lot of profiles on the same server. See katarina-scheduler.

Here is a rsyncd.conf configuration that can be used on the backed-up clients :

pid file=/var/run/rsyncd.pid [katarina] comment = Katarina Backup path = / use chroot = no lock file = /var/lock/rsyncd read only = yes list = yes uid = root gid = root ignore errors = no ignore nonreadable = no transfer logging = no timeout = 600 refuse options = checksum dry-run hosts allow =

Cycles can be freely defined :

  "cycles"  => {
    "minutly" => {
        "method" => "rsync",
        "retention" => 60 },
          # Keep up daily backups younger than 1 minute
    "what_I_want" => {
        "method" => "use minutly",
          # Use the las "minutly" backup to generate the last
          # "what_I_want" backup
        "retention" => (42 * 60) },
          # Keep up backups younger than 42 minutes


Cyril Bellot <jcpp@users.sourceforge.net>

Last news: