ZxBackup Store/Case Sensitive filesystem for ZeXtras Backup
From ZeXtras Suite Wiki
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
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 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)