#1432 Issue closed: BTRFS subvolumes content are not backup in SLES12-SP2

Labels: support / question, fixed / solved / done

schabrolles opened issue at 2017-07-28 08:15:

Relax-and-Recover (ReaR) Issue Template

Fill in the following items before submitting a new issue
(quick response is not guaranteed with free support):

  • rear version (/usr/sbin/rear -V): Relax-and-Recover 2.1-git
  • OS version (cat /etc/rear/os.conf or lsb_release -a):
NAME="SLES"
VERSION="12-SP2"
VERSION_ID="12.2"
PRETTY_NAME="SUSE Linux Enterprise Server 12 SP2"
ID="sles"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:suse:sles:12:sp2"
sles12-sp2-seb:/var/log/rear #
  • rear configuration files (cat /etc/rear/site.conf or cat /etc/rear/local.conf):
OUTPUT=ISO
BACKUP=NETFS
BACKUP_URL=nfs://10.7.99.25/var/www/html/linux/rear
BACKUP_OPTIONS="nfsvers=4,nolock"

## SLES12

REQUIRED_PROGS=( "${REQUIRED_PROGS[@]}" snapper chattr lsattr )

COPY_AS_IS=( "${COPY_AS_IS[@]}" /usr/lib/snapper/installation-helper /etc/snapper/config-templates/default )

BACKUP_PROG_INCLUDE= ( '/usr/local/*' '/var/lib/pgsql/*' '/var/spool/*' '/var/opt/*' '/home/*' '/var/cache/*' '/var/lib/machines/*' '/var/lib/libvirt/images/*' '/opt/*' '/var/lib/mailman/*' '/var/tmp/*' '/srv/*' '/var/lib/mariadb/*' '/boot/grub2/powerpc-ieee1275/*' '/tmp/*' '/var/lib/mysql/*' '/var/lib/named/*' '/var/log/*' )

POST_RECOVERY_SCRIPT=( 'if snapper --no-dbus -r $TARGET_FS_ROOT get-config | grep -q "^QGROUP.*[0-9]/[0-9]" ; then snapper --no-dbus -r $TARGET_FS_ROOT set-config QGROUP= ; snapper --no-dbus -r $TARGET_FS_ROOT setup-quota && echo snapper setup-quota done || echo snapper setup-quota failed ; else echo snapper setup-quota not used ; fi' )
  • Are you using legacy BIOS or UEFI boot? : POWER ppc64le - PReP

  • Brief description of the issue:

ReaR Backup and Restore runs smoothly without any issue. But files contained in btrfs subvolumes are not backuped up even if we specifed the subvolumes in BACKUP_PROG_INCLUDE variable.

For example, analysing the backuplog generated show only /var/spool directory, but not its content.

  • Work-around, if any: -

jsmeix commented at 2017-07-28 09:42:

For me with SLES12-SP2 on a x86_64 virtual KVM/QEMU machine
it "just works" with current ReaR GitHub master code.

I use the BACKUP_PROG_INCLUDE values from
conf/examples/SLE12-SP2-btrfs-example.conf

# grep  ^BACKUP_PROG_INCLUDE etc/rear/local.conf | tr ' ' '\n' 

BACKUP_PROG_INCLUDE=(
'/var/cache/*'
'/var/lib/mailman/*'
'/var/tmp/*'
'/var/lib/pgsql/*'
'/usr/local/*'
'/opt/*'
'/var/lib/libvirt/images/*'
'/boot/grub2/i386/*'
'/var/opt/*'
'/srv/*'
'/boot/grub2/x86_64/*'
'/var/lib/mariadb/*'
'/var/spool/*'
'/var/lib/mysql/*'
'/tmp/*'
'/home/*'
'/var/log/*'
'/var/lib/named/*'
'/var/lib/machines/*'
)

The backup.log on my NFS server (for "rear -d -D mkbackup")
contains in particular this 'tar' command call:

# grep '^++ tar --warning' backup.log | fold -s -w70

++ tar --warning=no-xdev --sparse --block-number --totals --verbose 
--no-wildcards-match-slash --one-file-system --ignore-failed-read 
--anchored --gzip -X /tmp/rear.jCyzvWhHsTXhBq4/tmp/backup-exclude.txt 
-C / -c -f - /var/cache/cups /var/cache/fontconfig /var/cache/gio-2.0 
/var/cache/krb5rcache /var/cache/ldconfig /var/cache/man 
/var/cache/multipath /var/cache/zypp 
/var/tmp/systemd-private-4b26b95b255c4141b6d6faed5a1b9d16-spice-vdagen
td.service-ClKFKX /usr/local/bin /usr/local/games /usr/local/include 
/usr/local/lib /usr/local/lib64 /usr/local/man /usr/local/sbin 
/usr/local/share /usr/local/src /srv/ftp /srv/www /var/spool/atjobs 
/var/spool/atspool /var/spool/audit /var/spool/clientmqueue 
/var/spool/cron /var/spool/cups /var/spool/locks /var/spool/lpd 
/var/spool/mail /var/spool/plymouth /var/spool/postfix 
/var/spool/rsyslog /var/spool/uucp /tmp/gpg-ZPKcFo 
/tmp/rear.jCyzvWhHsTXhBq4 
/tmp/systemd-private-4b26b95b255c4141b6d6faed5a1b9d16-spice-vdagentd.s
ervice-o3VEwM /home/johannes /var/log/NetworkManager 
/var/log/Xorg.0.log /var/log/YaST2 /var/log/acpid 
/var/log/alternatives.log /var/log/audit /var/log/boot.log 
/var/log/btmp /var/log/cups /var/log/dump /var/log/faillog 
/var/log/firewall /var/log/krb5 /var/log/lastlog /var/log/mail 
/var/log/mail.err /var/log/mail.info /var/log/mail.warn 
/var/log/messages /var/log/news /var/log/ntp /var/log/pbl.log 
/var/log/samba /var/log/snapper.log /var/log/warn /var/log/wtmp 
/var/log/xdm.errors /var/log/zypp /var/log/zypper.log / 
/root/rear.master/var/log/rear/rear-d50.log

On the system where I run "rear -d -D mkbackup"
(with KEEP_BUILD_DIR="yes") the
/tmp/rear.jCyzvWhHsTXhBq4/tmp/backup-include.txt
file contains

/var/cache/*
/var/lib/mailman/*
/var/tmp/*
/var/lib/pgsql/*
/usr/local/*
/opt/*
/var/lib/libvirt/images/*
/boot/grub2/i386/*
/var/opt/*
/srv/*
/boot/grub2/x86_64/*
/var/lib/mariadb/*
/var/spool/*
/var/lib/mysql/*
/tmp/*
/home/*
/var/log/*
/var/lib/named/*
/var/lib/machines/*
/

i.e. the BACKUP_PROG_INCLUDE array members
plus a '/' at the end and the
/tmp/rear.jCyzvWhHsTXhBq4/tmp/backup-exclude.txt
file only contains

/tmp/*
/dev/shm/*
/root/rear.master/var/lib/rear/output/*

so that my backup.tar.gz in particular contains
only the plain tmp/ directory but not its contents.

On my NFS server I get a backup.tar.gz that contains
e.g. for /var/spool

# tar -tf backup.tar.gz | grep 'var/spool/' | sort        
var/spool/
var/spool/atjobs/
var/spool/atjobs/.SEQ
var/spool/atspool/
var/spool/audit/
var/spool/clientmqueue/
var/spool/cron/
var/spool/cron/lastrun/
var/spool/cron/lastrun/cron.daily
var/spool/cron/lastrun/cron.hourly
var/spool/cron/lastrun/cron.monthly
var/spool/cron/lastrun/cron.weekly
var/spool/cron/tabs/
var/spool/cups/
var/spool/cups/tmp/
var/spool/locks
var/spool/lpd/
var/spool/mail/
var/spool/plymouth/
var/spool/postfix/
var/spool/postfix/active/
var/spool/postfix/bounce/
var/spool/postfix/corrupt/
var/spool/postfix/defer/
var/spool/postfix/deferred/
var/spool/postfix/flush/
var/spool/postfix/hold/
var/spool/postfix/incoming/
var/spool/postfix/maildrop/
var/spool/postfix/pid/
var/spool/postfix/pid/master.pid
var/spool/postfix/private/
var/spool/postfix/public/
var/spool/postfix/public/pickup
var/spool/postfix/public/qmgr
var/spool/postfix/saved/
var/spool/postfix/trace/
var/spool/rsyslog/
var/spool/uucp/
var/spool/uucp/uucp/

and I get all them back on another x86_64 virtual KVM/QEMU machine
where I run "rear recover".

FYI
there are some special files in /var/spool/postfix
on the original system that are not in the backup
because those files are sockets, namely

/var/spool/postfix/private/anvil: socket
/var/spool/postfix/private/bounce: socket
/var/spool/postfix/private/defer: socket
/var/spool/postfix/private/discard: socket
/var/spool/postfix/private/error: socket
/var/spool/postfix/private/lmtp: socket
/var/spool/postfix/private/local: socket
/var/spool/postfix/private/proxymap: socket
/var/spool/postfix/private/proxywrite: socket
/var/spool/postfix/private/relay: socket
/var/spool/postfix/private/retry: socket
/var/spool/postfix/private/rewrite: socket
/var/spool/postfix/private/scache: socket
/var/spool/postfix/private/smtp: socket
/var/spool/postfix/private/trace: socket
/var/spool/postfix/private/verify: socket
/var/spool/postfix/private/virtual: socket
/var/spool/postfix/public/cleanup: socket
/var/spool/postfix/public/flush: socket
/var/spool/postfix/public/showq: socket

jsmeix commented at 2017-07-28 09:45:

@schabrolles
do you have your SLES12-SP2 new installed from scratch
or is your SLES12-SP2 a service pack update e.g. from
a SLES12-SP1 or from a SLES12-SP0/GA system?

schabrolles commented at 2017-07-28 09:57:

@jsmeix it is a pure SLES12-SP2 from DVD

schabrolles commented at 2017-07-28 10:04:

@jsmeix
Ok I got it ... my mistake !! (Shame on Me)

There is a "space" between BACKUP_PROG_INCLUDE= and the first (
it works if I remove it.

jsmeix commented at 2017-07-28 11:52:

@schabrolles
thank you so much for your fast "all-clear" reply.

I got a bit nervous what obscure stuff might happen here
that may keep my mind subliminally busy over the weekend.

It seems you are a bit unlucky with "too much spaces", cf.
https://github.com/rear/rear/pull/1356/files
;-)

Enjoy your weekend!

schabrolles commented at 2017-07-28 12:03:

@jsmeix :-) Arrrg ... +1 point ...

I've tweaked a little my local.conf to make this BACKUP_PROG_INCLUDE variable more dynamic.
It will avoid a new created btrfs subvolume to be excluded from the backup because the variable was not updated.

## SLES12

REQUIRED_PROGS=( "${REQUIRED_PROGS[@]}" snapper chattr lsattr )

COPY_AS_IS=( "${COPY_AS_IS[@]}" /usr/lib/snapper/installation-helper /etc/snapper/config-templates/default )

for subvol in $(findmnt -n -r -t btrfs | cut -d ' ' -f 1 | grep -v '^/$' | egrep -v 'snapshots|crash') ; do
        BACKUP_PROG_INCLUDE=( "${BACKUP_PROG_INCLUDE[@]}" "$subvol" )
done

POST_RECOVERY_SCRIPT=( 'if snapper --no-dbus -r $TARGET_FS_ROOT get-config | grep -q "^QGROUP.*[0-9]/[0-9]" ; then snapper --no-dbus -r $TARGET_FS_ROOT set-config QGROUP= ; snapper --no-dbus -r $TARGET_FS_ROOT setup-quota && echo snapper setup-quota done || echo snapper setup-quota failed ; else echo snapper setup-quota not used ; fi' )

but I think it could be better to add this stuff in a script that manage "btrfs backup"...
The best would be to mask this btrfs backup complexity to the user.

jsmeix commented at 2017-07-28 12:33:

As soon as I really understand the SUSE btrfs complexity
I could try to remove that complexity from the user, but cf.
https://github.com/rear/rear/issues/1368#issuecomment-302410707

Regarding the btrfs backup complexity:
I do not know what btrfs subvolumes should be in the backup.
Just all of them (except snapshots except those snapshot
that is currently mounted at '/')?
Perhaps your proposal how to make BACKUP_PROG_INCLUDE
more dynamic is a good starting point for a reasonable
default behaviour.
In the end the user must still check if the default behaviour
is what he wants and if not he can and must adapt his config.
I only like to avoid that users blindly trust the defaults
and later complain when "rear recover" does not result
what they had expected (but never verified), cf.
https://github.com/rear/rear/wiki/Developers-Guide

Regarding "new created btrfs subvolume":
Careful with that on SLE12!
Regarding how complicate it is to create an additional
btrfs subvolume in compliance with the SLE12
default btrfs subvolume structure, you may have a look
at my (meanwhile probably already somewhat outdated)
selfmade personal quick and dirty script in
https://lists.opensuse.org/opensuse-factory/2016-10/msg00397.html


[Export of Github issue for rear/rear.]