ZxBackup Store/Case Sensitive filesystem for ZeXtras Backup

From ZeXtras Suite Wiki

Jump to: navigation, search
ZxBackup logo box.png
Available since version: 0.87
Latest Version: 2.14.0
Released on: February 11th, 2019
Compatibility List
Admin Guide
FAQ
Troubleshooting
Backup Initialization
ZspBackup logo box.png

Why a Case Sensitive filesystem is used to store ZxBackup data

A Case Sensitive filesystem is required because ZeXtras Backup uses the SHA1 hashing algorythm to name its files in order to perform faster searches and provide an additional layer in data availability.

This kind of algorythm produces both uppercase and lowercase characters so the following files

/opt/zimbra/backup/zextras/items/f3/f3319d2625f06

and

/opt/zimbra/backup/zextras/items/F3/F3312d45D44h

which are distinct files in distinct folders for ZeXtras Backup, placed in the same folder - ../f3/.. in this case - if storing your data in a case insensitive filesystem.

What can I do if my ZeXtras Backup Path is currently on a Case Insensitive filesystem?

If your ZeXtras Backup Path is currently on a Case Insensitive filesystem you should take the following steps:

  • Stop the Real Time Scanner from the ZeXtras Administration Zimlet.
  • Make sure no ZxBackup operations are running.
  • Move your Backup Path to a Case Sensitive filesystem.
  • Download and run the Python script that you can find on the bottom of this page. It will automatically fix your backupped data (the only argument needed is the path on the Case Sensitive filesystem which contains your ZeXtras Backup data)
  • Once the script is done, change your backup path to the new folder
  • Re-enable the Real Time Scanner

Fix script for data stored on Case Insensitive filesystems

 
#!/usr/bin/env python

import os
import os.path
import shutil


def get_parent_path(path):
    return os.path.dirname(path)


def check_path(args, dir, names):
    for name in names:
        current_path = os.path.join(dir, name)


        if os.path.isdir(current_path):
           continue


        if name[0:2] != dir[2:4]:
            print name + " is in the wrong directory: " + dir
            correct_dir = os.path.join(get_parent_path(dir), name[0:2])
            correct_path = os.path.join(correct_dir, name)


            if not os.path.exists(correct_dir):
                os.mkdir(correct_dir)


            print "Moving " + current_path + " to " + correct_path
            shutil.move(current_path, correct_path)




def usage(msg):
    print msg + "\nUsage:\n\tcheckBackupPaths.py [path of the items directory]"


def main(args):




    if len(args) == 1:
       usage("No path specified!")
       exit(-1)
    else:
       path = args[1]


    if not os.path.isdir(path):
        usage("The specified path is not a valid directory")
        exit(-2)


    os.chdir(path)


    print "*** Start checking backup paths on " + path + " ***"
    os.path.walk(".", check_path, None)
    print "*** Check finished ***"


if __name__ == "__main__":
    main(os.sys.argv)
Personal tools