bob1de / btrfs-backup Goto Github PK
View Code? Open in Web Editor NEWincremental atomic backups for btrfs using snapshots with local and/or remote storage.
License: MIT License
incremental atomic backups for btrfs using snapshots with local and/or remote storage.
License: MIT License
Is it possible to send a backup to a directory? I want to backup my root drive to my local data drive, but the data drive does not use btrfs. How can I save a snapshot to that drive?
Hi,
I've got a laptop with Ubuntu 16.04.
I've got 2 devices:
/dev/sda1
in /mnt/root
with 2 subvolumes @
for the /
and @home
for /home
./dev/sdb1
in /media/abz/datalx/
where I would like to store my backup (in a directory backup/home
).I have a crontab for backup like that:
/usr/local/bin/btrfs-backup -q -N 5 -n 10 -s /mnt/root/@home /media/abz/datalx/backup/home
My problem is when my second device /media/abz/datalx
is not mounted (when I not on my desk) btrfs-backup
create a directory on /dev/sda1
.
How could I not send my bakcup if the device is not mounted ?
But I would like the snapshot being done in local (and send later).
Hi,
Almost at the end of the README.rst file I read,
_and have corresponding entries in /etc/fstab to mount the subvolumes from /active/*. One benefit of this approach is that restoring a snapshot can be done entirely with btrfs tools:
$ btrfs send /backup/root/YYMMDD-HHMMSS | btrfs receive /snapshot/home
$ btrfs send /backup/home/YYMMDD-HHMMSS | btrfs receive /snapshot/root_
.. unless I am missing something this restores root onto home and home onto root...
I made a package for Archlinux. You could link it in your README.
You can click the Flag package out-of-date
button when you release a new version to notify me.
After the other error was fixed, I now seem to get this error, same setup, I see the target directory created on the remote server and then this failure.
At subvol /home/user/lib/snapshot/20180418-002105
ioctl(BTRFS_IOC_TREE_SEARCH, subvol_id 359) ret=-1, error: Operation not permitted
ERROR: cannot resolve our subvol path
00:22:44 [ERROR] Error during btrfs send / receive
Note: both servers were updated to 0.3.1 prior to testing.
Hello,
thanks for btrfs-backup!
I have tried to use it:
root@homeserver:/home/henfri# btrfs-backup /srv/DataPool/Fotos/ /mnt/test/
21:46:29 [INFO ] --[ Started at Mon Oct 4 21:46:29 2021 ]---------
21:46:29 [INFO ] Preparing endpoint /srv/DataPool/Fotos/snapshot ...
21:46:29 [ERROR] /srv/DataPool/Fotos does not seem to be a btrfs subvolume
root@homeserver:/home/henfri# btrfs subvolume show /srv/DataPool/Fotos/ |head
Fotos
Name: Fotos
UUID: 3b7f5796-c053-8940-9809-7dfde837a47f
Parent UUID: -
Received UUID: -
Creation time: 2019-04-28 21:50:08 +0200
Subvolume ID: 1381
Generation: 1002070
Gen at creation: 260
Parent ID: 5
Any idea, what the reason could be?
Best regards,
Hendrik
Despite having installed sshfs and pv (since I noticed via debug that pv was missing) I still cannot manage to get around this error... Unfortunately, googling for it is nye impossible because ssh is such a prolific topic :(
Any suggestions? SSH is connecting just fine, as it creates the proper dir on the destination...
12:01:50 [INFO ] Sending 20180414-120149 ...
12:01:50 [INFO ] No parent snapshot available, sending in full mode.
12:01:50 [DEBUG] Checking for pv ...
12:01:50 [DEBUG] Executing: ['pv', '--help']
12:01:50 [DEBUG] -> pv is available
12:01:50 [DEBUG] Executing: ['btrfs', 'send', '/home/user/lib/snapshot/20180414-120149']
12:01:50 [DEBUG] Executing: ['pv']
12:01:50 [DEBUG] Executing: ['ssh', '-o', 'auto_unmount', '-o', 'reconnect', '-o', 'cache=no', 'backups', 'btrfs', 'receive', '/media/backups/user/snapshots/lib']
At subvol /home/user/lib/snapshot/20180414-120149
command-line: line 0: Bad configuration option: auto_unmount
root@galileo:/usr/local/btrfs-backup# ./setup.py install
Traceback (most recent call last):
File "/usr/local/btrfs-backup/./setup.py", line 4, in
from setuptools import setup
ModuleNotFoundError: No module named 'setuptools'
pip3 install setuptools
and away we go.
I try to make openSUSE RPM for btrfs-backup, but can't without Version.
Please add Version file or in README.md.
Hi,
I am trying to backup a snapshot to a remote server, but to this command:
btrfs-backup /tank ssh://my-pc/test-backups
I got the following:
11:45:04 [INFO ] --[ Started at Sun May 13 11:45:04 2018 ]--------- 11:45:04 [INFO ] Preparing endpoint /tank/snapshot ... 11:45:04 [INFO ] Preparing endpoint (SSH) my-pc/test-backups ... command-line: line 0: Bad configuration option: auto_unmount 11:45:04 [ERROR] Error on command: ['ssh', '-o', 'auto_unmount', '-o', 'reconnect', '-o', 'cache=no', 'my-pc', 'mkdir', '-p', '/test-backups']
(I'm sorry, I don't know how to set preformatted line-breaks in comments).
What is this auto_unmount
option to ssh?
Hi,
I'm not sure about notifications for comments on closed pull requests... Did you get them?
Just in case you didn't:
Everything seems merged ok and ready for transfer.
Best regards
Robert
If you specify --snapshot-prefix foo
, then the cleanup of old backups doesn't work:
backup complete
Traceback (most recent call last):
File "/opt/btrfs-backup/btrfs-backup.py", line 224, in <module>
delete_old_backups(backuploc,NUM_BACKUPS)
File "/opt/btrfs-backup/btrfs-backup.py", line 115, in delete_old_backups
bak_dir_to_remove = datestr(find_old_backup(bak_dir_time_objs, 0))
File "/opt/btrfs-backup/btrfs-backup.py", line 84, in find_old_backup
min_val = min(tmp) # find minimum time value
ValueError: min() arg is an empty sequence
This is caused by line 110 in delete_old_backups
, where time.strptime()
is applied to the snapshot directory names with the matching pattern %Y%m%d-%H%M%S
, ignoring the prefix and thus not matching any directories:
bak_dir_time_objs.append(time.strptime(directory, '%Y%m%d-%H%M%S'))
I'm trying to make a backup of the rootfs of my notebook and pushiung it to my server but it doesn't work. I can't really spot the error. Any ideas?
$ sudo btrfs-backup --sync --num-snapshots 1 --num-backups 3 --snapshot-folder '.snapshots' --snapshot-prefix 'mynotebook_root_' / ssh://username@myserver:22/home/username/backups --ssh-opt 'IdentityFile=/home/username/.ssh/id_rsa'
02:41:21 [INFO ] --[ Started at Sun Jun 18 02:41:21 2017 ]---------
02:41:21 [INFO ] --[ Preparing endpoints ... ]---------------------
02:41:21 [INFO ] Creating directory: /.snapshots
02:41:21 [INFO ] --[ Snapshotting ... ]----------------------------
02:41:21 [INFO ] / -> /.snapshots/mynotebook_root_20170618-024121
02:41:21 [INFO ] --[ Syncing disks ... ]---------------------------
02:41:22 [INFO ] --[ Sending ... ]---------------------------------
02:41:22 [INFO ] From: mynotebook_root_20170618-024121
02:41:22 [INFO ] To: (SSH) username@myserver:22/home/username/backups
02:41:22 [INFO ] No previous snapshot found, sending full backup.
At subvol /.snapshots/mynotebook_root_20170618-024121
Arch Linux \r (\l)
Enter passphrase for key '/home/username/.ssh/id_rsa':
ioctl(BTRFS_IOC_TREE_SEARCH, subvol_id 480) ret=-1, error: Operation not permitted
ERROR: cannot resolve our subvol path
02:41:25 [ERROR] Error during btrfs send / receive
/home/username/backups
on the server is a mounted subvolume. If I just create a folder in the users homedir I get a different error:
$ sudo btrfs-backup --sync --num-snapshots 1 --num-backups 3 --snapshot-folder '.snapshots' --snapshot-prefix 'mynotebook_root_' / ssh://username@myserver:22/home/username/backups --ssh-opt 'IdentityFile=/home/username/.ssh/id_rsa'
02:46:55 [INFO ] --[ Started at Sun Jun 18 02:46:54 2017 ]---------
02:46:55 [INFO ] --[ Preparing endpoints ... ]---------------------
02:46:55 [INFO ] --[ Snapshotting ... ]----------------------------
02:46:55 [INFO ] / -> /.snapshots/mynotebook_root_20170618-024654
02:46:55 [INFO ] --[ Syncing disks ... ]---------------------------
02:46:55 [INFO ] --[ Sending ... ]---------------------------------
02:46:55 [INFO ] From: mynotebook_root_20170618-024654
02:46:55 [INFO ] To: (SSH) username@myserver:22/home/username/backups
02:46:55 [INFO ] No previous snapshot found, sending full backup.
At subvol /.snapshots/mynotebook_root_20170618-024654
Arch Linux \r (\l)
Enter passphrase for key '/home/username/.ssh/id_rsa':
ERROR: cannot open /home: Operation not permitted
02:46:59 [ERROR] Error during btrfs send / receive
/home
is a subvolume on the server.
We are doing offsite backups from a VPS to a residential based server where the internet can be spotty at times... what I am noticing is that the backups will get synced the next time a successful remote connection is made from the host to the residential side... however, it would be nice to be able to indicate X snapshots transferred in Y seconds when these cases happen.
I push the results from btrfs-backup -P
to a variable and then pipe that variable to pushbullet for a poor man's monitoring system... this results in a message like:
snapshotname=At snapshot 20180430-174503
Or when the remote connection fails...
snapshotname=
Would love to be able to output more meaningful logs to my client.
I'll take a stab at this myself as well, but python is not my forte these days.
Thanks again for an awesome utility!
Not sure this would be explicitly a btrfs-backup issue but my remote server just crashed w/OOM and the culprit from the best we can tell was a ton of ssh mounts for our offsite backups via /tmp/mountPaths
fusermount -o rw,nosuid,nodev,fsname=backups:/,auto_unmount,subtype=sshfs -- /tmp/tmp83c_e6yb/mnt
sshfs -o auto_unmount -o reconnect -o cache=no backups:/ /tmp/tmp83c_e6yb/mnt
Taking advantage of this downtime to do OS updates but will be happy to provide more details once I have backups up and running again (and hopefully not eating memory)
Instead of contemplating reimplementing locking in btrfs-backup, you could just tell people to use flock(1) utility for locking. flock -n is perfect for this usecase :)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.