Backup'им huawei

 · 6 mins read

Будем backup’ить huawei средствами VRP и U2000. Напишем ротацию на bash.

1. Из коробки

Huawei умеет бэкапить конфигурацию “из коробки”. Делается это так:

set save-configuration
set save-configuration interval 720 delay 60
set save-configuration backup-to-server server X.X.X.X transport-type ftp user user_name password user_password path path_to_backup_files

Первой командой включаем функцию сохранения конфигурации. Теперь VRP будет периодически проверять конфигурационный файл и выполнять автосохранение только, если зафиксирует изменения. Да, сохраняться конфигурационный файл, сперва, будет на flash-память устройства. Без этого никак. Иногда, автосохранение приносит больше вреда, чем пользы. Но, если отключить, то сохранить конфигурацию на удаленный сервер также не получится. Единственное решение - настроить таймеры.

Второй командой настраиваем таймеры. interval 720 - время в минутах, через которое конфигурация будет сохранена автоматически (минимум - 30, максимум - 43200). delay 60 - если конфигурация была изменена, то auto-save будет выполнен через 60 минут (минимум - 1, максимум - 60). Если не изменять таймеры, то значение по умолчанию для interval - 30 минут, для delay - 5 минут. Здесь же доступна опция cpu-limit, по умолчанию, 50%, это порог, при котором конфигурация автоматически сохраняться не будет.

Третьей командой можно отправлять измененный файл конфигурации (или архив) на удаленный tftp/ftp/sftp сервер. Наш выбор - sftp. Сервер нужно настроить заранее, он должен быть доступен.

Сохранение конфигурации на самом устройстве всегда можно выполнить вручную, командой save. При этом через delay auto-save на удаленный сервер выполнен не будет, а через interval будет, независимо от того, был ли выполнен save на устройстве или нет. А вот если не делать save вручную на устройстве, то либо через interval, либо через delay (в зависимости от того, какой таймер сработает раньше) будет выполнен auto-save и на самом устройстве, и на удаленный сервер.

Файл на удаленный сервер сохраняется в следующем формате - 2019-02-28.18-59-40.your_device_sysname.zip

Файлов на сервере будет много, нужно ротировать. Предположим, что мы не можем использовать logrotate, напишем ротацию на bash, назовем rotationscript.sh и добавим в cron:

#!/bin/sh
find /path_to_backup_files/ -name "*.zip" -print | sort | uniq -D -s 42 > /path_to_backup_files/sort.sh # Составим общий список повторяющихся файлов конфигурации для всех устройств. Ищем в директории, где храним конфигурационные файлы, все *.zip (если сохраняете в zip), сортируем (старые файлы будут сверху), игнорируем первые 42 символа (т.к. в выводе будет полный путь до файла, включая дату создания), опция -D позволяет вывести все повторяющиеся строки, не изменяя их число, добавляем вывод в файл sort.sh.
var=0
for x in $(find /path_to_backup_files/ -name "*.zip" -print | sort | uniq -d -s 42 | cut -d. -f3) # Начнем проверку для конкретного устройства. С помощью цикла, по порядку, проверяем каждое устройство, присваиваем переменной x каждую повторяющуюся строку из списка, с помощью cut оставляем только your_device_sysname.zip
        do Array[$var]=$x # Присваиваем элементу массива значение переменной x
        for y in $(grep ${Array[$var]} /path_to_backup_files/sort.sh | wc -l) # с помощью цикла считаем число конфигурационных файлов для текущего, проверяемого устройства
                do if [ $y -le 7 ] # будем оставлять только 7 последних файлов конфигурации для каждого устройства. Если текущее число меньше, либо равно 7, то выходим из цикла
                then
                break
                else # иначе запускаем цикл, который оставит только 7 "свежих" файлов конфигурации для проверяемого устройства
                z=$(( $y - 7 )) # присваиваем лишнее число файлов конфигурации (все, что > 7) переменной z
                for a in $(grep ${Array[$var]} /path_to_backup_files/sort.sh) # удаляем по одному самому "старому" файлу конфигурации для текущего, проверяемого устройства
                        do if [ $z -gt 0 ]
                        then
                        rm -f $a
                        z=$(( $z - 1 ))
                        else
                        break # выходим из цикла, когда остается 7 "свежих" файлов конфигурации для данного устройства
                        fi
                done
                fi
        done
var=$(( $var + 1 )) # переходим к проверке следующего устройства
done
> /path_to_backup_files/sort.sh # очищаем файл со всем списком конфигурационных файлов

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

Добавляем скрипту права на исполнение:

chmod +x rotationscript.sh

Добавляем в /etc/crontab для выполнения в указанное время (ежедневно в 00:50):

#minute hour    mday    month   wday    who     command
50      00      *       *       *       root    /path/to/rotationscript.sh

Скрипт будет выполнять ротацию ежедневно, оставляя для каждого устройства не более 7 файлов конфигурации. Хотя файлы конфигурации и небольшие, можно добавить ротацию для файлов, которые хранятся больше 365 дней. Поможет атрибут -mtime 365 для find

2. Из U2000

Настроим U2000 для сохранения файлов конфигурации на удаленный sftp-сервер.

  • Administration > Settings > FTP Account Information Management > Configure FTP Account > создаем account для доступа к удаленному sftp-серверу.
  • Administration > NE Software Management > NE Backup Policy Management > Default Policy > Modify > Advanced Settings > в поле Destination указываем созданный sftp-account
  • Administration > NE Software Management > NE Data Backup/Restoration > выделяем все устройства, пробуем выполнить backup на удалнный sftp-сервер

U2000 создаст дерево каталогов при первом копировании: dc > bak* > X.X.X.*_Y > date_of_backup > vrpcfg.zip + DCInfo_Backupinfo.txt

  • *- последний октет ip-адреса устройства. Если он совпадает для нескольких устройств, то такое число каталогов и будет создано
  • date_of_backup - имя каталога в виде даты сохранения конфигурации (например, 20191024000015)
  • DCInfo_Backupinfo.txt - файл с версией софта устройства

Напишем ротацию для этого метода. Упростим предыдущий скрипт:

#!/bin/sh
for x in $(find /path_tobackup_files -name "*.cfg" -o -name "*zip" -print | sort | cut -d_ -f1-3 | uniq -d | cut -d/ -f7) # поскольку в названии каталога есть ip-адрес устройств, то оставляем только уникальные ip-адреса/каталоги
        do y=$(find /path_to_backup_files -name "$x*" -print)
        cd $y # переходим в такой каталог
                for a in $(find $y/* -type d | sort) # для каждой такой директории
                do z=$(ls | sort | wc -l) # считаем число buckup'ов
                if [ $z -le 2 ] # и оставляем последние 2
                then
                break
                else # если backup'ов больше 2, удаляем лишние
                rm -Rf $a
                fi
                done
done

Добавляем скрипт в crontab.

tags: huawei backup bash