Всем привет!!!
Давайте я расскажу как делать резервную копию конфигурации Mikrotik на USB флешку и как сделать автоматическое удаление старых версий, что бы флешка не пере заполнилась со временем.
В интернете есть много способов как делать резервную копию конфигурации Mikrotik. Кто-то делает ее на почту, кто-то в телеграм. Я же пошел другим путем – своим: делать резервную копию на usb флешку. Для начала думал задача простая и я легко найду подходящий скрипт для резервной копии и удаления старых файлов, но оказалось нет. Перерыв кучу материалов я так и не нашел рабочего способа. Вот почему выходит данная статья.
Делал скрипты я не сам. Мне помогал ИИ, но его скрипты не работали. Оказывается ChatGPT не умеет делать рабочие скрипты для Mikrotik. В результате мне помогал один очень хороший человек, который на этих микротиках “собаку съел”. За что ему огромное спасибо. Дальше без воды, все по делу.
Исходные данные:
- Mikrotik RB5009
- MikrotikOS 7.16.1
- USB флешка на 16ГБ
Вставляем USB флешку в Mikrotik и форматируем ее в ext4. Почему в ext4? Все просто. Во-первых, эта файловая система не подвержена фрагментации. Во вторых, флешка может пригодиться для других нужд, например для docker контейнеров, а им нужна именно ext4 файловая система. Так написано в руководстве Mikrotik.
Теперь открываем File и в usb1-part1 создаем директорию backup. Тут и будут лежать наши резервные копии конфигурации Mikrotik
Затем открываем System > Script и создаем новый с таким содержимым:
:local currentTime [/system clock get time]
:local currentDate [/system clock get date]
:local backupFile "usb1-part1/backup/backup-$currentDate-$currentTime.backup"
:local backupTXT "usb1-part1/backup/backup-$currentDate-$currentTime.txt"
/system backup save name=$backupFile
/export show-sensitive file=$backupTXT
Немного поясню что к чему. Первые две команды нужны для вычисления даты и времени, которые потом будут в имени файла фигурировать. Затем две команды указывают куда сохранять резервные копии и с каким именем. А вот сами резервные копии две. Та что Backup это встроенный механизм в mikrotik для резервной копии конфигурации. Из этой резервной копии можно восстановить конфигурацию, но только на этом же устройстве. А я хочу что бы резервная копии была на случай выхода из строя самого устройства. Ну типа переставил флешку в новый роутер и восстановил. С родным backup так не получится.
Поэтому я дополнительно в скрипте делаю резервную копию в текстовый файл rsc. Опция show-sensitive заставляет заносить в файл все пароли и секретные ключи в открытом виде. Это поможет в будущем восстановиться из этой резервной копии полностью, не заставляя ваших клиентов вносить изменения в их клиентское ПО. Но как вы понимаете, в этом случаи резервная копия менее конфиденциальная. Не давайте ее кому попало.
Затем нужно запланировать выполнение скрипта по расписанию. Для этого откройте System>Schedule и создайте новую задачу. На начальном этапе я делаю резервную копию каждый день в 3 часа ночи. Возможно в будущем я буду делать это реже.
Теперь нужно как-то позаботиться что бы флешка не перезаполнилась. Для этого делаем еще один скрипт:
Напомню, что моя версия MikrotikOS 7.16.1 В других версиях этот скрипт может работать не корректно.
{
:local daysAgo 30;
:local filter "usb1-part1/backup/";
:local curDate [ /system clock get date ];
:local curMonth [ :pick $curDate 5 7 ];
:local curDay [ :pick $curDate 8 10 ];
:local curYear [ :pick $curDate 0 4 ];
:foreach i in=[/file find type=backup] do={
:local fileDate [/file get number="$i" last-modified]
:set fileDate [ :pick $fileDate 0 11 ];
:local fileMonth [ :pick $fileDate 5 7 ];
:local fileDay [ :pick $fileDate 8 10 ];
:local fileYear [ :pick $fileDate 0 4 ];
:local sum 0;
:set sum ($sum + (($curYear - $fileYear)*365));
:set sum ($sum + (($curMonth - $fileMonth) * 30));
:set sum ($sum + ($curDay - $fileDay));
:if ($sum >= $daysAgo && [/file get number="$i" name]~"$filter") do={
/file remove $i;
}
}
:foreach i in=[/file find type=script] do={
:local fileDate [/file get number="$i" last-modified]
:set fileDate [ :pick $fileDate 0 11 ];
:local fileMonth [ :pick $fileDate 5 7 ];
:local fileDay [ :pick $fileDate 8 10 ];
:local fileYear [ :pick $fileDate 0 4 ];
:local sum 0;
:set sum ($sum + (($curYear - $fileYear)*365));
:set sum ($sum + (($curMonth - $fileMonth) * 30));
:set sum ($sum + ($curDay - $fileDay));
:if ($sum >= $daysAgo && [/file get number="$i" name]~"$filter") do={
:log info $i;
/file remove $i;
}
}
}
Поясню за этот скрипт. В самой первой переменной устанавливаются дни для хранения резервной копии. Все что старше будет удаляться этим скриптом в папке с резервной копией backup. Вы можете изменить количество дней по своему усмотрению. А дальше добавьте этот скрипт в планировщик, ну например раз в неделю или раз в месяц, что бы он чистил старые резервные копии.
Ну вот и все. Как итог у вас на флешке всегда лежат резервные копии. Флешку можно переставить из неисправного Mikrotik в исправный и восстановить конфигурацию. Либо просто скачать резервную копию себе на ПК.
Теперь вы знаете как я делаю Резервная копия Mikrotik на USB флешку. А как вы делаете?