Назад | Перейти на главную страницу

Шифрование резервных копий с помощью GPG на несколько лент

В настоящее время я использую tar для записи своих резервных копий (файлов ntbackup) на ленточный накопитель, загружаемый автозагрузчиком.

Пример: tar -F /root/advancetape -cvf /dev/st0 *.bkf (/ root / advancetape просто имеет логику перехода к следующей ленте, если она доступна, или уведомления о замене лент)

Недавно мне вручили требование шифровать наши резервные копии на магнитной ленте. Я могу легко зашифровать данные с помощью GPG. Проблема, с которой я столкнулся, заключается в том, как мне записать это на несколько лент с той же логикой, которую tar использует для продвижения лент после заполнения текущей? Я не могу сначала записать зашифрованный файл на диск (2 + ТБ). Насколько я могу судить, tar не принимает двоичный ввод от stdin (он ищет имена файлов). Любые идеи? :(

Я использую этот скрипт:

#!/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)

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

Вы можете реализовать это в своем сценарии -F. Вместо того, чтобы tar записывал непосредственно в / dev / st0, используйте временную промежуточную область. Убедитесь, что вы явно указали размер тома с помощью -L. Tar запишет в файл до байтов данных, а затем вызовет ваш сценарий -F. Затем ваш сценарий может запустить gpg для файла и отправить его на ленту (а затем удалить часть архива из области подготовки).

Для этого требуется только, чтобы в вашей файловой системе было доступно (x2) пространство на одной ленте.

Видеть http://www.gnu.org/software/tar/manual/html_node/Multi_002dVolume-Archives.html#SEC162 для получения дополнительной информации о переменных, доступных для вашего сценария -F.

РЕДАКТИРОВАТЬ: Также обратите внимание, что это полностью непроверенная идея! Я думал сделать что-то подобное, чтобы обеспечить сжатие многотомных архивов, но на самом деле я этого не реализовал.