The support forum

Release 79

May 04, 2018

Executive summary

It's a very good release.

Release at a glance

⦁    Brand new copying module dubbed the "ultra copier"
⦁    Support for retrying backup steps on transient failures
⦁    Support for disabling tray alerts for missed backups

Notable fixes

⦁    Resolved an issue with losing UI config file on machine reboots
⦁    Resolved two issues with handling of file symlinks
⦁    Resolved an issue with "Another instance is running" popup

Smaller changes

⦁    Flushing is now Off by default for removable devices
⦁    Delta copying thresholds are now 16 MB and 64 MB (see below)

⦁    New progress bar for bulk and delta copying
⦁    Ctrl-A now selects all text in edit boxes
⦁    "More" links are now shown in blue

⦁    Better handling of the OneDrive folder and offline files
⦁    Pre/post-commands now launch .bat files via "cmd /c ..."
⦁    Templating of new backup jobs is now simpler

May 04, 2018

The Ultra Copier

This is a big change, which was long due. The central piece of code that shuffles data from a file to its backup copy was completely redone. The previous version is still perfectly fine, but it is now several years old and we've learned a thing a two during that time.

In short, the ultra copier is:

⦁    Faster in bulk copying and faster in processing of smaller files.

      Details are here -

⦁    Faster in delta copying. Much faster. To the point that it can now
      shovel data between two NVMe drives with virtually no impact on
      the speed over regular bulk copy.

      Details are here -

⦁    Copying is now resumable after cancellations and IO errors. In fact,
      you can now yank an USB drive from its port in the middle of a write
      and Bvckup 2 will automatically correct the file corruption that this
      may cause, while preserving as much of existing data as possible.

      Details are here -

      *  Not that yanking a drive is ever a good idea though.

Additionally, the ultra copier looks at the exact drive type (HDD, SDD, NVMe, etc.), USB connection details and a network protocol version to adapt its IO profile for the setup.

If you have some time, do read through the linked posts. It's one of more interesting changes to the program in a while.

May 04, 2018

Support for retrying on transient failures

Starting with this release the backup engine will retry backup steps when they fail in a certain way. By default, the retrying is enabled for network-related failures as this is the number ones source of intermittent failures that tend to resolve themselves in a short amount of time.

The retry schedule is 20 times 15 seconds apart, configurable as per usual.

The engine already had a list of so-called "fatal errors" which cause a backup run to be aborted when encountered. This list includes errors like "Device not found", "Volume dirty" and everyone's all time favorite "Disk corrupted".

Details are here -

May 04, 2018

Disabling tray alerts for missed backups

By a popular request, it's now possible to disable systray icon blinking when a periodic backup misses its scheduled run. The error will still be logged, but the icon won't blink.

Details are here -

* However, this is a bit like sweeping dust under the carpet. A better
option is to suppress or to delay these alerts exactly in more precise
manner -

May 04, 2018

Notable fixes

⦁    Resolved an issue with losing UI config file on machine reboots

UI's ini file *was* saved in response to Windows "we are rebooting" notification, but it was initiated _after_ the UI responded to the latter. So in some cases Windows ended up nuking the program before the save was completed.

⦁    Resolved two issues with handling of file symlinks

1.  The engine erroneously skipped symlinks that were pointing back into the source tree. This is a _folder_ processing logic (because we'd end up in a loop if we were to allow that). File symlinks we should be following regardless of where they point.

2. When copying a file via symlink, the engine used wrong API to query its size, so it ended up always thinking the size was 0. This would've not been a problem if the engine didn't have an optimized copying routine for zero-sized file. This routine works by creating a backup file and then closing it write away, without attempting an IO.

⦁    Resolved an issue with "Another instance is running" popup

This was due to the program being started twice in rapid succession.

May 04, 2018

Smaller changes

⦁    Flushing is now Off by default for removable devices

Previously the engine would force-flush file buffers after copying each file if the backup device was removable. In retrospect this is not really needed, because it's a duplicate of Windows' per-device write cache policy, which is what needs to be changed IF a device is indeed prone to sudden removals.

⦁    Delta copying thresholds are now 16 MB and 64 MB (see below)

That is, when enabled, delta copying is now used for all files over 64 MB and for recently-modified files over 16 MB, whereby "recently" is "within last 30 days".

May 04, 2018

⦁    New progress bar for bulk and delta copying

Any excuse to redesign a progress bar is a good excuse. Here's the 5 years of evolution of the damn thing -

⦁    Ctrl-A now selects all text in edit boxes

As it turns out it's NOT a default behavior of native Windows controls.

⦁    "More" links are now shown in blue

In some configuration windows there's a plaintext "More" at the bottom right corner. It used to be dark gray, so some people assumed it was a disabled option and never bothered to try it... even though it changed color invitingly on hover.

As of this release, these are blue. Looks a bit more busy, but hopefully a bit more actionable too.

May 04, 2018

⦁    Better handling of the OneDrive folder and offline files

1. The UI now doesn't complain when you are setting up a backup of C:\ that goes into a OneDrive folder:

        C:\    =>    C:\Users\foo\OneDrive

Previously, it would say "Destination is a subfolder of the source" and refuse to OK the setup.

2. The engine now understands "offline files" and complains intelligently when it fails to copy them -

⦁    Pre/post-commands now launch .bat files via "cmd /c ..."

If a pre/post-command ends with ".bat" and the whole command is a filename, then the engine will launch it with "cmd /c <command>".

⦁    Templating of new backup jobs is now simpler

This is an internal change that cleans up the initialization of the default exclusion list. Just rest assured that it's all tidy and neat there now.

May 04, 2018


Direct update link -
Thread for any issues -

May 07, 2018

Releases 79.0.1  -  79.0.3

These went out over the course of past few days to patch an issue each.

In particular,
79.0.1 patched an issue with finalizing partial copies
79.0.2 - an incorrect self-consistency check in the ultra copier code,
79.0.3 - an issue with running (or rather *not* running) on XP

The last of these will show up through in-app updates shortly, but you can also update to it manually via

May 08, 2018

Release 79.0.4

⦁    Resolved an issue with retrying on network errors while _scanning_
⦁    Resolved an issue with "error 0" being shown for failed file deletes

May 15, 2018

Release 79.1

⦁    Resolved an issue with copying files that are _shrinking_
⦁    Added support for AppExecLink reparse points

May 20, 2018

Release 79.2

⦁    Resolved an issue with resuming delta copying after a write failure
      due to an out-of-disk-space condition
⦁    Resolved an issue with resuming delta copying after a cancellation
      that was preceded by a write failure
⦁    Resolved an issue with sending alerts over TLS
      As per -

May 25, 2018

Release 79.3

⦁    Resolved an issue with scanning getting stuck in case of network
      errors under certain circumstances.

⦁    Resolved an issue with delta copying - the copying module would
      erroneously deem a delta state invalid if the only change on the
      previous run was to the last block of the file *and* the file length
      was not a multiple of 64KB.

      As per -

⦁    Added an option for explicitly selecting a VSS provider to use for
      shadow copying.

May 29, 2018

Release 79.4

⦁    Resolved an issue with shadow copying not working on XP
⦁    Resolved an issue with archiving trimming reporting too many
      completed steps in a presence of network errors
⦁    Added a safeguard to catch sporadic crashes in the guts of Lavasoft
      Adaware when issuing SetFileCompletionNotificationModes requests

Jun 26, 2018

Release 79.5

⦁    Resolved an exotic issue with ultra copier in a presence of network
      errors - in some edge cases when a network connection drops some
      of file system requests still may complete successfully, while most
      won't. The ultra copier assumed that all will fail and that led to some
      misplaced panicking on its part.

⦁    Fixed scheduler's behavior when an over-the-network real-time job
      ran into a non-network related error. It's a mouthful, but basically it
      means that when a share, for example, ran out of space, the engine
      kept running the job in a loop, because it assumed it was a retryable

⦁    Revised how the installation fingerprint is calculated. As in, Microsoft
      is at it again, breaking things with recent W10 updates.

⦁    Added support for "final" qualifier to default exclude/include rules.
      This is something that can't be explained briefly. Stand by for a link
      to a separate detailed post...

⦁    Added a manual override to support (much) older Samba versions
      that don't return correctly truncated timestamps unless a file is
      closed and re-opened.

Aug 03, 2018

Release 79.6

⦁    Added native support for dynamically modifying source/backup
      paths using current date and time variables.

      The gist of it is here -
      Full spec is here -

⦁    Reworked "Run on low priority" option to also allow reducing
      *disk* load in addition to just lowering program's process priority.

      See here for details -

⦁    Reworked the retrieval of file IDs during the planning phase (these
      are used to track moved and renamed files) - the process is now fully
      parallelized, with IDs being retrieved by a pool of threads. In short,
      this step now should be noticeably faster... unless you are running
      on a single-core CPU, in which case you should see no difference.

⦁    Patched up archiving code to strip leading space when archiving
      files with no name but just an extension. Previously, if we were
      archving ".abc" it ended up being saved as " (2018-08-01 ...).abc".
      That is with a space in front of the opening brace. No more now.

⦁    Fixed an issue with copying Alternate Data Streams in out-of-space

⦁    Fixed an issue with delta copying when updating a file that has
      shrunk since the last time and running into an error trimming
      the backup copy (e.g. because of the network error).

⦁    Assorted cosmetic fixes to the backup logs, mostly to make them
      read more concisely in collapsed form.

Release 79.6.1 - 79.6.4

⦁    Fixed several issues with the program complaining that "Something
      went wrong" under certain conditions.

      All issues were related to the logging module, or more specifically
      to an incorrect self-consistency checks that were added in 79.6 as
      a part of the logging module cleanup.

     That is, these weren't the bugs in the actual code. These were the
     bugs in statements that verified correctness of the code, in real-time.
     So they caused the program erroneously panic over an otherwise
     perfectly valid code.

Sep 05, 2018

Release 79.7

⦁   Added an option for NOT copying *folder* timestamps. This is the
     last phase of a backup run, that is logged under "Updating folder
     information" section.

     This is a manual override for now, but we may later give it some UI
     presence or even promote to a default. See this post for details -

⦁   Fixed two issues with the ultra copier. One was related to updating a
     backup copy of a actively shrinking file and another - to handling of a
     backup location going away precisely after all the copying was done,
     but the backup file wasn't yet closed.

⦁   Fixed an issue with copying NTFS alternate streams on Windows XP.
     It is basically unsupported, but the program tried to do it anyway
     and panicked when it saw no required API support.

⦁   Fixed an issue with editboxes no longer vertically centering the input
     text on preview builds of Windows 10. In some cases the input was
     so off center that it was clipped.

     This was caused by Microsoft outright breaking the handling of
     EM_SETRECT message in "Edit" controls. Completely destroying
     it for no apparent reason or explanation.
⦁   Fixed an issue with the Task Scheduler task that Bvckup 2 creates
     to launch itself at user's logon, when set to run as Administrator.

     As of this release the task is called "Bvckup 2, for %SID%", whereby
     the last bit is the user account's SID. Previously, the name ended
     with "... for user@domain" and that caused some issues if the user
     account or the computer itself was renamed.

⦁   Fixed an at-launch issue when the engine cannot open a log file for
     a backup job. In certain cases the program would panic and exit.
     Now it doesn't.

⦁   Reworked the on-launch check of whether the program's window is
     visible on any monitor.

     There is a built-in Windows function for that, but apparently it will
     sometimes fail (and show that the window is completely off screen)
     *unless* the program first enumerates all present monitors. This is
     most likely a quirk with a 3rd party display driver... though in the
     only reported case it was NVIDIA.

Sep 17, 2018

Release 79.8.x

⦁   Fixed an XP/WS2003 issue with handling copying aborted due to a
     certain errors.
     The issue was due to the need to emulate newer API for IOCP (IO
     completion ports) on these Windows versions and the emulation
     code was incorrectly handling the case of a device abruptly going

⦁   Patched "Backup everything" option from the systray menu to
     queue jobs in the order they appear in the UI. As per this report -

Sep 19, 2018

Release 79.9

⦁   Resolved an issue with destination scanning, which manifested in
     logging entries being recorded at the wrong log level. Internally,
     the issue was due to not marking destination scanning phase as
     such, so the engine ended up re-using source scanning rules for
     the destination scan. In the vast majority of cases this made no
     difference, but in some cases it did, potentially causing more files
     to be retained in the backup than required.

     The issue was introduced in 79.8 release, so an update is strongly
     recommended if you are running 79.8.

Sep 26, 2018

Release 79.10

⦁   Changed "archive_modified" override to NOT require deleting option
     to be set to "archive" as well. That is, it's now possible to set a backup
     job to archive just modified files and not deleted ones.

⦁   Resolved an issue with file system information not being saved for
     newly created jobs. This caused this information to be re-queried on
     every run, which in turn caused a real-time job to run back-to-back
     even when there were no real changes.

⦁   Reverted default window size to its original values. An earlier change
     was to let Windows size it, but in some cases it resulted in a window
     being set too wide and tall.

Oct 02, 2018

Release 79.11

⦁   Resolved an issue with file system information querying/caching.

     This is related to the issue resolved in 79.10. Both were caused by an
     internal rework of the backup prep phase done in 79.9.

Oct 21, 2018

Release 79.12

⦁   Fixed an issue with querying destination file system and device

     In some cases the program would try and do it before backup folder
     is created, logging one or two errors as a result of that. Operationally
     this made little difference in the vast majority of cases, but it was still
     a bug, so fixed.

⦁   Fixed an issue with erroneous "Login required" failures after a
     successful authenticated connection to a publicly inaccessible share.

     That is, if you were backing up to/from a share that _required_ an
     authentication and that wasn't accessible otherwise, then on the
     first backup run the program would successfully connect to the
     share (using credentials supplied), but then it would bail out
     erroneously thinking that it still didn't have a connection.

⦁   Fixed an issue with redrawing pushpin icons in the Backup To/From
     fields in the Backup Settings dialog when collapsing "More section"
     of the window. In some cases there would be some junk drawn in
     place of the icons, because the latter weren't re-drawn after the
     window was transformed.

⦁   Fixed an issue with copying progress bar variable precision %-age

     It's a mouthful for this - when copying larger files, the UI will show
     the progress bar and the %-age done so far. Depending on the
     copying speed and size of file, the percentage may show one or
     more decimal places (up to 3) to make sure there _is_ some non-
     trivial activity shown even for slow-going copies. The issue was that
     this bit was broken in recent releases and the UI always showed no

⦁   Added retrying on "VSS is busy" condition when creating a source
     volume snapshot.

     The context is this - Shadow Copying service may refuse creating a
     volume snapshot if another snapshot is being created at the very
     same moment. This is an inherently retryable situation, so this
     release adds just that - the engine will now retry up to 10 times 30
     seconds apart when running into this condition.

     Retry parameters are configurable through the INI.

     Retrying is enabled only when "More Options" > "Shadow Copying"
     is set to "Require", and not for the "As needed" setting.

⦁   Speeded up saving of destination snapshots at the end of a backup.

⦁   Suppressed logging of deduplicated files during the scanning phase.

     These were logged because dedup'd files are reparse points and RPs
     were unconditionally logged before this change.

⦁   Suppressed complaints about deprecated INI entries when upgrading
     from pre-78 releases.

Oct 30, 2018

Release 79.13

⦁   Added support for pre-computing delta state of existing backups

⦁   Added support for displaying absolute next-run times in the UI

⦁   Changed the layout of About window a bit.

⦁   "Switch mode" menu option is now shown by default on Windows
     Server installations.

⦁   "Backup everything" option from the tray menu now does NOT apply
     to disabled jobs.

⦁   Fixed tabbing order in the Backup Settings window.

⦁   Fixed Ctrl-A support in edit boxes.

Nov 07, 2018

Release 79.14

⦁   Fixed cosmetic issue with fading transitions in the UI, i.e. reworked
     code to eliminate occasional flicker during fade-ins and fade-outs.

⦁   Fixed an issue with the UI not showing changes in backup state.

     The issue surfaced when running without Administrator privileges.
     About 20 minutes after launching the program the UI would stop
     receiving updates from the engine, so while you could start a job
     with Go and it would execute, the UI wouldn't actually show any job

     Another symptom was that when an activation code was used to
     license an installation, the UI would confirm the activation going
     through, but then keep on saying that the program was still in trial
     mode. That too was due to the UI not receiving respective updates
     from the engine.    

     #   Kudos to Andy, Lanka, Michael and John for helping with
           reporting and tracking down this issue.

     For those on their coffee break, here's some light reading as to Why
     this was happening.

The post-mortem

The cause of the issue was a trivial mistake in the code that tried reading some VSS-related information without first checking that VSS was available. This led to an "Access denied" fault, which should, under normal circumstances, trigger a crash. So it should've been a really visible issue that would've been caught in testing on the first pass.

However in this case the code in question was in a callback set with SetTimer() function. When the top-level UI code called DispatchMessage(), the control went to user32.dll, which issued the callback, the callback ran that code and the code crashed.

You'd think what difference does it make, a crash is  a crash... Yes, exactly. Welcome to the club.

Apparently, callbacks issued by SetTimer() are framed by a pair of RtlActivateActivationContextUnsafeFast() and RtlDeactivateActivationContextUnsafeFast() calls, which set up and tear down their own SEH handler. So the timer callback code can crash all it wants and you'll be none the wiser.

Here's a sample code -

So what happened in Bvckup's case is that it would receive a timer callback, which will run its internal event loop. The loop will dispatch event handlers and one of them will throw a SEH exception, which will be promptly eaten by user32.dll instead of being passed up to  the UI for reporting.

This left the UI thinking that its event loop was still active, so on the next timer callback the UI would see that the loop is still busy and it would skip running it - hence completely stalling the event  processing, including the reception of the updates from the engine.

Long story short - set your exception handlers for all your callbacks from Windows API or end up seeing your code behave in a way that makes no sense whatsoever.
Topic is locked.

New topic

Made by Pipemetrics in Switzerland

Blog / RSS
Social Twitter
Miscellanea Press resources
Legal Terms