#/bin/sh# EN: Free for non-commercial use. Commersoal users must resive wriren permission of the author.
# RU: Свободна для некоммерческого использования. Коммерсанты должны получить письменное согласие автора.
# Необходимо предварительно скопировать в /home/backup каталоги которые станут корнями оптических дисков.
# Для автоматизированы стоит использовать программы: cdbackup, cdbkup, sync2cd.
# Необходимо создать пару gpg ключей 'backup' для подписи "индексов".
# Формируем индексный файл в формате: один объект - одна строка вида:
#DATA путь/к/файлу размер название_хеша1 хеш1 название_хеша2 хеш2...
cd /home/backup
rm -f Manifest index
for dir in `ls .`
do
cd "${dir}"
gpg --armor --export backup --output backup.pub
rhash --printf=DATA\ %p\ %s\ SHA3_512\ %{sha3-512}\ WHIRLPOOL\ %w\\n --recursive -- . |grep -v -E '^DATA Manifest ' |sort -f -d > Manifest
echo "${dir}" >> ../index
cat Manifest |sed "s/^DATA /${dir}\//" >> ../index
date --utc +'TIMESTEMP '%Y'-'%m'-'%d'T'%H':'%M':'%S'Z' >> Manifest
gpg --digest-algo sha512 --clear-sign --default-key backup --output Manifest.asc Manifest
mv Manifest.asc Manifest
cd ..
mkisofs -sysid "${dir}" -o "${dir}.iso" -R -J -hfs "${dir}"
rhash --printf=DATA\ %p\ %s\ SHA3_512\ %{sha3-512}\ WHIRLPOOL\ %w\\n -- "${dir}.iso" >> Manifest
done
date --utc +'TIMESTEMP '%Y'-'%m'-'%d'T'%H':'%M':'%S'Z' >> Manifest
gpg --digest-algo sha512 --clear-sign --default-key backup --output Manifest.asc Manifest
mv Manifest.asc Manifest
gpg --armor --export backup --output backup.pub
# Теперь надо сделать две вещи, распечатать backup.pub и уничтожить секретный ключ backup.
exit 0
Скрипт приведённый выше работает быстро, выдаёт де факто стандарт - файл Manifest, который понимают множество программ и записывает его в корень диска. Также создаётся глобальный index архива, со списком файлов, размеров и контрольных сум (хешей).
Хеши в rhash можно выбирать разные, для ускорения можно даже использовать:
"...\ CRC32\ %c\ ..."
Без хешей будет невозможно в будущем верифицировать целостность данных.
Есть и другие программы которые создают точно такой же Manifest файл.
Манифест /home/backup/Manifest, с перечнем iso образов архива, можно также распечатать, а файл хорошо прятать вместе с /home/backup/index.
Если решили корневой манифест печатать то вторую команду rhash в цикле лучше заменить на:
rhash --printf=DATA\ %p\ %s\ SHA1\ %B{sha1}\\n -- "${dir}.iso" >> Manifest
Используйте для ключей сильную крыптографию по элептических кривых, их ключи меньше места при печати занимают. Печать публичного ключа и подписанного корневого манифеста архива влезет на 1 лист А4.