Шифрование резервных копий с помощью GPG на нескольких лентах
В настоящее время я использую tar для записи своих резервных копий (файлов ntbackup) на накопитель на магнитной ленте, питаемый автозагрузчиком.
Пример:tar -F /root/advancetape -cvf /dev/st0 *.bkf
(/ root / advancetape просто имеет логику для перехода к следующей ленте, если она есть, или уведомляет об обмене лентами)
Мне недавно передали требование зашифровать наши резервные копии на магнитной ленте. Я могу легко зашифровать данные без проблем, используя GPG. У меня проблема в том, как мне записать это на несколько лент с той же логикой, которую tar использует для продвижения лент после заполнения текущей? Я не могу сначала записать зашифрованный файл на диск (2+ ТБ). Насколько я могу сказать, tar не будет принимать двоичный ввод от stdin (он ищет имена файлов). Есть идеи?:(
3 ответа
Я использую этот скрипт:
#!/bin/sh
TAPE="/dev/nst0"
mt-st -f $TAPE setblk 0
mt-st -f $TAPE status
totalsize=$(du -csb . | tail -1 | cut -f1)
tar cf - . | \
gpg --encrypt --recipient target@key.here --compress-algo none | \
pipemeter -s $totalsize -a -b 256K -l | \
mbuffer -m 3G -P 95% -s 256k -f -o $TAPE \
-A "echo next tape; mt-st -f $TAPE eject ; read a < /dev/tty"
Чтобы адаптировать его к вашим потребностям, вот основные моменты:
tar
читает из текущего каталога и выводит вstdout
, Таким образом, tar не работает со сменой лент или шифрованием.gpg
сжатие отключено, поскольку это значительно замедляет процесс (100 МБ / с + до 5 МБ / с)pipemeter
используется для наблюдения за процессом и предоставления приблизительного времени, пока все данные не будут записаны на ленту - его можно удалить, если он не нуженmbuffer
буферизует данные в памяти - в этом примере используется буфер объемом 3 ГБ, настраиваемый по мере необходимости, - чтобы накопитель на магнитной ленте работал дольше, прежде чем заканчивались данные, уменьшая "чистоту" ленты.-A
вариантmbuffer
обрабатывает несколько лент, извлекая ленту после достижения конца и ожидаяEnter
клавиша, которую нужно нажать после загрузки следующей ленты. Это где ваш/root/advancetape
Сценарий может идти.
При использовании этого с лентами LTO следует учитывать одну проблему:
- Размер блока ленты установлен на переменную, и
mbuffer
пишет в 256k блоков. Это хорошо работает для меня с приводом LTO3, однакоtar
любит использовать другой размер блока. Это в сочетании с тем, чтоmbuffer
обрабатывает охват ленты, а неtar
, означает, что вам нужно будет снова прочитать данные с ленты черезmbuffer
а затем передать его черезgpg
и наtar
, Если вы попытаетесь извлечь его прямо с ленты сtar
(даже если вы пропустили шифрование), оно, скорее всего, не будет работать и обязательно сломается, как только достигнет конца первой ленты, без возможности перехода на следующую ленту.
Я бы посоветовал вам взглянуть на этот вариант:
-I, --use-compress-program PROG
filter through PROG (must accept -d)
Вам может понадобиться написать скрипт, который принимает входные данные из stdin и шифрует их в stdout, но он должен работать. -D для распаковки, в этом случае вам нужно будет расшифровать ввод.
Вы можете реализовать это в своем скрипте -F. Вместо того, чтобы tar записывал напрямую в /dev/st0, используйте временную промежуточную область. Убедитесь, что вы указали размер тома явно, используя -L . Tar запишет в файл байты данных и затем вызовет ваш скрипт -F. Затем ваш скрипт может запустить gpg для файла и отправить его на ленту (а затем удалить часть архива из вашей промежуточной области).
Для этого необходимо, чтобы в вашей файловой системе было доступно место на одной ленте (x2).
См. http://www.gnu.org/software/tar/manual/html_node/Multi_002dVolume-Archives.html для получения дополнительной информации о переменных, доступных для вашего сценария -F.
РЕДАКТИРОВАТЬ: Также обратите внимание, что это совершенно не проверенная идея! Я думал о том, чтобы сделать что-то подобное, чтобы обеспечить сжатие многотомных архивов, но на самом деле я этого не реализовал.