Commit 41dd1b51 authored by Vitaly Lipatov's avatar Vitaly Lipatov

introduce eterbackup

parent c3cc213f
Предел размера файла архива. Также начинать вести новый, если много инкрементов.
Хранить на gluster в garbage. Файлы брать с nun (там и проводить операции).
Шифровать с помощью encfs.
Суть: множество файлов сводить в один. Ежедневные изменения класть в отдельный небольшой архив.
Определять набор каталогов для бэкапа (иерархию). Её повторять, заменяя каталоги на каталоги бэкапов.
Ротация zpaq: удалять большой, склеивать маленькие и работать над ними?
Возможно, можно просто удалять ненужные? Проверить, как работает удаление файлов
при добавлении архив.
Нужен тест для zpaq.
Нужен тест для архиватора, что он всё помещает, а потом восстанавливает.
Проработать интерфейс, какие действия определены
Сохранять контрольные суммы по архивам, проверять целостность.
rsnapshot - можно ли приспособить для локальных копий?
Должен быть только read-only доступ с места бэкапа.
Понятие виртуального архива: когда в реальности файлы не находятся внутри архива. Но у него имеется контрольная сумма.
Посмотреть zpaq no data
x=journaling (default). s=streaming (no dedupe). i=index (no data).
zpaq a 1.zpaq /path -method i
#!/bin/sh -x
# Copyright (C) 2015 Etersoft
# Copyright (C) 2015 Vitaly Lipatov <lav@etersoft.ru>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# template for continous
STZ="000"
STN="???"
extract_dump()
{
# CHECKME: always exists 000?
find $DUMPDIR -type f -name "*.$STZ.zpaq" | \
while read paqfile ; do
relfile="${paqfile/$DUMPDIR\//}"
reldir=$(dirname "$relfile")
# FIXME: copy dir permissions
# TODO: хранить структуру каталогов отдельно, сразу и проверка?
mkdir -p "$DESTDIR/$reldir" || exit
cd "$DESTDIR/$reldir/.."
zpaq extract "${paqfile/.$STZ.zpaq/.$STN.zpaq}"
cd - >/dev/null
done
}
COMMAND=$1
# TODO: update, repack
# TODO: -h, --help
shift
case $COMMAND in
update|repack)
;;
extract)
DUMPDIR=$(realpath "$1")
DESTDIR=$(realpath "$2")/$(basename $DUMPDIR)
extract_dump
exit
;;
-h|--help)
echo "Run with update <from> <to>"
;;
*)
exit 1
;;
esac
DEPTH=1
if [ "$1" = "-depth" ] || [ "$1" = "--depth" ] ; then
shift
DEPTH=$1
shift
fi
# from
BACKUPDIR=$(realpath "$1")
# to
DESTDIR=$(realpath "$2")
DUMPDIR=$DESTDIR/$(basename "$BACKUPDIR")
# Получаем список каталогов, которые мы хотим превратить в файлы
find $BACKUPDIR -depth -maxdepth $DEPTH -mindepth $DEPTH -type d | \
while read subdir ; do
# TODO: не забыть файлы в основном каталоге
# TODO: неизвестно, как сделать нерекурсивным
# /var/log/long/something -> long/something
reldir="${subdir/$BACKUPDIR\//}"
bdir=$(basename "$reldir")
# TODO: удалённые каталоги будут незамечены и останутся.
# Создавать новый слой, копируя со старого, и оставляя тот старыми датами?
# FIXME: copy dir permissions
mkdir -p "$DUMPDIR/$reldir"
case $COMMAND in
update)
# workaround for correct internal path
cd $BACKUPDIR/$reldir/.. || exit
# packing
zpaq a "$DUMPDIR/$reldir/$bdir.$STN.zpaq" "$bdir"
cd - >/dev/null
;;
repack)
zpaq extract "$DUMPDIR/$reldir/$bdir.$STN.zpaq" -to "$DUMPDIR/$reldir/../$bdir.$STZ.zpaq" || exit
rm -f $DUMPDIR/$reldir/$bdir.$STN.zpaq
mv $DUMPDIR/$reldir/../$bdir.$STZ.zpaq $DUMPDIR/$reldir/$bdir.$STZ.zpaq
;;
*)
exit 1
esac
done
# Можно извлечь в новый архив
# zpaq extract -to out.zpaq
#!/bin/sh
#sudo $(pwd)/eterbackup update -depth 1 /var/log /tmp/eterbackup
sudo $(pwd)/eterbackup repack /var/log /tmp/eterbackup
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment