Jump to content

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


Recommended Posts

Вопрос, а зачем его конфиг так сложно вытаскивать, если он спокойно лежит "/flash/startup-config" берем куда надо, в место

# Делаем архив конфига
ndmq -p "show running-config" -P message | gzip > ${BACSTORDIR}config-${DATE}.gz

Да и Entware наверное не стоит копировать весь его (так как библиотеки и версии приложений тоже меняются) возможно достаточно /opt/etc

Edited by vasek00
Link to comment
Share on other sites

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

Вопрос, а зачем его конфиг так сложно вытаскивать, если он спокойно лежит "/flash/startup-config" берем куда надо, в место

У меня это какой-то полубинарный файл. Если сделать:

cp /flash/startup-config /opt/tmp/test.txt

То вначале файла test.txt какая-то каша. Да и вариант с ndmq -p более универсальный (вдруг захочется сохранить в третьем файле результат вывода каких-либо других CLI команд).

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

Да и Entware наверное не стоит копировать весь его (так как библиотеки и версии приложений тоже меняются) возможно достаточно /opt/etc

Да, ничто не мешает изменить переменную BACDIR на 

BACDIR=/opt/etc/

Но у меня, например, кроме конфигов есть еще БД, которые лежат вне /opt/etc.

Также мой вариант, если вдруг умрет флэшка, позволяет за 15 минут развернуть новую entware, без танцев с бубном и без каких-либо установок дополнительных программ. Рассказываю как.

Есть переносимая флэшка, на которой развернут пустой entware. Ну, не совсем пустая. На ней есть fdisk, e2mkfs (и прочие дисковые утилиты).

Запускаю entware с нее. Создаю раздел на новом диске, форматирую его, запускаю распаковку созданного в первом сообщении .tgz на новую флэшку (еще надо будет создать var/log и tmp, т.к. в архиве их нет). Все. Можно монтировать entware на новой флэшке.

Уже несколько раз подобным образом переезжал.

Если нужна более подробная информация по шагам, то могу расписать и дополнить первое сообщение.

Link to comment
Share on other sites

/flash/startup-config

он же символьная ссылка /dev/mtdblock/...

11 ndmpart partitions found on MTD device raspi
Creating 11 MTD partitions on "raspi":
...
ххххххххххх: "Config"
....

 

Цитата

Но у меня, например, кроме конфигов есть еще БД, которые лежат вне /opt/etc.

Также мой вариант, если вдруг умрет флэшка, позволяет за 15 минут развернуть новую entware, без танцев с бубном и без каких-либо установок дополнительных программ. Рассказываю как.

Cогласен, что нужно только то что нужно. Для меня так же 15минут поставить новую entware (только ту которая текущая на данный момент времени, так как релизы имеют свойство изменяться, улучшаться и исправленные ошибки и не дочеты пред.версий), потом конфиги в /opt/etc.

Link to comment
Share on other sites

27 минут назад, vasek00 сказал:

Для меня так же 15минут поставить новую entware (только ту которая текущая на данный момент времени, так как релизы имеют свойство изменяться, улучшаться и исправленные ошибки и не дочеты пред.версий), потом конфиги в /opt/etc.

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

А по поводу изменений релизов, вообще не вижу проблем. Ведь указанный скрипт запускается каждую ночь и мы всегда получаем полный свежий слепок системы, причем в новом архиве. У меня он на данный момент занимает менее 20Мб.

А обновление того же самого софта opkg update/upgrade также можно добавить в cron.

Но каждый волен выбирать сам:D

  • Thanks 1
Link to comment
Share on other sites

А как можно создавать резервные копии только измененного конфига? Мне бы не хотелось бы иметь образно говоря сто одинаковых копий за опред. срок, а просто по одной копии всех версий конфига.. Что -то подсказывает, что надо вновь созданный резервный файл конфига сравнивать хотя бы с предыдущим каким - нибудь диффом, просьба к профи подмочь со скриптом)

Link to comment
Share on other sites

11 час назад, emlen сказал:

А как можно создавать резервные копии только измененного конфига? Мне бы не хотелось бы иметь образно говоря сто одинаковых копий за опред. срок, а просто по одной копии всех версий конфига..

Ну, собственно говоря сто копий не хранится. Остаются архивы за последние несколько дней в зависимости от значения переменной DAYSTOR. Да и объем этих архивов конфигов небольшой.

Также при выполнении команды "show running-config" всегда изменяется MD5 конфига и строка "clock date". Так что задача не совсем тривиальная.

Первое сообщение дополнил кодом по сохранению только измененного конфига. Для этого при каждом запуске бэкапа сохраняется локальная так называемая текущая версия конфига. При последующих запусках содержимого полученного с роутера и сохраненного конфига сравнивается. При этом указанные выше строки не учитываются (переменная EXCLCONFCMD="Md5 checksum:\|clock date").

Т.к. логика скрипта усложнилась, то возможны какие-то неучтенные баги :-) Проверяйте.

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

Скрипт в первом сообщении темы изменен. 

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

Как показала практика, не все отладочные версии прошивок могут полюбиться пользователю с первого раза. Особенно, если предварительно не ознакомиться в соответствующей теме об исправлениях и дополнениях в прошивке, а также о ее возможных багах. ;)

Теперь, если перед обновлением прошивки забыл ее сохранить через веб, то есть возможность откатиться на предыдущую версию, взяв ее из резервной копии.

  • Thanks 3
Link to comment
Share on other sites

В 23.01.2017 в 12:02, gvan сказал:

Исправлен баг с сохранением конфигурации

Доброго времени суток! Я извиняюсь, не могли бы уточнить что за баг и в каком месте был, просто я пользовался Вашим кодом как "учебником", то есть избирательно без полного копипаста и теперь хотелось бы внести правки в свои скриптики, т.к. я никаких багов не замечал. Заранее спасибо.

Link to comment
Share on other sites

1 час назад, emlen сказал:

не могли бы уточнить что за баг и в каком месте был

Мне не понравилась предыдущая версия логики сохранения версий конфига (когда по подобию стал делать сохранение версий прошивки), если скрипт обнаружил, что она изменилась. Это кусок кода в условии "if [ "$OLDCONF" != "$CURCONF" ]"

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

Было:


if [ "$OLDCONF" != "$CURCONF" ]
            then
                logger -t $TAG "Config is changed. Do new copy."
                cp -f ${BACSTORDIR}config-${DATE} ${BACSTORDIR}config-cur
                gzip -f ${BACSTORDIR}config-${DATE}
            else
                logger -t $TAG "Config is not changed. Renew current config copy."
                cp -f ${BACSTORDIR}config-${DATE} ${BACSTORDIR}config-cur
                rm ${BACSTORDIR}config-${DATE}
fi

У меня тоже вроде проблем не возникало. Но по факту получается следующее. Есть вчерашняя версия конфига config-cur, получили свежую копию config-$DATE. Сравнили и, если есть различия, фактически затерли существующую версию конфига в архиве командой "cp -f ${BACSTORDIR}config-${DATE} ${BACSTORDIR}config-cur"

Поменял код на более логичный, когда предыдущая версия конфига точно "уйдет" в архив, а существующая версия станет config-cur


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

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

  • Thanks 1
Link to comment
Share on other sites

  • 1 month later...
В 30.11.2016 в 12:19, gvan сказал:

Запускаем восстановление entware и создаем каталоги, которые мы не включили в резервную копию:

 

При таком восстановлении у меня неправильно выставляются права на /opt - из-за чего ssh отказывал в авторизации по ключу с таким сообщением "Authentication refused: bad ownership or modes for directory /opt"  

 

Link to comment
Share on other sites

Апплет tar ограничен по функционалу (хотя, и его достаточно для backup`a). Ставьте "пакетированный" tar и развлекайтесь с его ключами запуска.

+

В догонку про BackUp

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

В 20.03.2017 в 10:51, St_Pavel сказал:

При таком восстановлении у меня неправильно выставляются права на /opt - из-за чего ssh отказывал в авторизации по ключу с таким сообщением "Authentication refused: bad ownership or modes for directory /opt"

Как и отмечено в комментариях TheBB функциональности имеющего tar достаточно для поставленной задачи. Все права и владельцев для файлов и каталогов он нормально сохраняет в архиве, а при распаковке архива - восстанавливает. Вопрос действительно может касаться каталога /opt (в зависимости от того, каким образом он создавался изначально)

Если после проведения всех манипуляций по восстановлению, права на /opt не совпадают с 755 и владелец не root/root, то можно выполнить следующие команды:

chown root:root /opt
chmod 755 /opt

Или же у вас при восстановлении архива и внутри подкаталога /opt права и владельцы также посбивались?

  • Thanks 1
Link to comment
Share on other sites

  • 4 weeks later...
В 20.03.2017 в 11:33, TheBB сказал:

Апплет tar ограничен по функционалу (хотя, и его достаточно для backup`a). Ставьте "пакетированный" tar и развлекайтесь с его ключами запуска.

+

В догонку про BackUp

Подскажите пожалуйста как правильно добавить эту команду в cron:

tar cvzf /opt/`date "+%d-%m-%Y-%H-%M"`-backup.tar.gz -C /opt .  

делал вот так;

42 11 * * * root /opt/bin/tar 'cvzf /opt/`date "+%d-%m-%Y-%H-%M"`-backup.tar.gz -C /opt .'

Не срабатывает,архив не создаёт. Буду признателен за ответ. 
Link to comment
Share on other sites

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

tar cvzf /opt/`date "+%d-%m-%Y-%H-%M"`-backup.tar.gz -C /opt

Зачем "-С /opt"? Так не будет работать. -C только при распаковке учитывается. Либо предварительно делать cd в каталог, который будет бэкапиться и бэкапить *, либо просто в конце указать /opt

У вас же это конструкция наверняка и не из cron не работает? Отладьте работу сначала с консоли.

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

42 11 * * * root /opt/bin/tar 'cvzf /opt/`date "+%d-%m-%Y-%H-%M"`-backup.tar.gz -C /opt .'

А здесь вообще какая-то каша с кавычками и точкой в конце. С консоли тоже, сомневаюсь, что работать будет.

Попробуйте такую команду:

cd /opt && /opt/bin/tar cvzf /opt/`date "+%d-%m-%Y-%H-%M"`-backup.tar.gz *

 

Link to comment
Share on other sites

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

У вас же это конструкция наверняка и не из cron не работает?

Я всегда делаю бэкап при помощи этой команды. Захотелось автоматизировать этот процесс,но не получилось. Знаний не хватает. 

tar cvzf /opt/`date "+%d-%m-%Y-%H-%M"`-backup.tar.gz -C /opt .

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

cd /opt && /opt/bin/tar cvzf /opt/`date "+%d-%m-%Y-%H-%M"`-backup.tar.gz *

Сработало но только вручную.Как правильно оформить Ее в крон??

03 16 * * * root cd /opt && /opt/bin/tar cvzf /opt/`date "+%d-%m-%Y-%H-%M"`-backup.tar.gz *

так ?

Link to comment
Share on other sites

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

Да, вроде должно сработать.

К сожалению не сработало ..архив не создался.Лишь строка от cron в логе кинетика. 

Link to comment
Share on other sites

27 минут назад, vlad сказал:

К сожалению не сработало ..архив не создался.Лишь строка от cron в логе кинетика.

Да, в cron спецсимволы по другому обрабатываются. Попробуйте так

50 16 * * * root cd /opt && /opt/bin/tar cvzf /opt/$(date \+\%d-\%m-\%Y-\%H-\%M)-backup.tar.gz * 

У меня сработало

  • Thanks 1
Link to comment
Share on other sites

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

... -C только при распаковке учитывается...

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

+

tar czvf /opt/backup.tar.gz -C /opt/ etc share var

screen_141.png

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

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

50 16 * * * root cd /opt && /opt/bin/tar cvzf /opt/$(date \+\%d-\%m-\%Y-\%H-\%M)-backup.tar.gz *

Помогите ещё немного;)))! Какие команды добавить чтоб архивы складывались в папку backup и при этом папка была исключена из архивации ? 

Link to comment
Share on other sites

32 минуты назад, vlad сказал:

Какие команды добавить чтоб архивы складывались в папку backup и при этом папка была исключена из архивации ? 

Для штатного в entware tar смотрите пример скрипта в первом посте (ключ -X используется для исключения файлов).

Т.е. будет выглядеть примерно так:

tar -X backup cvzf /opt/$(date \+\%d-\%m-\%Y-\%H-\%M)-backup.tar.gz *

(если папка backup находится по адресу /opt/backup)

Link to comment
Share on other sites

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

Для штатного в entware tar смотрите пример скрипта в первом посте (ключ -X используется для исключения файлов).

Т.е. будет выглядеть примерно так:

tar -X backup cvzf /opt/$(date \+\%d-\%m-\%Y-\%H-\%M)-backup.tar.gz *

(если папка backup находится по адресу /opt/backup)

Благодарю за ответ. 

Link to comment
Share on other sites

В 30.11.2016 в 12:19, gvan сказал:

Предварительно необходимо изменить настройки скрипта в разделе конфигурационных параметров.

Спасибо за скрипт;)!!! Изменил под свои нужды и принял на вооружение ;)))

Link to comment
Share on other sites

  • 10 months later...
В 30.11.2016 в 12:19, gvan сказал:

BACSTORDIR=/tmp/mnt/ADATA/backup/

В 30.11.2016 в 12:19, gvan сказал:

BACFIRMDIR=ADATA:/backup/

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

 

 

Link to comment
Share on other sites

6 часов назад, rotor сказал:

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

 

 

Для начала нужно смонтировать вашу удаленную папку. Для этого используйте команду "mount". После этого уже будет понятно как эти строчки выглядят (вы сами задаете куда монтировать)

 

Link to comment
Share on other sites

6 часов назад, rotor сказал:

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

Для BACSTORDIR указываете путь, куда у вас подмонтирована сетевая папка. Если не подмонтирована к каталогу, то можно и напрямую по сетевому пути обратиться.

А вот для BACFIRMDIR=ADATA:/backup/, скорее всего, не получится, т.к. фактически выполняется команда telnet роутера "copy flash:/firmware". А она ничего не "знает" о сетевых подключениях.

Соответственно, самый просто вариант - сначала скопировать на диск, а потом добавить в скрипт команду перемещения записанного файла на сетевой диск.

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...