那啥,昨天没更新内容是因为前天晚上搞程序把Router OS的路由器给玩崩了。
看上图,明明要去这里却被路由器指向了那里,搞不明白的还以为互联网两大巨头合并了呢。
折腾了快半天的时间,Router OS的路由器恢复。
这时候想了一个问题,干嘛我不给路由器的设置备个份呢?iN的路由器从2020年架设起来其实就没什么大动。
期间就简单的修修补补的改变一些设置。以至于昨天路由器崩了之后大大小小几十个设置项目都得重新设置一遍,有的时候这的确很让人觉得折手。看了路由器的存储空间,里面最晚的备份项目也是三年前的了。几乎不能恢复,重设排查等一系列操作还不如从头弄个一个裸金属设置呢。
设置完也是下午3点多了,那么有了这次教训,还是要讨论下备份的必要性了。一般的来说一个路由器基本上设置后就不会再做修改了,通常可以稳定的运行几年甚至十几年,备份在路由器上的价值并不是特别大。但对于家庭用户来说,我们的各种修改和配置几乎是不断的。有的时候崩溃性事件的发生还是更依赖于备份的配置回滚。
在Router OS上做备份这个操作很简单,只需要直接在命令行运行/system backup 就可以在文件存储区生成当前系统的备份。或者用 /export命令也可以将所有的设置参数导出成脚本配置文件。
只不过,这两个命令都需要手动的执行。虽然Router OS中有计划任务的设定。我们也可以为Router OS生成基于时间戳的备份任务。但通常路由器的存储空间比较有限,这就会导致过一段时间,备份文件会填满存储空间,回头手动删除其实也是很麻烦和耗费精力的事情。
那么怎么做呢?
写脚本来处理,这个处理有几个要点可以和大家说说。
第一、为了避免路由器内的备份文件充满存储空间,因此采用了覆盖性的备份机制。只备份一周内的路由器设置,每个weekday的设置进行相互覆盖。最终在路由器上只会生成AutoBackup-0~6这七个备份文件。
当然了,我们可以在脚本里设定 :local day daynum % 7,这个7其实就是备份的数,会返回0-6之间的整数,如果想设置半个月的话,可以将 7 换成15。再改改后面的程序就可以了
第二、为了让0~6和真正的星期几进行对应,这就涉及到了日期-星期算法,不过Router OS的脚本里面没有这个现成的函数,所以自己写一个,这也就是weekday (($dayNum + 6 + ((13 * ($monthNum + 1)) / 5) + $K + ($K / 4) + ($J / 4) + (5 * $J)) % 7)生成weekday的机制了
第三、就是覆盖在ROUTER OS中backup生成的文件如果之前不存在的话会直接生成,如果之前存在的话会直接覆盖。所以利用这个机制和上面的算法我们就可以保证文件区域最多只有7个文件存在,这样就可以免去日后不断的删除备份文件的困扰
下面就是备份的整个脚本了,在系统-脚本中保存一下就可,iN在这里给脚本起了一个名字叫做AutoBackup
:local date [/system clock get date]:local firstDashPos [:find $date "-"]:local secondDashPos [:find $date "-" ($firstDashPos + 1)]:local year [:pick $date 0 $firstDashPos]:local month [:pick $date ($firstDashPos + 1) $secondDashPos]:local day [:pick $date ($secondDashPos + 1) [:len $date]]:local yearNum [:tonum $year]:local monthNum [:tonum $month]:local dayNum [:tonum $day]:if ($monthNum < 3) do={:set yearNum ($yearNum - 1):set monthNum ($monthNum + 12)}:local K ($yearNum % 100):local J ($yearNum / 100):local weekday (($dayNum + 6 + ((13 * ($monthNum + 1)) / 5) + $K + ($K / 4) + ($J / 4) + (5 * $J)) % 7):local backupName ("AutoBackup-" . $weekday . ".backup"):log info ("Backup file name is: " . $backupName)/system backup save name=$backupName今天早起看了下,已经在文件区域生成了两个备份文件,一个是昨天调试的,第二个是自动生成的。
对应的日期也是 0代表周日,6代表昨天的周六、明天早上还会生成一个-1代表周一的备份文件。
脚本做好之后,你要做的就是在计划任务中调用这个脚本。路径系统-计划任务
在任务窗口中设定开始时间和执行间隔就可以让脚本程序在计划的时间内运行起来
在On Event中输入脚本名称“AutoBackup”。这件事就算是做完了。
这只备份方法没啥用处,比较符合咱们“无用技”的栏目特色。但可以保证Router OS用户只要路由器硬件不坏掉,总是有机会恢复一周内任意天的路由器配置信息,可以图个安心。
那如果路由器坏掉了都登录不进去了咋办?这些配置备份信息就废掉了吗?
其实还可在脚本中加一条/tool sendmail 把当天的配置文件发到自己邮箱里面去。当然了,这个对于iN来说必要就不大,于是没写进去。如果你觉得每天都会在电子邮件里面收到配置文件很烦,也可以酌情的用if判断,例如 if weekday= 0 ,只发送周日的备份文件。