Changed the run_pipeline! function to instead use Open3.pipeline_start
In doing so, the code is able to grab the last STDERR. In the case
where the error is the one from older tar versions (relating to ./),
it will not raise a Backup::Error. All other instances of command
failure will result in Backup::Error being raised.
When `Errno::EBUSY` is raised during restore, this could indicate that
the directory being restored into is a mountpoint. In this case we
explain the user how to retry the restore.
Instead of renaming existing storage directories to a timestamped
format, create a timestamped directory in a temporary location and move
the individual files and folders inside storage directories to it. This
helps us with nested storage directories.
# This is the 1st commit message:
Add `copy` backup strategy to combat file changed errors
The backup Rake task used to stream data directly from the live
data directory into the backup. Under many circumstances this worked
OK. However, really active instances would experience a 'file changed
as we read it' error - especially with data like the registry. This
now copies the data first, then compresses it. It will take a bit
more disk space while the backup is in progress, but it's a
necessary thing.
# The commit message #2 will be skipped:
# Add env var
During the backup we create an intermediate copy of two directories:
builds and uploads. Instead of creating many small files with 'cp
-r', we now use tar (and fast gzip) to create single intermediate
files. This saves on disk IO and disk space while creating a backup.