20080219

Резервное копирование и шифрование архивов с помощью cpio (или tar) и gpg

Есть много программ для организации резервного копирования, простых и сложных. Однако часто достаточно самого простого: запаковать, зашифровать и положить на удалённую машину (записать на внешний диск, DVD и т.д). А это делается простыми (стандартными) инструментами — cpio и gpg — всего пара команд. Или tar и gpg — тоже пара команд.

Создание архива:
$ cd ~/work && \
find . -depth -print0 | \
cpio -0 -o | \
gpg -c -a > /mnt/remote/backup/work.cpio.gpg
find найдёт в текущем каталоге (~/work) все файлы и каталоги, cpio упакует их в единый архив, gpg спросит пароль и зашифрует симметричным алгоритмом.

Восстановление из резервной копии:
$ mkdir ~/work-restore && \
cd ~/work-restore && \
gpg -d /mnt/remote/backup/work.cpio.gpg | cpio -idv


Можно ещё и сжать bzip2, если между cpio и gpg вставить bzip2 -c. Создание архива:
$ find . -depth -print0 | cpio -0 -o | bzip2 -c | gpg -c -a > arhive.cpio.bz2.gpg
Восстановление из резервной копии:
$ gpg -d archive.cpio.bz2.gpg | bzcat -c | cpio -idv

Проще уже некуда. И при этом вся гибкость find к нашим услугам. А это значит, что гораздо проще заархивировать только нужные файлы, а не все подряд. Например, файлы изменённые за последние двое суток легко отбираются с помощью:
$ find . -ctime -2


P.S. Конечно, вместо cpio можно пользоваться и tar. Вот только использовать тогда find для выбора нужных файлов — затруднительно. Если нужно запаковать каталог целиком, то поступать можно так:
$ cd ~/work && \
tar cj . | gpg -c -a > /mnt/remote/backup/work.tar.bz2.gpg
а распаковать так:
$ mkdir ~/work-restore && \
cd ~/work-restore && \
gpg -d work.tar.bz2.gpg | tar jx
Дополнение:Как заметил в комментариях Alexey, упаковать найденные find файлы можно и используя tar. В этом случае используется опции tar -T (читать список файлов из файла) и --null (имена файлов разделены нулевым байтом). Поясняю на примере, создание зашифрованного архива:
$ find . условия поиска -print0 | tar c --null -T - | gpg -c -a > файл_с_архивом.tar.gpg
и распаковка:
$ gpg -d файл_с_архивом.tar.gpg | tar x

В общем, дело вкуса.

Смотрите также:

Синхронизация каталогов по SSH+rsync и по FTP
Как сделать копию удалённого репозитория Subversion