Пушыстый (_winnie) wrote,
Пушыстый
_winnie

dobro_backup.py

Выкладываю питоний скрипт для бэкапов, который доделал сегодня.

Бэкап за каждую дату - выглядит просто как папка. Для того, чтобы не хранить терабайт в каждой папке по много раз при создании нового бэкапа создаются хардлинки в предыдущий бэкап. Старые папки можно смело стирать.
Для того, чтобы быстро считать md5 от файлов - в директорию сохраняется файл с посчитаными md5 и timestamps/size. Если timestamp/size файла не изменился, то верим что md5 тоже не поменялся.
Скрипт работает под Linux и Windows (под Windows даже есть оптимизированый os.walk через FindFirstFile).
Возможно, можно разобрать на запчасти для быстрого копирования директорий в production.

Cам скрипт: dobro_backup.py

Дублирую сюда usage и todoшки-недоделки:

Usage: python "prog_name" destination_dir path1/source1 ... pathN/sourceN'

Copied result will be in the destination_dir/DATE_TIME/source1 ... destination_dir/DATE_TIME/sourceN'
Also there will be created files pathN/sourceN/hash_dir_info.txt (write access to source is needed now)'
When backup is complete, destination_dir/DATE_TIME/backup.complete is created, with timestamp info.
Hardlinks of duplicated files created to previous directory, to save space/time.
Deletion of old backup directories is safe.

Encryption and compression can be provided by the file-system (TrueCrypt + NTFS, for example).

Hardlinks to older-than-last backups are not created now (you may manually move/copy older files to last backup)


# known missing features and issues:
#
# todo: allow to create hardlinks to old backups, to handle changed source set
# ( ["music", "documents", "video"] -> ["music", "documents"] -> ["music", "documents", "video"] ).
# todo: needless rehashes of internal file hash_dir_info.txt
# todo: catch "source inside destination" errors and vice-versa
# todo: allow to rename sources targets
# todo: allow to store hash_dir_info.txt outside source directories
# todo: allow exclude dirs/mask
# todo: don't spam about known unreadable dirs ( Microsoft\Windows\WER\ReportQueue )



updated: похожие проекты:
https://github.com/candera/hobocopy/ , для Windows. Поддерживает Volume Shadow Copy. Но его инкрементальному бэкапу я бы файлы не доверил, он работает как "скопировать файлы, таймстемпы которых старше последней даты бэкапа". Что может фейлится кучей разных способов, и можно считать что не работает для больших коллекций файлов.
Никакой дедубликации в приёмнике, просто копирование. Ключевое отличие от остального - использование Shadow Volume для заблокированых файлов, соответственно можно бэкапить Outlook (но не Thunderbird).


https://code.google.com/p/boar/ - простая система контроля версий бинарных файлов. Репозиторий - можно считать, что промежуточные снэпшоты оттуда удалять нельзя, и имеет непрозрачный формат (хрен вытащишь свою коллекцию mp3-шек без клиента boar).

Моё основное отличие от других систем - это то, что destination-репозиторий выглядит просто как директория с файлами. Фундаментальный недостаток - для каждого файла создаётся по линку, и скорость бэкапа завязано на это. Нулевой бэкап в новый чистое место - работает быстрее board на десятки процентов.
Tags: python, release, soft-dev
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 16 comments