Jump to content

Recommended Posts

Posted (edited)

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

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

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

Edited by vasek00
Posted
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 на новой флэшке.

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

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

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

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

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

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

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

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

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

  • Thanks 1
Posted

Первое сообщение дополнено информацией по восстановлению entware из резервной копии.

  • Thanks 1
Posted

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

Posted (edited)
11 час назад, emlen сказал:

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

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

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

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

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

Edited by gvan
  • Thanks 2
Posted

Очень полезный многогранный материал, огромное спасибо автору!

  • Upvote 1
Posted

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

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

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

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

  • Thanks 3
Posted
В 23.01.2017 в 12:02, gvan сказал:

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

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

Posted
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
  • 1 month later...
Posted
В 30.11.2016 в 12:19, gvan сказал:

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

 

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

 

Posted (edited)

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

+

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

Edited by TheBB
+
  • Thanks 1
Posted
В 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
  • 4 weeks later...
Posted
В 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 .'

Не срабатывает,архив не создаёт. Буду признателен за ответ. 
Posted
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 *

 

Posted
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 *

так ?

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

так ?

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

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

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

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

Posted
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
Posted
17 минут назад, gvan сказал:

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

Огромное спасибо.Сработало. 

Posted (edited)
18 часов назад, gvan сказал:

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

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

+

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

screen_141.png

Edited by TheBB
+
  • Thanks 1
Posted
20 часов назад, gvan сказал:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

BACSTORDIR=/tmp/mnt/ADATA/backup/

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

BACFIRMDIR=ADATA:/backup/

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

 

 

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

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

 

 

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

 

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

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

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

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

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

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

Important Information

This site uses cookies. By clicking "I accept" or continuing to browse the site, you authorize their use in accordance with the Privacy Policy.