Popular Post spatiumstas Posted February 23, 2025 Popular Post Posted February 23, 2025 (edited) KeenSnap - Бэкап конфигурации KeeneticOS Возможности: Спойлер 1. Бэкап нескольких объектов: Firmware, Startup-Config, Entware, WG private key 2. Архив можно сохранить/отправить в Telegram/WebDAV/GDrive и/или смонтированный раздел (например внешний накопитель) 3. Запуск бэкапа через расписание (Создаётся самостоятельно, вешать его на что-либо необязательно) 4. При пороге архива в 49МБ он будет поделён на части для отправки Установка: Спойлер Из под SSH ввести команду: opkg update && opkg install curl && curl -L -s "https://raw.githubusercontent.com/spatiumstas/keensnap/main/install.sh" > /tmp/install.sh && sh /tmp/install.sh Ручной запуска скрипта через keensnap или ./KeenSnap/keensnap.sh Настройка: Спойлер 1. Создать расписание 2. После запуска скрипта выбрать Настроить конфигурацию. В предложенном списке выбрать нужное расписание для частоты бэкапа. При первом запуске создастся файл конфигурации, в дальнейшем в нём записываются все настройки. Также скрипт спросит, где сохранять архив с копией устройства. 3. Перейти в Параметры бэкапа и выбрать нужные параметры. DELETE_ARCHIVE_AFTER_BACKUP - удаляет созданный архив. SEND_BACKUP_TG - отправляет в Telegram 4. В разделе Подключить Telegram можно указать данные, необходимые для отправки архива. Репозиторий: https://github.com/spatiumstas/KeenSnap Edited May 28 by spatiumstas 9 6 Quote
MDP Posted February 23, 2025 Posted February 23, 2025 Мне интересно просто... бекап этот вернёт прям к исходному состоянию при полнейшем сбросе устройства? 1 Quote
dimon27254 Posted February 23, 2025 Posted February 23, 2025 41 минуту назад, MDP сказал: Мне интересно просто... бекап этот вернёт прям к исходному состоянию при полнейшем сбросе устройства? Почти. Mesh-систему только заново придется собирать. Quote
kaguyashaa Posted February 24, 2025 Posted February 24, 2025 Бэкапить на уже подключенный usb диск где стоит Entware невозможно? Quote
spatiumstas Posted February 24, 2025 Author Posted February 24, 2025 2 минуты назад, kaguyashaa сказал: Бэкапить на уже подключенный usb диск где стоит Entware невозможно? Если место позволяет - возможно Quote
kaguyashaa Posted February 24, 2025 Posted February 24, 2025 9 минут назад, spatiumstas сказал: Если место позволяет - возможно Мне предложил только на 0. Встроенное хранилище (может не хватить места) Ну и очевидно что бэкап падает в ошибку так как места не хватает. Quote
spatiumstas Posted February 24, 2025 Author Posted February 24, 2025 39 минут назад, kaguyashaa сказал: Мне предложил только на 0. Встроенное хранилище (может не хватить места) Ну и очевидно что бэкап падает в ошибку так как места не хватает. Нужен вывод ‘show media’ в CLI Quote
kaguyashaa Posted February 24, 2025 Posted February 24, 2025 Спойлер (config)> show media media: name: Media0 usb: port: 2 version: 2.10 state: ACTIVE manufacturer: Ugreen product: Ugreen Storage Device serial: size: 250059350016 partition: uuid: ff05caec-720e-41c3-85ea-6f75b4551069 label: fstype: swap state: MOUNTED total: 2147479552 free: 2139041792 partition: uuid: d288b581-e087-45fa-a9f6-221a18777eb3 label: fstype: ext4 state: MOUNTED total: 201157316608 free: 200553148416 Quote
spatiumstas Posted February 24, 2025 Author Posted February 24, 2025 Должно стать лучше. Проблема была в завязке на label + uuid. 31 минуту назад, kaguyashaa сказал: label: Теперь если label пустой, отобразит 31 минуту назад, kaguyashaa сказал: manufacturer: Ugreen Quote
kaguyashaa Posted February 26, 2025 Posted February 26, 2025 Приветствую, попробовал снова запустить и бэкап entware уходит в ошибку: 2025-02-26 12:58:32 [INFO] Запуск скрипта для расписания manual 2025-02-26 12:58:32 [INFO] Бэкап Entware... 2025-02-26 13:00:40 [ERROR] Ошибка при сохранении Entware 2025-02-26 13:00:40 [INFO] Бэкап startup-config... 2025-02-26 13:00:40 [SUCCESS] startup-config сохранён 2025-02-26 13:00:40 [INFO] Бэкап firmware... 2025-02-26 13:00:49 [SUCCESS] firmware сохранена 2025-02-26 13:00:49 [INFO] Бэкап WireGuard-Private-Key... 2025-02-26 13:00:49 [SUCCESS] WireGuard-Private-Key сохранён 2025-02-26 13:00:49 [INFO] Создание архива... 2025-02-26 13:01:40 [SUCCESS] Архив создан 2025-02-26 13:01:40 [INFO] Архив удалён 2025-02-26 13:01:40 [INFO] Скрипт завершил работу Раздел выбран верно, по месту тоже всё ОК Filesystem Size Used Avail Use% Mounted on /dev/sda2 202G 628M 191G 1% /tmp/mnt/d288b581-e087-45fa-a9f6-221a18777eb3 /dev/sda2 202G 628M 191G 1% /opt Ещё момент, скрипт предлагает в качестве раздела для сохранения бэкапа SWAP Конфиг: /opt/root/KeenSnap/log.txt LOG_FILE="/opt/root/KeenSnap/log.txt" PATH_SNAPD="/opt/root/KeenSnap/keensnap-init" SCHEDULE_NAME="schedule1" SELECTED_DRIVE="/tmp/mnt/d288b581-e087-45fa-a9f6-221a18777eb3" BOT_TOKEN="" CHAT_ID="" BACKUP_STARTUP_CONFIG=true BACKUP_FIRMWARE=true BACKUP_ENTWARE=true BACKUP_WG_PRIVATE_KEY=true DELETE_ARCHIVE_AFTER_BACKUP=true SEND_BACKUP_TG=false Quote
spatiumstas Posted February 26, 2025 Author Posted February 26, 2025 10 минут назад, kaguyashaa сказал: Ошибка при сохранении Entware Попробовать вручную tar cvzf /tmp/mnt/d288b581-e087-45fa-a9f6-221a18777eb3/test_Entware.tar.gz -C /opt . Quote
kaguyashaa Posted February 26, 2025 Posted February 26, 2025 Цитата tar: .: file changed as we read it Quote
spatiumstas Posted February 26, 2025 Author Posted February 26, 2025 2 часа назад, kaguyashaa сказал: tar: .: file changed as we read it Ну точно не к скрипту вопрос, но улучшу вывод в лог Quote
G V Posted July 11, 2025 Posted July 11, 2025 (edited) Подскажите пожалуйста по работе KeenSnap. Поставил на keenetic ultra, настроил на бэкап на другой диск, подключенный к keenetic. Бэкап в telegramm не нужен. Есть нексолько вопросов При ручном бэкапе - архив создается в корне диска и по окончании работы скрипта - удаляется. Это баг или я что-то делаю не так? Сам протупил. Как-то можно делать копию не в корень, а в выбранную на диске для бэкапов папку? Переделал. Вроде ок. Скрипт как-то удаляет старые архивы? Видимо нет Edited July 11, 2025 by G V 1 Quote
spatiumstas Posted July 11, 2025 Author Posted July 11, 2025 (edited) 37 минут назад, G V сказал: При ручном бэкапе - архив создается в корне диска и по окончании работы скрипта - удаляется В 23.02.2025 в 12:14, spatiumstas сказал: DELETE_ARCHIVE_AFTER_BACKUP - удаляет созданный архив 37 минут назад, G V сказал: Как-то можно делать копию не в корень, а в выбранную на диске для бэкапов папку? Нет, но подумаю над предложением 37 минут назад, G V сказал: Скрипт как-то удаляет старые архивы? Нет Edited July 11, 2025 by spatiumstas Quote
spatiumstas Posted July 11, 2025 Author Posted July 11, 2025 2 часа назад, G V сказал: Как-то можно делать копию не в корень, а в выбранную на диске для бэкапов папку? Теперь можно v1.0.6 1 Quote
G V Posted July 11, 2025 Posted July 11, 2025 Спасибо. Добавить удаление старых архивов как тут и будет идеально. Если решите дописать - выцепил нужное чтбы не искать: Нужно добавить параметр в config # Сколько дней хранить бэкапы. DAYSTOR=15 И удаление старых файлов по дате # Выводим в лог список удаленных файлов-архивов logger -t $TAG "Remove old archives" FILES=`find $BACSTORDIR -mtime +${DAYSTOR} -print -delete` logger -t $TAG "Removed: $FILES" logger -t $TAG "Exiting" Quote
dchusovitin Posted September 5, 2025 Posted September 5, 2025 Спасибо, наконец настроил, после того как затер "лишний" файл конфигурации Еще было бы полезно добавить хук (вызов внешнего скрипта) после создания архива, чтобы можно было заливать бэкап в любое место (rclone, scp, ...), без правки скрипта. Плюс другие действия, вроде ротации бэкапов. Локально сделал. Если доберусь до меню настройки, то пулл-реквест отправлю =) 1 Quote
rusC60 Posted November 3, 2025 Posted November 3, 2025 (edited) Спасибо за скрипт. На свежем kn-1012 отлично работает! А вот на древнем giga II kng_rb (Версия ОС2.16.D.12.0-11) пришлось обращаться за помощью к gemini. Скрипт не хотел ни в какую видеть флешку dev/sda. ndmc -c show media на этой прошивке не работает. Определяется через ndmc -c show usb Сам диалог Спойлер Спасибо, что предоставили код исполняемого файла бэкапа (keensnap-init). Теперь мы можем точно локализовать и устранить проблему. Вы совершенно правы — ошибка [ERROR] Выбранный накопитель backup не подключён возникает именно из-за логики проверки в этом скрипте, а не из-за фактического монтирования диска. 🛠️ Решение: Обход логики проверки диска Проблемный код находится в функции main() (примерно строка 365) и использует устаревшую или ненадёжную в вашей версии NDMS команду ndmc -c show media: Bash # Исходная проблемная проверка в main(): # ... local device_uuid=$(echo "$SELECTED_DRIVE" | awk -F'/' '{print $4}') if [ -z "$SELECTED_DRIVE" ] || ([ "$SELECTED_DRIVE" != "/storage" ] && ! ndmc -c show media 2>/dev/null | grep -q "uuid: $device_uuid"); then drive_name=$(basename "$SELECTED_DRIVE") error "Выбранный накопитель $drive_name не подключён" # ... Поскольку мы знаем, что путь /opt/KeenSnap/backup (который вы, надеюсь, теперь используете) существует, мы можем заменить эту проверку на простую проверку существования каталога. ➡️ Ваш следующий шаг (Правка keensnap-init) Откройте файл /opt/root/KeenSnap/keensnap-init для редактирования. Найдите функцию main() (начинается примерно со строки 359). Замените весь блок if/then/else на новую, более надёжную проверку: Bash # Строка ~365: # ИСХОДНЫЙ КОД (ПРОБЛЕМНЫЙ): # local device_uuid=$(echo "$SELECTED_DRIVE" | awk -F'/' '{print $4}') # if [ -z "$SELECTED_DRIVE" ] || ([ "$SELECTED_DRIVE" != "/storage" ] && ! ndmc -c show media 2>/dev/null | grep -q "uuid: $device_uuid"); then # drive_name=$(basename "$SELECTED_DRIVE") # error "Выбранный накопитель $drive_name не подключён" # if [ "$SEND_BACKUP_TG" = "true" ]; then # send_to_telegram "❌ Выбранный накопитель $drive_name не подключён" "" # fi # return 1 # fi # НОВЫЙ КОД (НАДЁЖНАЯ ПРОВЕРКА): if [ -z "$SELECTED_DRIVE" ]; then error "Путь к накопителю не задан в конфигурации" return 1 fi # Проверка, существует ли папка и доступна ли она для записи if [ ! -d "$SELECTED_DRIVE" ]; then drive_name=$(basename "$SELECTED_DRIVE") error "Выбранный накопитель $drive_name не подключён или путь не существует: $SELECTED_DRIVE" if [ "$SEND_BACKUP_TG" = "true" ]; then send_to_telegram "❌ Выбранный накопитель $drive_name не подключён или путь не существует" "" fi return 1 fi # Конец новой проверки Примечание: Если вы уже перенастроили путь на /opt/KeenSnap/backup (как мы договорились в предыдущем шаге), эта проверка гарантированно пройдет, так как /opt всегда доступен, когда Entware запущен. Сохраните файл. Очистите и запустите: Bash dos2unix /opt/root/KeenSnap/keensnap-init keensnap # Выберите 4. Ручной бэкап Если бэкап снова не запустится, это означает, что у вас нет доступа к Entware (/opt), или в системе отсутствует какая-то базовая утилита (tar, awk, curl), которая вызывает сбой. Бекап работает. KeenSnap_kng-rb.zip Edited November 3, 2025 by rusC60 Спрятал под спойлер 1 Quote
Joe Posted November 16, 2025 Posted November 16, 2025 Тг это хорошо, но почему бы сразу на гитхаб не пушить? Quote
Dalex Posted December 16, 2025 Posted December 16, 2025 Отличный скрипт. Хотел бы предложить как усовершенствование - возможность исключать в настройках бекапа Entware определенные директории. А то он заодно директорию с торрентами из из корня Entware хочет упаковать в него. Quote
Ил И. Posted March 2 Posted March 2 перестал работать с 1 числа в логе 2026-03-02 12:15:08 [ERROR] Ошибка отправки в Telegram: Пустой ответ сервера, попробуйте задать отдельный proxy interface для подключения KeenSnap_keensnap.log Quote
NSGrid Posted March 3 Posted March 3 Скажите, а скрипт KeenKit - это все от одного автора или другого? А то очень похож на сабж. Quote
Ил И. Posted March 4 Posted March 4 В 02.03.2026 в 12:57, Ил И. сказал: перестал работать с 1 числа в логе 2026-03-02 12:15:08 [ERROR] Ошибка отправки в Telegram: Пустой ответ сервера, попробуйте задать отдельный proxy interface для подключения KeenSnap_keensnap.log 2.66 kB · 1 загрузка тыкнете носом как сделать, я ненашел? Quote
spatiumstas Posted March 4 Author Posted March 4 51 минуту назад, Ил И. сказал: тыкнете носом как сделать, я ненашел? /opt/root/KeenSnap/config.sh PROXY_INTERFACE="nwg0" Quote
Ил И. Posted March 4 Posted March 4 4 часа назад, spatiumstas сказал: /opt/root/KeenSnap/config.sh PROXY_INTERFACE="nwg0" у меня так: PROXY_INTERFACE="opkgtun12" заработал. Благодарю. Quote
Ил И. Posted March 6 Posted March 6 ещё вопрос, накой архивы разного размера всегда: Цитата 2026-03-05 06:32:29 [INFO] Архив превышает 49МБ, разбиваю на части... 2026-03-05 06:32:52 [INFO] Отправка части: /tmp/mnt/ac52ceee-570e-45e9-8411-4dde95b40bc5/KN-1010_backup2026-03-05_06-30.tar.gz.001 2026-03-05 06:33:09 [INFO] Отправка части: /tmp/mnt/ac52ceee-570e-45e9-8411-4dde95b40bc5/KN-1010_backup2026-03-05_06-30.tar.gz.002 2026-03-05 06:33:14 [INFO] Архив удалён 2026-03-05 06:33:14 [INFO] Скрипт завершил работу Запуск KeenSnap (расписание: schedule1) 2026-03-06 06:30:04 [INFO] Запуск скрипта для расписания schedule1 2026-03-06 06:30:04 [INFO] Бэкап Entware... 2026-03-06 06:31:27 [SUCCESS] Entware сохранён 2026-03-06 06:31:27 [INFO] Создание архива... 2026-03-06 06:31:59 [SUCCESS] Архив создан 2026-03-06 06:32:03 [INFO] Отправка архива: /tmp/mnt/ac52ceee-570e-45e9-8411-4dde95b40bc5/KN-1010_backup2026-03-06_06-30.tar.gz 2026-03-06 06:32:19 [SUCCESS] Сообщение успешно отправлено в Telegram 2026-03-06 06:32:19 [INFO] Архив удалён 2026-03-06 06:32:19 [INFO] Скрипт завершил работу Quote
Ил И. Posted March 8 Posted March 8 (edited) после обновления сыплет в тг: backup_log (5).txt зачем он активирует расписание после обновления если дата таже? Edited March 8 by Ил И. Quote
spatiumstas Posted March 8 Author Posted March 8 14 часов назад, Ил И. сказал: зачем он активирует расписание после обновления если дата таже? За вызов скрипта отвечает системный хук. Не удалось наиграть ситуацию, при многократном вызове хука запуск последовательный, не наслаиваемый Quote
spatiumstas Posted March 27 Author Posted March 27 (edited) Новая версия с пачкой нововведений: Спойлер Поддержка Google Drive (В README шаги для подключения) Поддержка отправки через Proxy URL Возможность задавать авто-удаление локальных архив по истечению времени хранения Скрипт собран в самостоятельный пакет Возможность отключить авто-обновление пакета В каждый архив добавляется мета-информация: версия скрипта, название/индекс/версия ПО устройства, дата, и способ отправки Улучшена проверка наличия новых версий Новое меню взаимодействия для настройки параметров DELETE_ARCHIVE_AFTER_BACKUP переименован в DELETE_LOCAL_ARCHIVE_AFTER_BACKUP config.sh переименован в config.conf Обновление с прошлых версий только через opkg update && opkg install curl ca-certificates wget-ssl && curl -fsSL https://raw.githubusercontent.com/spatiumstas/keensnap/main/install.sh | sh Добавится репозиторий и установится новый пакет. Конфигурационный файл будет переименован в config.conf, содержимое останется без изменений. Рекомендуется чистая установка при обновлении P.S. Авто-удаление локальных архивов по истечению времени ищет по паттерну {DEVICE_ID}_*backup*.tar.gz + mtime архива, при включении учитывайте это. Edited March 28 by spatiumstas 2 Quote
Recommended Posts
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.