What's new

BACKUPMON BACKUPMON v1.8.22 -Nov 28, 2024- Backup/Restore your Router: JFFS + NVRAM + External USB Drive! CIFS/SMB/NFS! (Now available in AMTM!)

  • SNBForums Code of Conduct

    SNBForums is a community for everyone, no matter what their level of experience.

    Please be tolerant and patient of others, especially newcomers. We are all here to share and learn!

    The rules are simple: Be patient, be nice, be helpful or be gone!

Viktor Jaep

Part of the Furniture
BACKUPMON v1.8.22
Released November 28, 2024

First off -- HUGE thanks to @Jeffrey Young for sharing his original backup script. His script is the main engine of BACKUPMON, and all credit goes to him! BACKUPMON is simply a wrapper around Jeff's backup script functionality, adding easy-to-use menus, more status feedback, and the ability to launch a restore based on your previous backups. Also, big thanks to @Martinski for his many contributions as well as his extremely helpful AMTM email library script, and huge props to @visortgw for contributing to the backup methodologies thread with his scripts and wisdom!

Executive Summary: BACKUPMON is a shell script that provides backup and restore capabilities for your Asus-Merlin firmware router's JFFS, NVRAM and external USB drive environment. By creating a network share off a NAS, server, or other device, BACKUPMON can point to your location of choice, and perform a daily backup to this mounted drive. To perform daily, unattended backups, simply schedule a daily job through BACKUPMON, which will automatically get added to your CRON schedule. During a situation of need, where a backup would need to be restored after a catastrophic event with either your router or attached USB storage, simply copy the backupmon.sh + backupmon.cfg files over to a newly formatted /jffs/scripts folder, ensuring that your external USB storage was formatted with the same exact name (how-to's are all retrievable from the instructions.txt in your backup folder), and perform the restore by running the "backupmon.sh -restore" command, selecting the backup you want to use, and going through the prompts to complete the restoration of both your /jffs, NVRAM and external USB drive environments.

Use-case: BACKUPMON was designed to backup from, and restore to an already configured router from an external network resource, given a situation of a corrupted USB drive, botched Entware environment, or other general corruption issues. It can, however, also restore you back to a previous state if you decide to completely wipe your router or external drive from scratch. You can use it to move from one external USB drive to another... say, upgrading from a flashdrive to an SSD! You could also use it to restore your environment to a similar router if your old one dies, and you pick up the same model + hardware revision + firmware level as a replacement (at your own risk).

Here are a couple of different network/USB backup scenarios that it is able to handle (as of v1.35):

Router USB Drive -> External Network Device/Share (on your local network)
Router USB Drive -> Local Router Network Share (could be mounted to a secondary partition on your USB Drive, or secondary USB Drive)
Router USB Drive -> Secondary Router USB Drive (plugged into the secondary USB port)
Router USB Drive -> Router USB Drive (backing up to itself into a separate folder... of course, not recommended, but possible)
Router USB Drive Partition 1 -> Router USB Drive Partition 2 (kinda like the one above, but gives it a little more separation)

NOTE: If you do go down the path of backing your USB drive to your USB drive, it's possible, but not recommended. If you accept this risk, you want to also make sure you exclude your backup folder name in the exclusion file, so you don't back up your backup folder, which will lead to exponential growth of your backup files. The safest way still is to store backups is far away from the device being backed up... so use at your own risk.

What it should NOT be used for: It is not meant to restore backups from one particular model of router (ex: RT-AC86U), to a different shiny new model (ex: GT-AX6000) that you just picked up. In this case, it's still best to set your new router up from scratch, and selectively import any critical files manually from your .TAR backups to your new router if needed. Also, please do not restore your settings/backups from an older firmware to a newer firmware. Your router's CFG (settings) file is meant for the current firmware you're on, so if you do restore, make sure it's still on the same firmware as before.

Requirements:
  • This script will allow you to back up one partition of your choice. You are no longer limited to sda1.
  • Your Network Backup Target must be able to speak the NFS or CIFS/SMB protocol, as that is the method currently used to back up your files across the network. CIFS (Common Internet File System) is a dialect of the SMB (Server Message Block) protocol, and is a very broad standard supported by Windows, Linux and Apple devices. NFS is more heavily used with Linux implementations, though supported on Windows as well, and is also supported by BACKUPMON.
  • You now have the option to backup from USB1 to USB2, or USB to itself... though not recommended.
  • Your External USB should have a valid drive label. Having a blank label may create issues backing up or restoring.
BACKUPMON is free to use under the GNU General Public License version 3 (GPL 3.0).

This project is hosted on GitHub

Latest release notes: [updated here]

Github Change Log [Here]

What's new:
More fixes, Patches & Fixes, Shared Email Library script redundancy, -secondary switch functionality, Firmware 3006 CIFS fixes, Error Log/Error Display Optimizations, NFS+New UI, Restore File Order, Exclusion file guidance, AMTM Email Notifications, tar.gz Integrity Checks, Integration with MerlinAU!, Swap File Exclusion, Multiple SMB Protocol Support, Dedicated Log File, USB Backup Options/BW Mode, Base64 Pwd Encoding & More!, Added to AMTM!, EXT USB optional, Secondary Backups + Connection Tester, Auto Purge, Timer bypass, Forced Reboot/Source-Target Checks, NVRAM backup/restore!, NVRAM Extract, Go Live!, Perpetual Backup Purging, Perpetual Frequency added, Basic vs Advanced Backup Modes, Scheduled backups & Weekly/Monthly/Yearly Frequencies!, Release Candidate!

Screenshots:


In normal backup mode, a backup will launch after 10 seconds, giving you a chance to enter setup mode, or restore mode. Normally, you would be running this command from an automated CRON job, to back up your environment unattended each day.


1721431461023.png


In a normal backup scenario, you will get STATUS feedback after each major item is completed. TAR status messages are left on to help you with any troubleshooting should something not work right, or be locked.

1721431635525.png


In a restore scenario (by executing 'backupmon.sh -restore" or hitting the X key within 10 seconds of a backup, you are presented with a list of information to successfully accomplish a restore.

1711300117375.png


How is this script supposed to run?​

In a normal, daily mode, this script would run from a CRON job, in order to back router completely on a daily basis. Instructions:
  1. Download and install directly using your favorite SSH tools, copy & paste this command (or install directly from AMTM):
    Code:
    curl --retry 3 "https://raw.githubusercontent.com/ViktorJp/BACKUPMON/master/backupmon.sh" -o "/jffs/scripts/backupmon.sh" && chmod 755 "/jffs/scripts/backupmon.sh"

  2. Configure it using this command:
    Code:
     sh /jffs/scripts/backupmon.sh -setup

  3. Run a backup manually in an SSH window with this command:
    Code:
    sh /jffs/scripts/backupmon.sh -backup (or simply just execute 'backupmon')

  4. Run a restore manually in an SSH window with this command (or hit the X button with 10 seconds of a backup starting):
    Code:
    sh /jffs/scripts/backupmon.sh -restore

  5. To make things easier, you can now just type the script name itself (without the path/extension), like so:
    Code:
    backupmon
 
Last edited:

Do I need to configure anything?​

You can enter the setup screen with the command 'backupmon.sh -setup' or by hitting the 's' key within 10 seconds of the backup starting:

1721431743469.png


Hitting the "sc" option, there are currently 15 items you can configure.

1721431769797.png


I'm definitely looking for your feedback... what works, what doesn't... what else would you like to see. But all-in-all, as good ideas come up for things to possibly add, very much a WIP (work-in-progress). ;) Lots more stuff to come... I'm looking at adding a way to add some functionality to schedule the backups in CRON... so check back soon!

More Information:

1.) How does it all work? In TLDR; format, when BACKUPMON runs a regular backup, it will create a daily folder under the folder structure you have defined for it to connect to on your network share. So for example today, on September 4, 2023, it would create a /04 folder (if you're on a "Monthly" frequency), where its backups will get dumped into.

2.) Backup Retentions- there are 4 different kinds depending on your preference:
  • "Weekly" retention would write "Mon, Tue... Sun" folders.
  • "Monthly" would write daily "01, 02, 03... 30, 31" folders for each day of the month,
  • "Yearly" would write "001, 002, 003... 364, 365" folders for each day of the year.
  • "Perpetual" would write a unique folder based on date/time, such as "20230909-092511".
At this time, "basic mode" (explained below in more detail) will back everything up in 1 week, month or year cycles, and will overwrite the backup files each time it comes across the same day in its cycle, unless you've chosen the "Perpetual" retention, in which case it keeps backups forever under its unique folder structure. In "advanced mode", it does not overwrite backups in your weekly, monthly and yearly folders, and keeps everything forever... Here's a screenshot of what your backup folders on your network share might look like (please note there's a bit of a mix between "Monthly" and "Perpetual" retention backups as I was testing... :)

1694267466886.png


3.) Backup copies - During a backup, BACKUPMON will also copy over a copy of 'backupmon.sh', 'backupmon.cfg', any optional TAR exceptions list you have defined, a text dump of your NVRAM, and a copy of restore "instructions.txt". (see above) Within this instructions.txt file, you will find the same instructions you see on screen during a restore, telling you what steps need to be taken for a successful restore. In it, is also your latest external USB drive label, which must be duplicated when you format a new USB drive, and want to restore your backup to it.

4.) The optional TAR exclusion list can be placed in a directory of your choice. PLEASE NOTE: By default, backupmon will back up everything, swap files, log files, included! It is a good idea to exclude these using this exclusion list file. You may encounter issues restoring backups if you try to restore a swap file to an already existing swap file on your router. You can create this file anywhere, but I prefer to keep things in /jffs/addons/backupmon.d and named it "exclusions.txt", just to clear the clutter. The contents of this file is simply a list of files that TAR can safely ignore during a backup. Certain files, like your swap file, or other temporary files, aren't needed when restoring a backup, and get recreated after a restore. As of v1.42, the swap file is being excluded from backups unless you override this option (#9) in the config menu. Huge thanks to @visortgw for sharing his exclusion file... the default exclusion items list looks something like this:

exclusions.txt

Code:
myswap.swp
entware/var/log/*
skynet/skynet.log
entware/var/lib/unbound/unbound.log
*.tar
*.gz

Save this file somewhere on your router, and make sure it's properly referenced in BACKUPMON. Eliminating swap and other temp files could really speed up your backups tremendously, and save you from headaches down the road on a restore.

5.) The Basic vs Advanced Mode differences are described below:

BASIC
- Only backs up one backup set per daily folder
- Backup file names have standard names based on jffs and USB drive label names
- Self-prunes the daily backup folders by deleting contents before backing up new set (N/A when 'Perpetual Retention' is enabled)
- Will overwrite daily backups, even if multiple are made on the same day (N/A when 'Perpetual Retention' is enabled)
- Restore more automated, and only required to pick which day to restore from

ADVANCED
- Backs up multiple daily backup sets per daily folder
- Backup file names contain extra unique date and time identifiers
- Keeps all daily backups forever, and no longer self-prunes
- Will not overwrite daily backups, even if multiple are made on the same day
- Restore more tedious, and required to type exact backup file names before restore

6.) Manually Purging Perpetual Backups -- Under the config menu, when selecting "perpetual" backup retention, you will have the option to choose whether you want to enable backup purging for everything older than a certain number of days. Once configured, you can manually access the purge backups functionality under the operations area under the setup menu. This function will step you through multiple prompts before committing to delete any backups, and will show you which backups are affected. PLEASE NOTE: deleting backups is permanent, and advise caution on what you are deleting, and ensure that the list presented to you is what you want deleted. Also, PLEASE NOTE: if there are any backups that you want to save or store for later use, PLEASE move these to a SAFE and otherwise secure location outside of the backup folder structure that BACKUPMON utilizes, else there will be a chance these backups will get deleted.

Automatically Purging Perpetual Backups -- if you have enabled "Perpetual Backups", and "Purge backups", and run BACKUPMON with the -backup switch (ie. "sh backupmon.sh -backup"), then it will auto purge your backups after it finishes your normal backup. This was done to make it simpler when running this under a daily CRON job to not only back up but purge as well with one command.

See screenshot below as an example:

1711300313890.png



7.) Commandline switches - When running backupmon with a switch, you can utilize other functionality that is normally only available through the UI. Here is an explanation of what each switch does:

sh /jffs/scripts/backupmon.sh -- Running the script with no switches simply runs the primary and secondary backups (no auto purge).
sh /jffs/scripts/backupmon.sh -setup -- This displays the setup + operations menu
sh /jffs/scripts/backupmon.sh -backup -- This runs the normal primary and secondary backups, and runs auto purge
sh /jffs/scripts/backupmon.sh -restore --This initiates the restore procedure, allowing you to pick from primary or secondary backups
sh /jffs/scripts/backupmon.sh -purge -- This runs the auto purge routine against the perpetual backup folders
sh /jffs/scripts/backupmon.sh -secondary -- This runs the secondary backup only, and does not perform auto purge

B&W Mode: You can now optionally run a monochrome color scheme for those who are capturing screen output by using a secondary -bw switch after any of the other primary switches. Example:

sh /jffs/scripts/backupmon.sh -backup -bw -- This runs the normal primary and secondary backups, and runs auto purge in B&W mode!
 
How do I restore a backup?

As per the instructions.txt file that is automatically copied to your backup folders, the restore instructions are as follows:

Code:
RESTORE INSTRUCTIONS

IMPORTANT:
Asus Router Model: GT-AX6000
Firmware/Build Number: 3004.388.4
EXT USB Drive Label Name: ASUS-SSD

WARNING: Do NOT attempt to restore if your Asus Router Model or Firmware/Build Numbers differ from your backups!

Please ensure your have performed the following before restoring your backups:
1.) Enable SSH in router UI, and connect via an SSH Terminal (like PuTTY).
2.) Run "AMTM" and format a new USB drive on your router - label it exactly the same name as before (see above)! Reboot.
3.) After reboot, SSH back in to AMTM, create your swap file (if required). This action should automatically enable JFFS.
4.) From the UI, verify JFFS scripting enabled in the router OS, if not, enable and perform another reboot.
5.) Restore the backupmon.sh & backupmon.cfg files (located under your backup folder) into your /jffs/scripts folder.
6.) Run "sh backupmon.sh -setup" and ensure that all of the settings are correct before running a restore.
7.) Run "sh backupmon.sh -restore", pick which backup you want to restore, and confirm before proceeding!
8.) After the restore finishes, perform another reboot.  Everything should be restored as normal!


PLEASE NOTE: The USB Drive Label name is included in this file for you to remember what your drive was called, so when you format a new USB drive, you can label it with the same exact name. If you really want to call it something different, try changing the label after you have restored all your files.

Post-restore activities
I don't have an overly complex environment on my test router, and after testing out a restore on my test router using the instructions above, I didn't have any post-restore issues.

The key is, once all files are restored, virtually any complex environment should continue to run, even if you're also running Diversion, YazFi, Unbound, x3mrouting, etc... If you run across any other gotchas, please post them below, and I'll add to the instructions.

Automation
BACKUPMON now has the option to schedule your daily backup routine, and will add a CRON command to kick things off. Please refer to the configuration menu to set the hour and minute. Once enabled, it will automatically schedule your backup job. If you want to get creative and add other jobs, please use the instructions below to create a backup job in CRON... You can look up how to properly format a scheduled event using tools like these: https://crontab.guru/

To run a daily job at 2:30am, BACKUPMON will add this line to your services-start file (located under your /jffs/scripts folder), and it will automatically be scheduled after your next router reboot:

Code:
cru a RunBackupMon "30 2 * * * sh /jffs/scripts/backupmon.sh"


1695849002867.png


:p
 
One of my all-time most favoritest things is when threads close due to them hitting 25 pages, or when they reach 6 months in age, or whichever happens first. FAVORITE.
 
I agree, that's what should work and (on the old install does), but on the new (current) install that is not happening

So in Test setup
(2) : Test Target Username : Everyone
(3) : Test Target Password :
works
Code:
INFO: Backup Target (10.50.60.115) reachable via PING.
INFO: External test drive mount point exists. Found under: /tmp/mnt/backups
STATUS: External test drive (\\10.50.60.115\Router) mounted successfully under: /tmp/mnt/backups
....

But
(2) : Test Target Username : Everyone
(3) : Test Target Password : any password (e.g. 1234)
does not!
Code:
INFO: Backup Target (10.50.60.115) reachable via PING.
INFO: External test drive mount point exists. Found under: /tmp/mnt/backups
mount: mounting \\10.50.60.115\Router on /tmp/mnt/backups failed: Permission denied
That indeed is weird... I will need to dive into this further as I'm backing up to Windows Server... perhaps something happened with Windows 11 24H2.

But in the interim, manually changing the config to reflect a username and blank password, and seeing how that works.
 
That indeed is weird... I will need to dive into this further as I'm backing up to Windows Server... perhaps something happened with Windows 11 24H2.

But in the interim, manually changing the config to reflect a username and blank password, and seeing how that works.
So close......

Running with no password works for test and manual backups, but not for automatic backup

Nov 28 2024 03:30:00 Router BACKUPMON[30092] - **ERROR**: Plaintext passwords detected. Please check your configuration!
 
So close......

Running with no password works for test and manual backups, but not for automatic backup
Let me work on a quick fix for this...
 
So close......

Running with no password works for test and manual backups, but not for automatic backup
Please give this new v1.8.22 a shot, @archiel ... this fixes the blank password issue, and contains a bunch of fixes that @Martinski made.

Code:
curl --retry 3 "https://raw.githubusercontent.com/ViktorJp/BACKUPMON/develop/backupmon.sh" -o "/jffs/scripts/backupmon.sh" && chmod 755 "/jffs/scripts/backupmon.sh
 
The script was just sitting there, until I realised there is a missing " at the very end. Setup now accepts a blank password and as both Manual and Test work, I will let you know if tomorrow if it runs overnight as scheduled.

On looking around I can see that 24H2 has tightened up several security settings, I have not found the one that requires a valid user/password combination, even if it is Everyone/{blank}, when guest access is enabled, but did find out why I could not connect to some other smb shares on a Ubuntu machine. I would guess that part of the problem is that I am using a clean install, where my other Win 11 machines were upgraded, so their old security settings were retained.
 
The script was just sitting there, until I realised there is a missing " at the very end. Setup now accepts a blank password and as both Manual and Test work, I will let you know if tomorrow if it runs overnight as scheduled.
Sounds good... this updated version lets you configure a blank password, and it'll insert the "" into the cfg file. Probably a good idea to have this anyways. ;)
On looking around I can see that 24H2 has tightened up several security settings, I have not found the one that requires a valid user/password combination, even if it is Everyone/{blank}, when guest access is enabled, but did find out why I could not connect to some other smb shares on a Ubuntu machine. I would guess that part of the problem is that I am using a clean install, where my other Win 11 machines were upgraded, so their old security settings were retained.
It's pretty strange. I've been using a Windows Server 2019 for a good 4 years, and just upgraded it to Server 2025 last weekend. It's basically the same as Windows 11, at 24H2 level. I'm able to use "admin/admin", and it works fine even though it's not expecting a password.
 
Sounds good... this updated version lets you configure a blank password, and it'll insert the "" into the cfg file. Probably a good idea to have this anyways. ;)

It's pretty strange. I've been using a Windows Server 2019 for a good 4 years, and just upgraded it to Server 2025 last weekend. It's basically the same as Windows 11, at 24H2 level. I'm able to use "admin/admin", and it works fine even though it's not expecting a password.
The backup ran fine, so all good there. Did you upgrade over WS 2019 or was it a clean install? Bases on my experience, with the former then I would expect amin/admin to work, and with the latter for it to fail. If admin/admin works on a clean install, then I have some more checking to do.
 
The backup ran fine, so all good there. Did you upgrade over WS 2019 or was it a clean install? Bases on my experience, with the former then I would expect amin/admin to work, and with the latter for it to fail. If admin/admin works on a clean install, then I have some more checking to do.
Yeah it was an upgrade, so that might be why it's still working.
 
Happy Thanksgiving! For the trifecta, here comes a new version of BACKUPMON that includes some improvements and fixes by @Martinski (thank you!!) as well as the ability to now use blank passwords, thanks to @archiel bringing this to light. ;)

What's new?
v1.8.22 - (November 28, 2024)
- PATCH:
Fixed printf() command syntax. (Thanks @Martinski!)
- PATCH: Added code to suppress updating the timer prematurely within the main loop due to repeatedly fast key presses. (Thanks @Martinski!)
- PATCH: Minor code improvements. (Thanks @Martinski!)
- PATCH: Now allowing for blank passwords thanks to some sleuthing by @archiel. Dealing with issues stemming from a Windows 11 target that was expecting a blank password. In this case, passing a bogus username/password was causing permissions denied errors when trying to access the shared drive location.

Download link:
Code:
curl --retry 3 "https://raw.githubusercontent.com/ViktorJp/BACKUPMON/master/backupmon.sh" -o "/jffs/scripts/backupmon.sh" && chmod 755 "/jffs/scripts/backupmon.sh"
 
Happy Thanksgiving! For the trifecta, here comes a new version of BACKUPMON that includes some improvements and fixes by @Martinski (thank you!!) as well as the ability to now use blank passwords, thanks to @archiel bringing this to light. ;)

What's new?
v1.8.22 - (November 28, 2024)
- PATCH:
Fixed printf() command syntax. (Thanks @Martinski!)
- PATCH: Added code to suppress updating the timer prematurely within the main loop due to repeatedly fast key presses. (Thanks @Martinski!)
- PATCH: Minor code improvements. (Thanks @Martinski!)
- PATCH: Now allowing for blank passwords thanks to some sleuthing by @archiel. Dealing with issues stemming from a Windows 11 target that was expecting a blank password. In this case, passing a bogus username/password was causing permissions denied errors when trying to access the shared drive location.

Download link:
Code:
curl --retry 3 "https://raw.githubusercontent.com/ViktorJp/BACKUPMON/master/backupmon.sh" -o "/jffs/scripts/backupmon.sh" && chmod 755 "/jffs/scripts/backupmon.sh"
@Viktor Jaep is on a roll this morning! Thanks to both @Martinski and @Viktor Jaep for their continued joint support to our community.
 

Similar threads

Latest threads

Support SNBForums w/ Amazon

If you'd like to support SNBForums, just use this link and buy anything on Amazon. Thanks!

Sign Up For SNBForums Daily Digest

Get an update of what's new every day delivered to your mailbox. Sign up here!
Top