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

  • Thanks 3
Link to comment
Share on other sites

  • 11 months later...
В 14.03.2021 в 12:56, gvan сказал:

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

Подскажите, почему может игнорироваться выполнение строки
 

FILES=`find $BACSTORDIR -mtime +${DAYSTOR} -print -delete`

В логе роутера вижу что якобы идет удаление лишних файлов, но ничего не удаляется

Спасибо

Link to comment
Share on other sites

Попробуйте, заменив переменные пути и времени хранения файлов реальными значениями, выполнить команду find из командной строки. Только уберите кавычки. Как выглядит команда в командной строке, и что выводится при ее выполнении?

Если понятнее не станет, выложите свой скрипт сюда. 

Edited by gvan
Link to comment
Share on other sites

Понял в чем дело . В последней секции скрипта мы переходим в $BACSTORDIR и потом ищем опять в find  $BACSTORDIR.
Получается производим поиск find  в $BACSTORDIR/$BACSTORDIR/фильтр_поиска

а такой директории не существует

cd $BACSTORDIR - лишний

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

 

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"

 

Link to comment
Share on other sites

Вы так и не показали свой скрипт. Или хотя бы чему у вас равна переменная $BACSTORDIR. 

У меня именно такой скрипт, как я привел в примере. Предварительный переход в каталог команде find мешать никак не может. Да, наверно можно обойтись и без него. 

Link to comment
Share on other sites

4 минуты назад, gvan сказал:

Вы так и не показали свой скрипт. Или хотя бы чему у вас равна переменная $BACSTORDIR. 

У меня именно такой скрипт, как я привел в примере. Предварительный переход в каталог команде find мешать никак не может. Да, наверно можно обойтись и без него. 

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

#!/opt/bin/sh

# VERSION 2.1

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

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

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

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

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

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

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

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

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

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

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

#=====================================================================================
# Начало скрипта
#=====================================================================================

# Текущая дата для формирования имени файла с архивом
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"  
# Выводим в лог список удаленных файлов-архивов
logger -t $TAG "Remove old archives"
FILES=`find $BACSTORDIR -mtime +${DAYSTOR} -print -delete`
logger -t $TAG "Removed: $FILES"
logger -t $TAG "Copying to Yandex Disk..."
rclone copy $BACKSTORDIR  rem:/KN-1010_backup --log-file backup.log
logger -t $TAG "Backup and Sync finishes"
logger -t $TAG "Exiting"

У меня вот такой теперь. в моем случае, что бы работало как у вас, переменную
BACSTORDIR=backup/
надо указывать как BACSTORDIR=/opt/backup/

 

Edited by aleeko
Link to comment
Share on other sites

Ну, вот. Ошибка в переменной $BACSTORDIR. 

Она должна содержать полный путь к каталогу бэкапов. Т. е. начинаться со слэша. 

Link to comment
Share on other sites

  • 1 month later...

Спасибо за скрипт

Только установил Entware, и при выполнении скрипта вылезли ошибки:

ndmq: not found

Как выяснилось, пакет ndmq перенесен в архив и больше не входит в установку Entware, чтобы не устанавливать его из архива, я переделал скрипт на rci, изменения в строках 75, 104-105

Предварительно нужно установить пакет jq для разбора json

opkg install jq

Скрипт во вложении в архиве

backup_rci.zip

  • Thanks 6
Link to comment
Share on other sites

  • 2 weeks later...

Скриптом пользуюсь давно, все устраивало, но недавно заметил что невозможно восстановить при наличии в архиве Home Assistant. Что надо подправить? 

Скрытый текст
#!/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/HDD/Backup/Entware/

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

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

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

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

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

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

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

#=====================================================================================
# Начало скрипта
#=====================================================================================
# Текущая дата для формирования имени файла с архивом
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"

 

 

Link to comment
Share on other sites

В 23.04.2022 в 20:18, batonskij сказал:

Скриптом пользуюсь давно, все устраивало, но недавно заметил что невозможно восстановить при наличии в архиве Home Assistant. Что надо подправить? 

Недостаточно информации. Сам бэкап отрабатыает задачу и ошибок нет? Что значит невозможно восстановить? Какая ошибка возникает?

Link to comment
Share on other sites

16 минут назад, gvan сказал:

Сам бэкап отрабатыает задачу и ошибок нет

Все верно, с этим никаких проблем. 

 

17 минут назад, gvan сказал:

Что значит невозможно восстановить? Какая ошибка возникает?

Обычно делаю так, форматирую флеш, если что-то пошло не так, создаю на ней  папку install, туда закидывают файл бэкапа. Жму кнопки в веб морде роутера и жду, обычно все в течении 4-5 мин разворачивается.

Но если в файле бэкапа есть установленный HA, то все идет иначе, веб морда висит минут 10, далее на флешке в разделе под OPKG появляются не все папки и некоторая их часть зачеркнута. 

Link to comment
Share on other sites

5 часов назад, batonskij сказал:

Жму кнопки в веб морде роутера и жду, обычно все в течении 4-5 мин разворачивается.

Мне добавить к предыдущему сообщению нечего. Видимо, вопрос нужно задать веб-морде и кнопкам😄

Я сам, когда пробовал восстанавливать архив, для распаковки использовал команду tar, как указано в инструкции на первой странице.

Про функционал в веб-морды, в котором это можно сделать, мне ничего неизвестно. Возможно речь идет о "Приложение-Файлы и папки"? Но тогда вопрос больше к разработчикам прошивки. 

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

Link to comment
Share on other sites

2 часа назад, gvan сказал:

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

Очень похоже на то, потому что разница между без HA и с HA развернутых пакетов 80 мб против 450 мб.  

Попробую командой tar когда в следующий раз сломаю. 

  

2 часа назад, gvan сказал:

Возможно речь идет о "Приложение-Файлы и папки"?

нет, речь идет о штатном установщике OPKG пакетов 

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

giga.thumb.jpg.b25029c0876ad0a140edf041ba2ab0f3.jpg

 

Edited by batonskij
Link to comment
Share on other sites

В 26.04.2022 в 16:43, batonskij сказал:

нет, речь идет о штатном установщике OPKG пакетов

Но тогда это вообще мимо кассы. Фактически создаваемый скриптом архив не является пакетом OPKG. Каким образом архив обрабатывает бинарник opkg, и почему на архивах малого размера это срабатывало, мне неизвестно.

Соответственно, как и писал выше, для распаковки архива нужно использовать команду tar.

  • Thanks 1
Link to comment
Share on other sites

В 28.04.2022 в 10:37, gvan сказал:

для распаковки архива нужно использовать команду tar.

Воспользовался вашим советом, использовал tar, но при восстановлении все-равно что-то идет не так (((

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

OPKGGiga.jpg.fc710e727ad3882a47420ab24fa9f70c.jpg

 

Link to comment
Share on other sites

В 29.04.2022 в 22:03, batonskij сказал:

Воспользовался вашим советом, использовал tar, но при восстановлении все-равно что-то идет не так

Можно почитать в инете мануал по tar и перед распаковкой проверить содержимое архива. Например, список файлов сохранить в текстовый файл и посмотреть есть ли в нем все необходимое. Или вообще через менеджер файлов midnight commander войти внутрь архива (будет очень долгий процесс) и "походить" по структуре каталалогов-файлов.

Да и смоневаюсь я, что при распаковке архива tar-ом у вас не высветилось ни одной ошибки, если "что-то идет не так".

Link to comment
Share on other sites

В 02.05.2022 в 11:00, gvan сказал:

Да и сомневаюсь я, что при распаковке архива tar-ом у вас не высветилось ни одной ошибки, если "что-то идет не так".

Итак, все перепроверил, но все-равно у меня не выходит каменный цветочек ¯_(ツ)_/¯

Ошибок при распаковке нет, все файлы на месте, проверил и в проводнике и в mc содержимое, во время распаковки в морде кинетика видно что  папка bin присутствует, после окончания процесса она зачеркивается. 

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

OPKGGiga1.thumb.jpg.665fe80f687813125190ed5265845809.jpgOPKGGiga2.thumb.jpg.d136614b3b055232d16e728498567322.jpgOPKGGiga3.jpg.526670f93f7e0897192f6e32b2daead9.jpg

 

Link to comment
Share on other sites

58 минут назад, batonskij сказал:

папка bin присутствует, после окончания процесса она зачеркивается. 

Я не знаю, что для морды означает зачеркнуто. 

Больше пользы было бы от вывода команды ls, где видны права на уже распакованную папку bin. Возможно по какой-то причине они не проставляются должным образом. 

Link to comment
Share on other sites

19 часов назад, gvan сказал:

Больше пользы было бы от вывода команды ls

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

817567645_OPKGGiga5.thumb.jpg.78e4862e1f10f14d10d3a7298c9d1857.jpg

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

OPKGGiga6OK.jpg.c13afdfc529209a3b295274982ba3a1d.jpg

Ух ты, все заработало, прошу прощения что морочил голову зачеркнутой папкой bin в морде.

Прост включил использование вновь распакованного OPKG, папка "расчеркнулась" и все завелось! 

Edited by batonskij
bin
Link to comment
Share on other sites

  • 3 months later...
В 14.04.2022 в 18:08, usan сказал:

Спасибо за скрипт

Только установил Entware, и при выполнении скрипта вылезли ошибки:

ndmq: not found

Как выяснилось, пакет ndmq перенесен в архив и больше не входит в установку Entware, чтобы не устанавливать его из архива, я переделал скрипт на rci, изменения в строках 75, 104-105

Предварительно нужно установить пакет jq для разбора json

opkg install jq

Скрипт во вложении в архиве

backup_rci.zip 1 \u041a\u0431 · 31 downloads

Спасибо. Сам переустановил entware с нуля и тоже увидел, что пакт ndmq исчез.

Для тех, кто не захочет переходить на rci, можно установить ndmq из архива (у меня просто еще были скрипты на него завязаны):

opkg install curl
curl https://bin.entware.net/mipselsf-k3.4/keenetic/archive/libndm_1.8.0-1_mipsel-3.4_kn.ipk >libndm.ipk
opkg install libndm.ipk
curl https://bin.entware.net/mipselsf-k3.4/keenetic/archive/ndmq_1.0.2-7_mipsel-3.4_kn.ipk > ndmq.ipk
opkg install ndmq.ipk

 

Edited by gvan
  • Thanks 1
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...