Jump to content

Периодическое резервное копирование entware, конфига и прошивки


Recommended Posts

  • 1 year later...

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

Link to comment
Share on other sites

17 часов назад, Orbit сказал:

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

Это не сложно. Можно заменить блок кода в скрипте, где делается бэкап прошивки на код следующего вида:

Скрытый текст

# Делаем архив прошивки
if [ "$IsFirm" = "1" ]
    then
        logger -t $TAG "Starting backup firmware"
        REL=`ndmq -p 'show version' -P 'release'`
        ndmq -p "copy flash:/firmware ${BACFIRMDIR}firmware-${DATE}" -P message
        if [ -f "${BACSTORDIR}firmware-$REL" ]
            then
                CMPFIRM=`cmp ${BACSTORDIR}firmware-$REL ${BACSTORDIR}firmware-${DATE}`
                if [ -n "$CMPFIRM" ]
                    then
                        logger -t $TAG "Firmware is changed. Do new copy."
                        cp -f ${BACSTORDIR}firmware-${DATE} ${BACSTORDIR}firmware-$REL-new
                        mv -f ${BACSTORDIR}firmware-$REL ${BACSTORDIR}firmware-${DATE}
                        mv ${BACSTORDIR}firmware-$REL-new ${BACSTORDIR}firmware-$REL
                    else
                        logger -t $TAG "Firmware is not changed. Renew current firmware copy."
                        mv -f ${BACSTORDIR}firmware-${DATE} ${BACSTORDIR}firmware-$REL
                fi
            else
                logger -t $TAG "Current firmware copy not found. Is it first run? Do firmware copy."
                cp ${BACSTORDIR}firmware-${DATE} ${BACSTORDIR}firmware-$REL
        fi
    else
        logger -t $TAG "Skiping backup firmware"
fi

 

Ключевой элемент здесь - получение номера версии прошивки: REL=`ndmq -p 'show version' -P 'release'`

У себя код поменял. Вроде работает.

Отредактировать первое сообщение уже не могу. Так что меняйте, проверяйте и у себя.

  • Thanks 2
Link to comment
Share on other sites

  • 3 months later...
find $BACSTORDIR -mtime +${DAYSTOR} -delete

А здесь поправить, чтоб файлы типа   firmware-3.05.A.18.0-0 и тп вообще не удалялись.

Link to comment
Share on other sites

21 час назад, Orbit сказал:

find $BACSTORDIR -mtime +${DAYSTOR} -delete

А здесь поправить, чтоб файлы типа   firmware-3.05.A.18.0-0 и тп вообще не удалялись.

Тоже несложно. Достаточно мануал на команду find посмотреть. Выглядететь будет примерно так:

find $BACSTORDIR -mtime +${DAYSTOR} -a ! -name 'firmware*' -delete

 

  • Thanks 1
Link to comment
Share on other sites

  • 2 months later...

Камрады подскажите почему скрипт бэкапит прошивку и конфиг странно? Конфиг в архиве и без и файл прошивки под разными именами.  

Скрытый текст

1862169285_.jpg.be7da0c70c856d498bd181a06cf34e57.jpg

 

Edited by batonskij
Link to comment
Share on other sites

12 часа назад, batonskij сказал:

Камрады подскажите почему скрипт бэкапит прошивку и конфиг странно? Конфиг в архиве и без и файл прошивки под разными именами.  

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

Что касается конфига, то его последняя версия кладется в файл  -cur. Если были изменения от текущего его содержимого (а у вас, наверное, конфиг изменялся), старая версия конфига как раз перемещается в архив с датой.

Не исключаю, что где-то в скрипте есть баг и нарушена логика именования файлов. У меня например вот такое текущее содержимое каталога с бэкапами (конфиг давно не менялся):

Скрытый текст

-rw-r--r--    1 root     root         12710 Oct 29 04:11 config-cur
-rw-r--r--    1 root     root      61940493 Oct 17 04:11 entware-2020-10-17.tgz
-rw-r--r--    1 root     root      61905163 Oct 18 04:11 entware-2020-10-18.tgz
-rw-r--r--    1 root     root      61900733 Oct 19 04:11 entware-2020-10-19.tgz
-rw-r--r--    1 root     root      62372808 Oct 20 04:11 entware-2020-10-20.tgz
-rw-r--r--    1 root     root      62372381 Oct 21 04:11 entware-2020-10-21.tgz
-rw-r--r--    1 root     root      62364753 Oct 22 04:11 entware-2020-10-22.tgz
-rw-r--r--    1 root     root      62357246 Oct 23 04:12 entware-2020-10-23.tgz
-rw-r--r--    1 root     root      61511681 Oct 24 04:11 entware-2020-10-24.tgz
-rw-r--r--    1 root     root      61622223 Oct 25 04:11 entware-2020-10-25.tgz
-rw-r--r--    1 root     root      61732790 Oct 26 04:11 entware-2020-10-26.tgz
-rw-r--r--    1 root     root      61726866 Oct 27 04:11 entware-2020-10-27.tgz
-rw-r--r--    1 root     root      61719782 Oct 28 04:11 entware-2020-10-28.tgz
-rw-r--r--    1 root     root      61741802 Oct 29 04:11 entware-2020-10-29.tgz
-rw-r--r--    1 root     root      12648508 Oct 22 04:11 firmware-2.16.D.6.0-1
-rw-r--r--    1 root     root      12648508 Oct 28 04:11 firmware-2.16.D.7.0-0
-rw-r--r--    1 root     root      12648508 Oct 29 04:12 firmware-2.16.D.7.0-1
-rw-r--r--    1 root     root      12648508 Oct 23 04:12 firmware-2020-10-23
-rw-r--r--    1 root     root      12648508 Oct 29 04:12 firmware-2020-10-29

На всякий случай выкладываю полный код скрипта последней версии (в первом собщении изменить уже не могу):

Скрытый текст

#!/opt/bin/sh

# VERSION 2.1

# Скрипт сохраняет резервную копию entware, конфига роутера и прошивки

prefix="/opt"
PATH=${prefix}/bin:${prefix}/sbin:/sbin:/bin:/usr/sbin:/usr/bin

#=====================================================================================
# Конфигурационные параметры скрипта
#=====================================================================================
# Префикс для записи сообщений в syslog
TAG=Backup

# Каталог, куда сохранять бэкапы
BACSTORDIR=/tmp/mnt/ADATA/backup/

# Какие компоненты бэкапить (1|0)
# Entware. Всегда сохраняется новая копия
IsEnt=1
# Конфигурация роутера. Сохраняется копия, если были изменения в конфиге
IsConf=1
# Прошивка. Создается резервная копия, если прошивка изменялась
IsFirm=1

# Префикс для имени файла с бэкапом
BACNAME=entware

# Что архивировать
BACDIR=/opt/

# Какие каталоги пропускать при бэкапе entware
EXCLUDE="
tmp
var/log
share/nginx/html
var/mysql
"

# При определении изменялся ли конфиг, не учитывать данные строки (через экраннированн[Kсимвол "Иm{И" -> "\|".
# При сравнении копий конфига не учитываются служебные строки, начинающиеся на '! $$$', и с
трока 'clock date', т.к. она обновляется при считывании конфига
# m{учше не трогать :)
EXCLCONFCMD='\! \$\$\$\|clock date'

# Путь к резервной копии прошивки на USB FLASH. Определить в CLI по команде 'ls ?'. Обычно это мет
ка диска в виде 'LABEL:/'
BACFIRMDIR=ADATA:/backup/

# Сколько дней хранить бэкапы.
DAYSTOR=12

#=====================================================================================
# Начало скрипта
#=====================================================================================
# Текущая дата для формирования имени файла с архивом
DATE=`date +%Y-%m-%d`

logger -t $TAG "Starting process"
cd $BACDIR

# Делаем архив entware
if [ "$IsEnt" = "1" ]
    then
        logger -t $TAG "Starting backup entware"
        echo "$EXCLUDE" | tar -X - -cf - * | gzip > ${BACSTORDIR}${BACNAME}-${DATE}.tgz
    else
        logger -t $TAG "Skiping backup entware"
fi

# Делаем архив конфига
if [ "$IsConf" = "1" ]
    then
        logger -t $TAG "Starting backup config"
        ndmq -p "show running-config" -P message > ${BACSTORDIR}config-${DATE}
        if [ -f "${BACSTORDIR}config-cur" ]
            then
                OLDCONF=`grep -v "${EXCLCONFCMD}" ${BACSTORDIR}config-cur`
                CURCONF=`grep -v "${EXCLCONFCMD}" ${BACSTORDIR}config-${DATE}`
                if [ "$OLDCONF" != "$CURCONF" ]
                    then
                        logger -t $TAG "Config is changed. Do new copy."
                        cp -f ${BACSTORDIR}config-${DATE} ${BACSTORDIR}config-cur-new
                        mv -f ${BACSTORDIR}config-cur ${BACSTORDIR}config-${DATE}
                        gzip -f ${BACSTORDIR}config-${DATE}
                        mv ${BACSTORDIR}config-cur-new ${BACSTORDIR}config-cur
                    else
                        logger -t $TAG "Config is not changed. Renew current config copy."
                        mv -f ${BACSTORDIR}config-${DATE} ${BACSTORDIR}config-cur
                fi
            else
                logger -t $TAG "Current config copy not found. Is it first run? Do config copy."
                cp ${BACSTORDIR}config-${DATE} ${BACSTORDIR}config-cur
                gzip -f ${BACSTORDIR}config-${DATE}
        fi
    else
        logger -t $TAG "Skiping backup config"
fi
# Делаем архив прошивки
if [ "$IsFirm" = "1" ]
    then
        logger -t $TAG "Starting backup firmware"
        REL=`ndmq -p 'show version' -P 'release'`
        ndmq -p "copy flash:/firmware ${BACFIRMDIR}firmware-${DATE}" -P message
        if [ -f "${BACSTORDIR}firmware-$REL" ]
            then
                CMPFIRM=`cmp ${BACSTORDIR}firmware-$REL ${BACSTORDIR}firmware-${DATE}`
                if [ -n "$CMPFIRM" ]
                    then
                        logger -t $TAG "Firmware is changed. Do new copy."
                        cp -f ${BACSTORDIR}firmware-${DATE} ${BACSTORDIR}firmware-$REL-new
                        mv -f ${BACSTORDIR}firmware-$REL ${BACSTORDIR}firmware-${DATE}
                        mv ${BACSTORDIR}firmware-$REL-new ${BACSTORDIR}firmware-$REL
                    else
                        logger -t $TAG "Firmware is not changed. Renew current firmware copy."
                        mv -f ${BACSTORDIR}firmware-${DATE} ${BACSTORDIR}firmware-$REL
                fi
            else
                logger -t $TAG "Current firmware copy not found. Is it first run? Do firmware copy."
                cp ${BACSTORDIR}firmware-${DATE} ${BACSTORDIR}firmware-$REL
        fi
    else
        logger -t $TAG "Skiping backup firmware"
fi

logger -t $TAG "Finished"
cd $BACSTORDIR

# Выводим в лог список удаленных файлов-архивов
logger -t $TAG "Remove old archives"
FILES=`find $BACSTORDIR -mtime +${DAYSTOR} -print -delete`
logger -t $TAG "Removed: $FILES"
logger -t $TAG "Exiting"

 

Можно переместить текущее содержимое бэкапов в другой каталог и проверить функционал по новой.

Edited by gvan
  • Thanks 1
Link to comment
Share on other sites

  • 3 months later...
10 минут назад, roma33region сказал:

подскажите как сделать чтоб сохранение бекампа было например на гугл диск

В рамках данного решения (скрипта) этого не предусмотрено. Посмотрите каталог готовых решений для opkg. Возможно, что-то найдете для копирования (переноса) данных на облачные сервисы. Например, упоминается rclone.

Соответственно, если получится его настроить, то в конец скрипта добавите необходимые строки для синхронизации локального каталога с бэкапами на облако.

Link to comment
Share on other sites

  • 3 weeks later...
В 29.10.2020 в 08:31, gvan сказал:

На всякий случай выкладываю полный код скрипта последней версии (в первом собщении изменить уже не могу):

Приветствую
Можно попросить выложить файлом, а то здесь форматирование бъётся

Скрытый текст

# При определении изменялся ли конфиг, не учитывать данные строки (через экраннированн[Kсимвол "Иm{И" -> "\|".
# При сравнении копий конфига не учитываются служебные строки, начинающиеся на '! $$$', и с
трока 'clock date', т.к. она обновляется при считывании конфига
# m{учше не трогать :)

 


 

Link to comment
Share on other sites

3 часа назад, yrzorg сказал:

Можно попросить выложить файлом, а то здесь форматирование бъётся

Да, вижу, что кое-что побилось. Выкладываю файл backup.zip

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...