ZFS Snapshots в Glacier или бэкап бэкапов

После того как на сервере бэкапов, скопилось достаточно данных, появилась мысль что нужно это хоть иногда но тоже бэкапить. Вариантов было 2 это еще одна железка на которую скидывать снимки или AWS со своим Glacier куда отправлять их в виде архивов, решено было опробовать Glacier. Amazon пишет что этот сервис предназначен для редкоиспользуемых данных или как они это называют "холодных данных". Поковыряв aws cli и погуглив, нашел glacier-cmd который мне понравился больше, на его основе и накостылил.
Ставится в пол тычка
git clone https://github.com/uskudnik/amazon-glacier-cmd-interface.git
cd amazon-glacier-cmd-interface/
python setup.py install
Создаем конфиг /etc/glacier-cmd.conf для него нам нужны Secret Access и Access Key
Ну собственно как их отправлять, мне надо слать zfs снимки максимально пожатые, все это будет запускать дженкинс раз в месяц и слать на почту отчет все ли ок...
Попробуем запаковать что-то, но прежде надо выяснить оптимальный формат по времени/размеру
Жмем контейнер с мускулем размером 1.6Gb
time zfs send data/hourly/lxc@zfs-auto-snap_hourly-2017-07-02-1535 | gzip -9 > gzip_9.gz
real	3m28.468s
user	3m27.160s
sys	0m3.060s
После запуска pigz -11 LA улетел в космос и составил 40 единиц, время составило
real	12m1.675s
user	321m16.472s
sys	0m39.508s
pigz -9 справился быстро
real	0m15.222s
user	4m55.148s
sys	0m4.776s
pigz -8 еще быстрей
real	0m10.638s
user	3m11.556s
sys	0m4.356s
По итогу, оказалось что -7 оптимально по скорости/размеру
time zfs send data/hourly/lxc@zfs-auto-snap_hourly-2017-07-02-1535 | pigz -7 > gzip_7.gz
real	0m8.278s
user	2m2.152s
sys	0m4.100s
ls -lhS
total 5.2G
-rw-r--r-- 1 root root 1.6G Oct 26 15:17 clear.img
-rw-r--r-- 1 root root 741M Oct 26 15:41 pigz_7.gz
-rw-r--r-- 1 root root 740M Oct 26 15:43 pigz_8.gz
-rw-r--r-- 1 root root 740M Oct 26 15:15 gzip_9.gz
-rw-r--r-- 1 root root 740M Oct 26 15:36 pigz_9.gz
-rw-r--r-- 1 root root 719M Oct 26 15:35 pigz_11.gz
Настало время отправить в ледник наш файл
glacier-cmd upload test-vault pigz_7.gz 
Wrote 740.9 MB. Rate 3.97 MB/s.%). Rate 5.54 MB/s, average 3.98 MB/s, ETA 15:54:16.                                                                                                                                                    
+--------------------------+------------------------------------------------------------------+                                                                                                                
|          Header          |                              Value                               |
+--------------------------+------------------------------------------------------------------+
| Archive SHA256 tree hash | 09e1c1a69a6e12259f9df1c70b16ca7c255ccfcafab61124e0f446ed5db9d67d |
|      Uploaded file       |                            pigz_7.gz                             |
+--------------------------+------------------------------------------------------------------+
Запросил инфу о том что в хранилище, время обработки 3-4 часа
glacier-cmd inventory test-vault
+---------------------------+----------------------------------------------------------------------------------------------+
|           Header          |                                            Value                                             |
+---------------------------+----------------------------------------------------------------------------------------------+
|           Status          |                               Inventory retrieval in progress.                               |
|           Job ID          | iWlNEQISQt46FqlSWzsaNrb3bATEFcoYsBwA-WCqPQD8oRijxNOV6-uef2QxiZX9cuVzXaQ2V84O1rwW9XXCHsL6V1-5 |
| Job started (time in UTC) |                                   2017-10-27T10:47:40.927Z                                   |
+---------------------------+----------------------------------------------------------------------------------------------+
Можно посмотреть что у нас в работе
glacier-cmd listjobs test-vault
+------------------------------------------------------------------+----------------------------------------------------------------------------------------------+------------+--------------------+--------------------------+------------+
|                             VaultARN                             |                                            Job ID                                            | Archive ID |       Action       |        Initiated         |   Status   |
+------------------------------------------------------------------+----------------------------------------------------------------------------------------------+------------+--------------------+--------------------------+------------+
|    arn:aws:glacier:eu-central-1:779573928563:vaults/test-vault   | iWlNEQISQt46FqlSWzsaNrb3bATEFcoYsBwA-WCqPQD8oRijxNOV6-uef2QxiZX9cuVzXaQ2V84O1rwW9XXCHsL6V1-5 |    None    | InventoryRetrieval | 2017-10-27T10:47:40.927Z | InProgress |
+------------------------------------------------------------------+----------------------------------------------------------------------------------------------+------------+--------------------+--------------------------+------------+
Спустя 4 часа можно посмотреть что же у нас там в хранилище
glacier-cmd inventory test-vault
Inventory of vault: arn:aws:glacier:eu-central-1:779573925563:vaults/test-vault
Inventory Date: 2017-10-27T00:10:22Z

Content:
+--------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------+----------------------+------------------------------------------------------------------+-----------+
|                                                                 Archive ID                                                                 |               Archive Description               |       Uploaded       |                         SHA256 tree hash                         |    Size   |
+--------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------+----------------------+------------------------------------------------------------------+-----------+
| 6QC8dpCOB4Vpxyj-4gWaKTaoU8Ho1T9NbSG2JzcD8hBVREDk1Wf4x7jNCNl_k7s_i3q_5gSloD_wmDSEWIlab438iGByJBq2Wlq6nNnWVq-vTYDmodYQCPhIxGyWe2PQAXxE-NWC0A | pigz_7.gz                                       | 2017-10-26T15:54:16Z | acf419d47a976045d84b24ac9f8708428526741f033f9d13268029c6ec6a1166 | 776900631 |
+--------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------+----------------------+------------------------------------------------------------------+-----------+
This vault contains 1 items, total size 740.9 MB.
Для восстановления надо запросить наш архив, опять ожидаем 4 часа :D
glacier-cmd getarchive test-vault 6QC8dpCOB4Vpxyj-4gWaKTaoU8Ho1T9NbSG2JzcD8hBVREDk1Wf4x7jNCNl_k7s_i3q_5gSloD_wmASEWIlab438iGByJBq2Wlq6nNnWVq-vTYDmodYQCPhIxGyWe2PQAXxE-NWC0A 
+-----------+----------------------------------------------------------------------------------------------+
|   Header  |                                            Value                                             |
+-----------+----------------------------------------------------------------------------------------------+
|   JobId   | i6I4Q5CWnLklQl6eK0rsysrE8CrPcvk65zhrRQCIX5VkZle0m6kSUltLC95X38e8KjIk4iU5A4MbjAd2BVYi_6C5RL37 |
| RequestId |                       H95u2kU6zU3lGxn9OccodyUg-VlohF3n63s21US9fOVYrG4                        |
+-----------+----------------------------------------------------------------------------------------------+
Ну и по готовности забираем
glacier-cmd download test-vault '6QC8dpCOB4Vpxyj-4gWaKTaoU8Ho1T9NbSG2JzcD8hBVREDk1Wf4x7jNCNl_k7s_i3q_5gSloD_wmASEWIlab438iGByJBq2Wlq6nNnWVq-vTYDmodYQCPhIxGyWe2PQAXxE-NWC0A' --outfile gpigz_7.gz
Wrote 740.9 MB. Rate 3.64 MB/s.). Rate 4.06 MB/s, average 3.64 MB/s, ETA 13:38:16.                                                                                                                                                     
Ну а дальше дело за малым, накостылить...
backup_to_aws.sh
#!/bin/bash
DATE=`date +%Y-%m-%d`
ALL_LXC=0
ALL_SNAPSHOTS=0
VAULT=vault
SOURCE=(
"/data/host1/daily"
"/data/host2/daily"
"/data/host3/daily"
"/data/host4/daily"
"/data/host5/daily"
"/data/host6/daily"
)

for i in "${SOURCE[@]}"
do

for x in `zfs list -r $i | grep lxc | awk {'print $1'}`
do
        ALL_LXC=$[$ALL_LXC +1]
done;

for y in `zfs list -t snapshot -r $i | grep $DATE | awk {'print $1'}`
do
        name=$(echo $y | cut -d '/' -f 5)
        echo "Compression: $y"
        zfs send $y | pigz -7 > /data/other/aws/$name.gz
        echo "Send: $name"
        glacier-cmd upload $VAULT /data/other/aws/$name.gz
#       aws glacier upload-archive --account-id - --vault-name $VAULT --body /data/other/aws/$name.gz
        result=$?

        if [ $result == 0 ]; then
                echo "Delete local archive"
                rm /data/other/aws/$name.gz
        else
                echo "Upload FAILED"
        fi

        ALL_SNAPSHOTS=$[$ALL_SNAPSHOTS +1]
        sleep 600;
done;
done;
echo "All lxc fs on host: $ALL_LXC"
echo "Count snapshots on $DATE: $ALL_SNAPSHOTS"
Скрипт у меня дергается раз в месяц, архивирует снимки контейнеров и отправляет в Amazon, в первые разы столкнулся с проблемой
boto.glacier.exceptions.UnexpectedHTTPResponseError: Expected 204, got (408, code=RequestTimeoutException, message=Request timed out.)
Помог sleep 600, так же пробовал через aws cli, и натыкался на ту же ошибку, в итоге вернулся на glacier-cmd с добавленой паузой.
Полезное:
Тут про 408
AWS CLI