создание бекапов домашнего компьютера

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Ответить
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

создание бекапов домашнего компьютера

Сообщение drBatty »

Здравствуйте дорогие дяди, и тёти.

Решил я поделится опытом в сабже, т.к. часто даю советы как делать, но при этом не написал, как же оно у меня сделано.

Речь пойдёт про нетбук с Linux. В десктопе ситуация намного проще, т.к. потерять десктоп намного сложнее. А вот нетбук -- легко. Особенно мой, потому-что HDD у меня давно сломался, и я использую флешки. Т.е. сам-то нетбук у меня останется, а вот мои данные окажутся у неизвестно кого. Это конечно не очень меня обрадует. Не фатально, но согласитесь -- неприятно.

Периметр

Прежде всего следует ограничить периметр охраняемой информации. Всё, что за периметром нужно защищать, а что внутри периметра -- не нужно, и вредно. Если так не сделать, тогда при любом действии придётся доказывать системе, что я -- не верблюд, а хозяин. В большинстве случаев это конечно излишне.

Очевидно, в качестве неохраняемого периметра можно выбрать оперативную память. Т.о. будем считать, что ВСЁ что вне памяти либо общедоступно, либо зашифровано. В том числе и основной носитель информации конечно.

Теперь про наполнение периметра: очевидно, что ОС (у меня Slackware Linux) прятать глупо. Потому она лежит вне периметра, и доступна врагам. В том числе и каталог /etc/ с общими настройками. Подразумевается, что враг может украсть у меня носитель, но не может украсть, а потом вернуть мне его так, что-бы я этого не заметил. (если-бы такой риск был, то пришлось-бы как-то подписывать файлы системы, дабы враг не смог понапихать мне жучков. Но такого риска не было). Также и каталог /boot/ тоже доступен всем подряд(кто имеет доступ к носителю). Каталог /tmp/ недоступен, и смонтирован в память. Т.е. лежит внутри периметра. Что касается $HOME, то это -- взаимоисключающие параграфы. Например $HOME/Download/ должно быть вне периметра, а вот $HOME/.ssh/ безусловно внутри его. ИМХО намного проще поместить весь $HOME внутрь периметра, а всякие Download вынести наружу, что и было сделано: я создал /unsecure/drb/, задал себя его хозяином, и переместил туда все большие публичные "папки", вроде Download & Music. Ну а внутри $HOME я создал симлинки.

Сам $HOME я смонтировал в память, как tmpfs (вообще-говоря, tmpfs может вылезти из периметра в swap. Мне это не грозит по причине отсутствия свопа, но в общем случае этот вопрос нужно как-то решить)

Создание бекапа

Теперь всё просто: нетбук сам создаёт каждые N минут бекап(и перед выключением тоже), а когда я включаю комп, последний бекап разворачивается в память, которая $HOME. Я посмотрел, размер $HOME у меня получился всего ~150Мб, или ~30Мб в архиве. Т.ч. на всё про всё нужно немного ресурсов и времени. Бекап сжимается программой bzip2, и затем шифруется GnuPG. Шифрование происходит открытым ключом автоматически, а вот для дешифровки приходится ввести пасфразу. Но только один раз(впрочем, пароль-то вы тоже вводите? А я вместо этого ввожу пасфразу, которой зашифрован закрытый ключ).

Гладко было на бумаге, но забыли про овраги -- проблема с консистентностью.

Тащем-то всё прекрасно, вот только бекап делается не мгновенно, а какое-то время. За это время всё может изменится. ИЧСХ -- меняется. Потому развернётся ЭТО в эпичный глюкодром. В чём же проблема? А проблема тут в нарушении принципа причинности(ПП). Если из-за изменения файла А меняется файл Б, то это может привести к серьёзным проблемам, в том случае, если мы сохраним (а потом восстановим) сначала старую версию А1, а потом новую версию Б2. Просто IRL такого не бывает, а бывает такое:

Код: Выделить всё

А1 Б1
А2 Б1
А2 Б2

т.к. файл Б -- это следствие А. У нас всё перепуталось, и нарушение ПП приведёт к фатальным последствиям. (т.к. у нас будет комбинация А1 Б2, которой НИКОГДА не бывает, и быть не может. Поведение наших программ будет НЕОПРЕДЕЛЕНО ( http://en.wikipedia.org/wiki/Undefined_behavior )).

Что же делать? Ну во первых, эта хаутушка про домашний компьютер, т.е такая ситуация встречается редко. Её нельзя игнорировать, но и бояться особо не надо -- во многих бекапах такого не будет, а если и будет, то не очень часто. Потому мы можем применить сравнительно простое решение: перед изготовлением бекапа запомним время t0, а после изготовления найдём файлы изменившиеся после t0. И их добавим в бекап.

Это была хорошая новость. Плохая заключается в том, что простой командой вроде

Код: Выделить всё

tar -cjf backup.tbz $HOME

нам уже не отделаться. Впрочем, это было ясно с самого начала: бекап должен создаваться сам по себе, а значит бекапилка должна сама адекватно реагировать на проблемы. Потому лучше пусть делает постепенно, иначе ей будет сложнее разобраться.

Хотел обосновать... Лень. Если вам нравится -- делайте всё одной командой, я не против. Единственное, если что-то пойдёт не так, то ваша система превратится в бесполезный кирпич, ибо ваистену -- безопасность системы повернётся к вам своим задом...

поиск и упаковка

Очевидно, что сначала надо найти файлы. Менее очевидно, что искать надо утилитой find. Но других вариантов действительно нет, ибо IRL условие для поиска слишком сложное(около 253х символов).

Условие составлено из трёх частей:

1. предварительное условие

Код: Выделить всё

find .  \(   -path "./exclude1" -o -path "./exclude2" -o -path "./exclude3" \) -prune -o -user username

3 каталога ./exclude{1,2,3} полностью исключаются из бекапа. Действие -prune даёт всегда истинный результат, причём find даже не смотрит в этот каталог(и). Потому дальше стоит опция -o (ИЛИ), для всех других каталогов(но не этих). Там же включена фильтрация по пользователю -- в бекап не включаются левые файлы.

2. условие времени

Код: Выделить всё

-newermt @1384958585

сохраняются только те файлы, которые изменились после определённого времени. В первый раз этого условия просто нет. См. выше, зачем это нужно.

3.

Код: Выделить всё

\( -type f -o -type d -empty -o -type l \) -print

сохраняются только файлы, или только пустые каталоги, или только ссылки. Непустые каталоги не сохраняются явно, а только неявно (их сохраняет tar, вместе с файлами, которые там есть)

Эти три условия объединяются, и отдаются eval (без неё код намного сложнее и запутаннее)

Получившийся список сортируется, и отдаётся команде tar, которая добавляет(--append) файлы к архиву. Некоторые файлы могут добавляться 2 раза, старая и новая версия. Если они изменились. Сам файл tar лежит в /tmp/ (т.е. в памяти))

После создания архива, команда find ищет ещё раз. Но уже с момента начала бекапа. Если выяснилось, что изменились файлы, процесс повторяется сначала (с этим же архивом, и файлы ищутся не все, а только с момента начала добавления). И так далее, пока не создастся констистентная версия архива.

Сжатие и шифрование

После успешного создания /tmp/*.tar файла, там же файл сжимается, и шифруется асимметрично для нескольких реципиентов (потому-что у каждого моего компьютера имеется свой ключ, которого на других нет). Кроме того файл подписывается специальным ключом для подписи, который имеется исключительно на этом устройстве. Т.е. враг не сможет подменить архив, если не сможет его расшифровать(т.к. секретный ключ для подписи внутри этого архива), или как-то иначе получить доступ внутрь периметра.

Далее бекап переносится на флешку.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: создание бекапов домашнего компьютера

Сообщение Bizdelnick »

Не понял главного - а куда, собственно, сохраняется бекап? На ту же флешку?

drBatty писал(а):
22.11.2013 15:49
Бекап сжимается программой bzip2, и затем шифруется GnuPG.

gpg ведь сама по себе умеет сжимать, в том числе и bzip2.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: создание бекапов домашнего компьютера

Сообщение drBatty »

Bizdelnick писал(а):
22.11.2013 16:49
Не понял главного - а куда, собственно, сохраняется бекап? На ту же флешку?

та я ещё не дописал. На флешку, но почему вдруг "на ту же"? Там нет ничего, кроме бекапов, музыки, системы и прочего такого, что ЗА периметром.
Bizdelnick писал(а):
22.11.2013 16:49
gpg ведь сама по себе умеет сжимать, в том числе и bzip2.

не. Сама она не умеет, а умеет /lib/libbz2.so.1. Но мне этот вариант не слишком удобен, и я расскажу почему.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: создание бекапов домашнего компьютера

Сообщение drBatty »

Создание diff'ов

на этом можно было-бы и остановится, был-бы у меня iPentiumEE+быстрый SSD+танковый аккумулятор. Но у меня нет ни того, ни другого, ни третьего. Потому негоже выкидывать ресурсы на ветер. Кроме основного бекапа *.tar, я потом(при втором запуске) создаю файл *.diff.tar, в котором хранится разница между тем, что было в первом бекапе, и тем, что есть сейчас. Если файлы из основного бекапа занимают порядка 30М, то diff'ы меньше 100К (обычно), что здорово экономит время, ресурсы, и соответственно батарейку.

Сделать это несложно потому, что во время второго запуска нам уже известно время последнего непротиворечивого состояния, его достаточно просто сохранить, а потом и прочитать. Далее можно искать файлы не с начала, а с этого момента. Если всё пойдёт хорошо, можно записать новый diff, и потом удалить предыдущий.

Некоторая сложность возникла с шифрованием: мне нужно дважды вводить пассфразу при распаковке. Это неудобно. Что-бы этого избежать, при первом запуске я создаю ключ

Код: Выделить всё

       KEY=$(head -c20 /dev/random |sha224sum)
       KEY="${KEY%% *}"

получается что-то типа 1e4020952fc0ea81805062105fc6b66c5f7601163e6db9a5d7f79337, данное число я запоминаю в файле(оно тоже попадает в бекап), и затем использую его как пароль для шифрования diff'а (gpg --passphrase-file). Очевидно, данный пароль уникален для каждого бекапа.

Удаление

Данная схема работает, но файлы не удаляются. Если файл удалить, он всё равно восстановится из бэкапа. По этой причине приходится создавать специальный файл, в котором хранится текущий список всех файлов. После распаковки бекапа происходит удаление файлов, которых быть не должно. Карта файлов также упаковывается/шифруется, и хранится рядом с бекапом.

Распаковка

распаковка происходит естественно в обратном запаковке порядке (конечно сначала основной бекап, а потом diff). При шифровании кроме других реципиентов, указывается также и особый ключ, сделанный специально для этого. Перед распаковкой бекапа распаковывается в $HOME каталог ~/.gnupg со специальным ключом, и потом с клавиатуры вводится пароль для этого специального ключа. Далее распаковывается $HOME, в т.ч. и ~/.gnupg, который затирает специальный ключ. diff распаковывается уже с новым ~/.gnupg. В обоих случаях проверяется ЭЦП, которой подписан как основной бекап, так и diff (конечно от подмены флешки это не спасёт. Но поможет в случае, если я восстанавливаю бекап в другом месте)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: создание бекапов домашнего компьютера

Сообщение eddy »

Ненадежно же на флешку бекапы делать! По-хорошему, надо штук 5 NAS-хранилищ, расположенных в разных местах. На них и резервировать. Но обычно-то мы делаем все через одно место.
У меня самого бэкапы домашнего компьютера хранятся на рабочем и на USB-HDD, соответственно, бэкапы рабочего лежат на домашнем + на том же самом USB-HDD. Из-за скудности объемов жестких дисков рабочего компьютера и USB-HDD, приходится делать бэкапы только "архиважного". А вот фильмы и музыка болтаются в зоне риска. А учитывая то, что у нас нонче в стране вообще происходит "запретизация всего", в случае повреждения кино/музыки их и скачать-то неоткуда будет ☹
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: создание бекапов домашнего компьютера

Сообщение SLEDopit »

Это отличный подход при небольших объёмах информации. Если размер бэкапы будет достигать хотя бы нескольких Гб, такой подход уже никуда не годится, увы. Слишком долго.
У меня бэкапится практически вся информация с рабочей машины ( за исключением фильмов и прочей ненужной фигни ) и объём бэкапа достигает 400Гб. Полное архивирование раз в N минут - явно не для меня.

У меня дома стоит некое подобие NAS'a с отдельным первым raid'ом на 500Гб под бэкапы и все данные льются туда через rsync (rsync'ом рулит rsnapshot). А с NAS'a оно бэкапится в ДЦ на всякий случай, если внезапно NAS выйдет из строя.
Из плюсов - бэкапиться можно и удалённо без возни с флэшками/usb-hdd. Если изменений было немного, то хватит и gprs канала для связи.
Из минусов - решение не из самых бюджетных, но безопасность - штука дорогая, куда деваться.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: создание бекапов домашнего компьютера

Сообщение drBatty »

eddy писал(а):
23.11.2013 10:33
Ненадежно же на флешку бекапы делать!

facpalm...
ну научись ты ЧИТАТЬ хоть сабжи!!

Ты же русский вроде? Тема называется "Создание бекапов". Храни их хоть на луне!
eddy писал(а):
23.11.2013 10:33
А учитывая то, что у нас нонче в стране вообще происходит "запретизация всего", в случае повреждения кино/музыки их и скачать-то неоткуда будет ☹

ed2k для кого придумали?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: создание бекапов домашнего компьютера

Сообщение drBatty »

SLEDopit писал(а):
23.11.2013 11:27
У меня бэкапится практически вся информация с рабочей машины ( за исключением фильмов и прочей ненужной фигни ) и объём бэкапа достигает 400Гб.

ЧТО у вас бекапится? Вы что, в самом деле способны каждые N минут своей работы генерить 400Гб???? У меня вот больше 80К не получается...
SLEDopit писал(а):
23.11.2013 11:27
Из плюсов - бэкапиться можно и удалённо

ох... Про "локально" это вы Эдди наслушались? Ну да, у меня -- локально. Кто вам сказал, что ТОЛЬКО локально?
SLEDopit писал(а):
23.11.2013 11:27
Из минусов - решение не из самых бюджетных, но безопасность - штука дорогая, куда деваться.

если каждые N минут генерить 400Гб уникального контента -- да, моя система бекапа явно не подходит. Откуда я знал, что вы делаете бекапы всех НИИ Калифорнии?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: создание бекапов домашнего компьютера

Сообщение eddy »

drBatty писал(а):
23.11.2013 17:36
Тема называется "Создание бекапов"

А чего там создавать-то? Натравил cp или еще что - и готово.
drBatty писал(а):
23.11.2013 17:36
ed2k для кого придумали?

Что, из-за прокси оно работает?
drBatty писал(а):
23.11.2013 17:42
если каждые N минут генерить 400Гб уникального контента

Зачем? Просто раз в месяц делать бэкап пары десятков терабайт порноколлекции ☺
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: создание бекапов домашнего компьютера

Сообщение drBatty »

eddy писал(а):
23.11.2013 19:01
А чего там создавать-то? Натравил cp или еще что - и готово.

400Гб? А, ну понятно...
eddy писал(а):
23.11.2013 19:01
Что, из-за прокси оно работает?

да.
eddy писал(а):
23.11.2013 19:01
Зачем? Просто раз в месяц делать бэкап пары десятков терабайт порноколлекции

для большей надёжности я делаю бекапы постоянно, но по чуть-чуть.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: создание бекапов домашнего компьютера

Сообщение drBatty »

и вообще, если кто не понял, тема о том, как делать бекап, в случае, если тупой команды cp недостаточно. Потому-что не хватает времени и/или других ресурсов. Какие при этом возникают проблемы, и как их решать.

http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: создание бекапов домашнего компьютера

Сообщение Bizdelnick »

drBatty писал(а):
23.11.2013 17:42
Вы что, в самом деле способны каждые N минут своей работы генерить 400Гб???? У меня вот больше 80К не получается...

RAW-фотография, сделанная моим фотоаппаратом, весит порядка 15M. А некоторые видео снимают...
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: создание бекапов домашнего компьютера

Сообщение SLEDopit »

drBatty писал(а):
23.11.2013 17:42
если каждые N минут генерить 400Гб уникального контента -- да, моя система бекапа явно не подходит.
ок, про diff я пропустил. мне показалось, что оно каждый раз архивирует полностью все файлы.

Однако даже тот факт, что бэкапится исключительно diff, не делает бэкап в разы удобнее: потому что в случае с упомянутыми фотографиями, количество новой информации может быть до 32Гб за 5-10 минут ( полностью копируется содержимое карточки с фотоаппарата ) или до 80Гб, если копируется видео. Потом оно всё подчищается, ужимается до более человеческих размеров ( так 160Гб видео может превратиться в 5 после обработки. сырцы я не храню ), но это не играет разницы.
В rsnapshot в любой момент времени у меня есть доступ к полному бэкапу за любой момент времени, когда бэкап был снят. При этом места всё это занимает не больше, чем бэкапить diff'ами ( если не архивировать ). Это куда удобнее, чем прыгать с кучей архивов и пытаться построить полный архив на конкретный момент времени.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: создание бекапов домашнего компьютера

Сообщение drBatty »

Bizdelnick писал(а):
23.11.2013 23:40
RAW-фотография, сделанная моим фотоаппаратом, весит порядка 15M. А некоторые видео снимают...

учитесь читать
drBatty писал(а):
22.11.2013 15:49
и переместил туда все большие публичные "папки", вроде Download & Music. Ну а внутри $HOME я создал симлинки.

тема совсем не про ваши фотоаппараты.

SLEDopit писал(а):
24.11.2013 00:07
Однако даже тот факт, что бэкапится исключительно diff, не делает бэкап в разы удобнее: потому что в случае с упомянутыми фотографиями, количество новой информации может быть до 32Гб за 5-10 минут

уважаемый: возьмите с полки пирожок. Там два. Возьмите тот, что посередине.

У меня тоже есть такие каталоги, они работают отдельным бекапом.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: создание бекапов домашнего компьютера

Сообщение drBatty »

SLEDopit писал(а):
24.11.2013 00:07
Это куда удобнее, чем прыгать с кучей архивов и пытаться построить полный архив на конкретный момент времени.

если вы храните в облаках свои секретные файлы, то вы просто дурак. Всегда ваш, Капитан Очевидность.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: создание бекапов домашнего компьютера

Сообщение SLEDopit »

drBatty писал(а):
24.11.2013 09:21
если вы храните в облаках свои секретные файлы, то вы просто дурак. Всегда ваш, Капитан Очевидность.
Ну это само собой разумеется. Однако, свой личный железный сервер в ДЦ с шифрованием и связью исключительно через ssh - это не чужое облако.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: создание бекапов домашнего компьютера

Сообщение drBatty »

SLEDopit писал(а):
24.11.2013 11:43
drBatty писал(а):
24.11.2013 09:21
если вы храните в облаках свои секретные файлы, то вы просто дурак. Всегда ваш, Капитан Очевидность.
Ну это само собой разумеется. Однако, свой личный железный сервер в ДЦ с шифрованием и связью исключительно через ssh - это не чужое облако.

ну вот эта тема про НЕ ДЦ
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Ответить