1
0

Add backup-check script to detect bit rot

This commit is contained in:
Noah 2015-10-19 20:56:09 -07:00
parent 67163c514e
commit 81790064b4
4 changed files with 65 additions and 0 deletions

View File

@ -23,4 +23,7 @@ indent_size = 2
indent_style = space indent_style = space
indent_size = 2 indent_size = 2
[*.go]
indent_style = tab
# format:dosini # format:dosini

View File

@ -26,6 +26,9 @@ export EDITOR="/usr/bin/vim"
# Virtualenv # Virtualenv
export WORKON_HOME=~/.virtualenvs export WORKON_HOME=~/.virtualenvs
# Go
export GOPATH="$HOME/go"
# Reload zshrc # Reload zshrc
alias rezsh="source ${HOME}/.zshrc" alias rezsh="source ${HOME}/.zshrc"

53
home/bin/backup-check Executable file
View File

@ -0,0 +1,53 @@
#!/usr/bin/env python3
"""backup-check: Periodically compare checksums of backups in multiple
locations. It's mainly to do a weekly check of all my backup locations and
identify bit rot before it's too late.
Install via `crontab -e`:
0 2 * * 0 /home/noah/bin/backup-check
--Kirsle
http://sh.kirsle.net/
"""
import codecs
import os.path
import subprocess
# Directories to compare with each other.
DIRECTORIES = [
"/mnt/Midnight/Images/Organized",
"/run/media/noah/Cyro/Pictures/Organized",
"/run/media/noah/Obelisk/Redundant/Images/Organized",
"/home/noah/Dropbox/Photos/Organized",
"/home/noah/ownCloud/Photos/Organized",
]
ERROR_OUT = "/home/noah/Desktop/Checksum Error.txt"
def main():
# First available disk becomes the common denominator.
master = None
for disk in DIRECTORIES:
if os.path.isdir(disk):
if master is None:
print("Master disk chosen as:", disk)
master = disk
if disk != master:
# Do the comparison.
print("Compare {} <=> {}".format(master, disk))
out = subprocess.check_output(["diff", "-aqr", master, disk])
if len(out):
# Problem!
error(out)
break
def error(out):
"""Error, panic!"""
fh = codecs.open(ERROR_OUT, "w", "utf-8")
fh.write(out.decode("utf-8"))
fh.close()
if __name__ == "__main__":
main()

View File

@ -46,6 +46,12 @@ TARGETS = OrderedDict([
path = "/home/noah/Dropbox Vault", path = "/home/noah/Dropbox Vault",
rsync = "rsync -avu --delete {source}/.X/ \"{destination}/\"", rsync = "rsync -avu --delete {source}/.X/ \"{destination}/\"",
)), )),
# Owncloud backup.
("Owncloud", dict(
path = "/home/noah/ownCloud/Photos/Organized",
rsync = "rsync -avu --delete --exclude .X {source}/ {destination}/",
)),
]) ])
####################################### #######################################