Infrastructure at your Service

Daniel Westermann

EDB BART 2.2, parallel full backups without using pg_basebackup

Some days ago EnterpriseDB released the latest version of its backup and recovery tool for PostgreSQL and EDB Postgres Advanced Server, release notes here. The main new features, at least for me, are backups using multiple cores and parallel incremental restores. Besides that BART does not require pg_basebackup anymore for taking full backups of a PostgreSQL instance. The downside with that could be that you can not easily restore the backups without using EDB BART. Lets see how all of that works.

I’ll not describe on how BART can be installed as that is just a “yum install …” from the EDB repositories. Once that is done BART should report version 2.2.0:

[postgres@edbbart ~]$ bart --version
bart (EnterpriseDB) 2.2.0
BART22-REL-2_2_0-GA2-0-g60d64ca 
Tue Nov 6 08:32:55 UTC 2018 

The help output of BART already gives an idea about the latest changes:

[postgres@edbbart ~]$ bart backup --help
bart: backup and recovery tool

Usage:
 bart BACKUP [OPTION]...

Options:
  -h, --help           Show this help message and exit
  -s, --server         Name of the server or 'all' (full backups only) to specify all servers
  -F, --format=p|t     Backup output format (tar (default) or plain)
  -z, --gzip           Enables gzip compression of tar files
  -c, --compress-level Specifies the compression level (1 through 9, 9 being best compression)

  --backup-name        Specify a friendly name for the current backup
  --parent             Specify parent backup for incremental backup
  --thread-count       Specify number of worker thread(s) to take backup
  --check              Verify checksum of required mbm files
  --with-pg_basebackup Use pg_basebackup to take the backup, valid only for full backup
  --no-pg_basebackup   Don't use pg_basebackup to take the backup, valid only for full backup

Parallel stuff came in and the possibility to avoid using pg_basebackup. Lets do a first test without specifying “–with-pg_basebackup” or “–no-pg_basebackup” just to see what the default is:

[postgres@edbbart ~]$ /usr/edb/bart/bin/bart init -s PG2 -o
INFO:  setting archive_command for server 'pg2'
WARNING: archive_command is set. server restart is required
[postgres@edbbart ~]$ bart backup -s PG2
INFO:  DebugTarget - getVar(checkDiskSpace.bytesAvailable)
INFO:  new backup identifier generated 1541853901964
INFO:  creating 2 harvester threads
/u90/pg2/1541853901964
/u90/pg2/1541853901964
INFO:  backup completed successfully
INFO:  
BART VERSION: 2.2.0
BACKUP DETAILS:
BACKUP STATUS: active
BACKUP IDENTIFIER: 1541853901964
BACKUP NAME: PG2_2018-11-10T13:45
BACKUP PARENT: none
BACKUP LOCATION: /u90/pg2/1541853901964
BACKUP SIZE: 81.08 MB
BACKUP FORMAT: tar
BACKUP TIMEZONE: Europe/Zurich
XLOG METHOD: stream
BACKUP CHECKSUM(s): 0
TABLESPACE(s): 0
START WAL LOCATION: 000000010000000000000005
STOP WAL LOCATION: 000000010000000000000006
BACKUP METHOD: pg_start_backup
BACKUP FROM: master
START TIME: 2018-11-01 15:39:25 CET
STOP TIME: 2018-11-01 15:39:28 CET
TOTAL DURATION: 3 sec(s)

We get two threads for creating the backup and that is because I have requested that in my configuration:

[postgres@edbbart ~]$ cat /usr/edb/bart/etc/bart.cfg
[BART]              
bart_host = postgres@edbbart  
backup_path = /u90           
pg_basebackup_path = /usr/edb/as11/bin/pg_basebackup   
xlog_method = stream
retention_policy= 2 DAYS
logfile = /tmp/bart.log 
scanner_logfile = /tmp/scanner.log	   
thread_count = 2

[PG2]
backup_name = PG2_%year-%month-%dayT%hour:%minute
host = 192.168.22.60   
user = bart
port = 5433   
cluster_owner = postgres 
remote_host = postgres@192.168.22.60 
allow_incremental_backups = enabled
thread_count = 2      
description = PG1 backups    

The question is now if pg_basebackup was used in the background or not (the answer is already known though, as pg_basebackup has no parallel option).

[postgres@edbbart ~]$ cd /u90/pg2/1541853901964/
[postgres@edbbart 1541853901964]$ ls -l
total 83040
-rw-rw-r--. 1 postgres postgres      644 Nov 10 13:45 backupinfo
-rw-------. 1 postgres postgres      211 Nov 10 13:45 backup_label
drwxrwxr-x. 4 postgres postgres       37 Nov 10 13:45 base
-rw-rw-r--. 1 postgres postgres 26151424 Nov 10 13:45 base-1.tar
-rw-rw-r--. 1 postgres postgres 25309696 Nov 10 13:45 base-2.tar
-rw-rw-r--. 1 postgres postgres 33557504 Nov 10 13:45 base.tar

This is not what you get when you do a plain pg_basebackup. Could we restore that without using BART?

[postgres@edbbart aa]$ tar -axf /u90/pg2/1541853901964/base.tar 
[postgres@edbbart aa]$ ls -l
total 60
drwx------. 6 postgres postgres    54 Nov 10 13:45 base
-rw-------. 1 postgres postgres    33 Nov 10 13:45 current_logfiles
drwx------. 2 postgres postgres  4096 Nov 10 13:45 global
-rw-------. 1 postgres postgres    25 Nov 10 13:45 __payloadChecksum
drwx------. 2 postgres postgres     6 Nov 10 13:45 pg_commit_ts
drwx------. 2 postgres postgres     6 Nov 10 13:45 pg_dynshmem
-rw-------. 1 postgres postgres  4653 Nov 10 13:45 pg_hba.conf
-rw-------. 1 postgres postgres  1636 Nov 10 13:45 pg_ident.conf
drwx------. 2 postgres postgres    58 Nov 10 13:55 pg_log
drwx------. 4 postgres postgres    68 Nov 10 13:45 pg_logical
drwx------. 4 postgres postgres    36 Nov 10 13:45 pg_multixact
drwx------. 2 postgres postgres    18 Nov 10 13:55 pg_notify
drwx------. 2 postgres postgres     6 Nov 10 13:45 pg_replslot
drwx------. 2 postgres postgres     6 Nov 10 13:45 pg_serial
drwx------. 2 postgres postgres     6 Nov 10 13:45 pg_snapshots
drwx------. 2 postgres postgres     6 Nov 10 13:45 pg_stat
drwx------. 2 postgres postgres    88 Nov 10 13:55 pg_stat_tmp
drwx------. 2 postgres postgres    18 Nov 10 13:45 pg_subtrans
drwx------. 2 postgres postgres     6 Nov 10 13:45 pg_tblspc
drwx------. 2 postgres postgres     6 Nov 10 13:45 pg_twophase
-rw-------. 1 postgres postgres     3 Nov 10 13:45 PG_VERSION
drwx------. 2 postgres postgres    70 Nov 10 13:55 pg_wal
drwx------. 2 postgres postgres    18 Nov 10 13:55 pg_xact
-rw-------. 1 postgres postgres  1184 Nov 10 13:45 postgresql.auto.conf
-rw-------. 1 postgres postgres 27807 Nov 10 13:45 postgresql.conf

Looks like we can just start that, so lets try:

[postgres@edbbart aa]$ chmod 700 /var/tmp/aa
[postgres@edbbart aa]$ /usr/edb/as11/bin/pg_ctl -D /var/tmp/aa/ start
waiting for server to start....2018-11-10 13:57:29.027 CET - 1 - 14772 -  - @ LOG:  listening on IPv4 address "0.0.0.0", port 5433
2018-11-10 13:57:29.027 CET - 2 - 14772 -  - @ LOG:  listening on IPv6 address "::", port 5433
2018-11-10 13:57:29.034 CET - 3 - 14772 -  - @ LOG:  listening on Unix socket "/tmp/.s.PGSQL.5433"
2018-11-10 13:57:29.075 CET - 4 - 14772 -  - @ LOG:  redirecting log output to logging collector process
2018-11-10 13:57:29.075 CET - 5 - 14772 -  - @ HINT:  Future log output will appear in directory "pg_log".
 done
server started
[postgres@edbbart aa]$ /usr/edb/as11/bin/psql -p 5433
psql.bin (11.0.3, server 11.0.3)
Type "help" for help.
postgres=# \q
[postgres@edbbart aa]$ /usr/edb/as11/bin/pg_ctl -D /var/tmp/aa/ stop -m fast
waiting for server to shut down....... done
server stopped
[postgres@edbbart aa]$ 

Good news: Even when not using pg_basebackup there is no lock-in because you can just combine the tar files and start up the instance.

Having a closer look at what is inside the base*.tar files:

[postgres@edbbart ~]$ rm -rf /var/tmp/aa
[postgres@edbbart ~]$ mkdir /var/tmp/aa1
[postgres@edbbart ~]$ mkdir /var/tmp/aa2
[postgres@edbbart ~]$ cd /var/tmp/aa1
[postgres@edbbart aa1]$ tar -axf /u90/pg2/1541853901964/base-1.tar 
[postgres@edbbart aa1]$ cd ../aa2
[postgres@edbbart aa2]$ tar -axf /u90/pg2/1541853901964/base-2.tar 
[postgres@edbbart aa2]$ ls -la ../aa1
total 28
drwxrwxr-x. 15 postgres postgres 4096 Nov 10 14:09 .
drwxrwxrwt.  6 root     root      134 Nov 10 14:08 ..
drwxrwxr-x.  6 postgres postgres   54 Nov 10 14:09 base
-rw-------.  1 postgres postgres   33 Nov 10 13:45 current_logfiles
drwxrwxr-x.  2 postgres postgres 4096 Nov 10 14:09 global
-rw-------.  1 postgres postgres   25 Nov 10 13:45 __payloadChecksum
drwx------.  2 postgres postgres    6 Nov 10 13:45 pg_commit_ts
-rw-------.  1 postgres postgres 4653 Nov 10 13:45 pg_hba.conf
drwx------.  2 postgres postgres   32 Nov 10 13:45 pg_log
drwxrwxr-x.  4 postgres postgres   39 Nov 10 14:09 pg_logical
drwxrwxr-x.  4 postgres postgres   36 Nov 10 14:09 pg_multixact
drwx------.  2 postgres postgres    6 Nov 10 13:45 pg_notify
drwx------.  2 postgres postgres    6 Nov 10 13:45 pg_replslot
drwx------.  2 postgres postgres    6 Nov 10 13:45 pg_snapshots
drwx------.  2 postgres postgres   52 Nov 10 13:45 pg_stat_tmp
drwxrwxr-x.  2 postgres postgres   18 Nov 10 14:09 pg_subtrans
drwx------.  2 postgres postgres    6 Nov 10 13:45 pg_twophase
drwx------.  2 postgres postgres    6 Nov 10 13:45 pg_xact
-rw-------.  1 postgres postgres 1184 Nov 10 13:45 postgresql.auto.conf
[postgres@edbbart aa2]$ ls -la ../aa2
total 48
drwxrwxr-x. 16 postgres postgres  4096 Nov 10 14:09 .
drwxrwxrwt.  6 root     root       134 Nov 10 14:08 ..
drwx------.  6 postgres postgres    54 Nov 10 13:45 base
drwx------.  2 postgres postgres  4096 Nov 10 13:45 global
-rw-------.  1 postgres postgres    25 Nov 10 13:45 __payloadChecksum
drwx------.  2 postgres postgres     6 Nov 10 13:45 pg_dynshmem
-rw-------.  1 postgres postgres  1636 Nov 10 13:45 pg_ident.conf
drwxrwxr-x.  2 postgres postgres    32 Nov 10 14:09 pg_log
drwx------.  2 postgres postgres    35 Nov 10 13:45 pg_logical
drwx------.  4 postgres postgres    36 Nov 10 13:45 pg_multixact
drwxrwxr-x.  2 postgres postgres    18 Nov 10 14:09 pg_notify
drwx------.  2 postgres postgres     6 Nov 10 13:45 pg_serial
drwx------.  2 postgres postgres     6 Nov 10 13:45 pg_stat
drwxrwxr-x.  2 postgres postgres    42 Nov 10 14:09 pg_stat_tmp
drwx------.  2 postgres postgres     6 Nov 10 13:45 pg_subtrans
drwx------.  2 postgres postgres     6 Nov 10 13:45 pg_tblspc
-rw-------.  1 postgres postgres     3 Nov 10 13:45 PG_VERSION
drwx------.  2 postgres postgres     6 Nov 10 13:45 pg_wal
drwxrwxr-x.  2 postgres postgres    18 Nov 10 14:09 pg_xact
-rw-------.  1 postgres postgres 27807 Nov 10 13:45 postgresql.conf

The main benefit comes from splitting the data files of the databases ( $PGDATA/base/[OIDs]) into separat tar files:

[postgres@edbbart aa2]$ ls -la ../aa2/base
total 36
drwx------.  6 postgres postgres   54 Nov 10 13:45 .
drwxrwxr-x. 16 postgres postgres 4096 Nov 10 14:09 ..
drwxrwxr-x.  2 postgres postgres 4096 Nov 10 14:09 1
drwxrwxr-x.  2 postgres postgres 4096 Nov 10 14:09 15709
drwx------.  2 postgres postgres 4096 Nov 10 13:45 15710
drwx------.  2 postgres postgres 4096 Nov 10 13:45 15711
[postgres@edbbart aa2]$ ls -la ../aa1/base
total 36
drwxrwxr-x.  6 postgres postgres   54 Nov 10 14:09 .
drwxrwxr-x. 15 postgres postgres 4096 Nov 10 14:09 ..
drwx------.  2 postgres postgres 4096 Nov 10 13:45 1
drwx------.  2 postgres postgres 4096 Nov 10 13:45 15709
drwxrwxr-x.  2 postgres postgres 4096 Nov 10 14:09 15710
drwxrwxr-x.  2 postgres postgres 4096 Nov 10 14:09 15711
[postgres@edbbart aa2]$ ls -la ../aa1/base/15711
total 5828
drwxrwxr-x. 2 postgres postgres    4096 Nov 10 14:09 .
drwxrwxr-x. 6 postgres postgres      54 Nov 10 14:09 ..
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 112
-rw-------. 1 postgres postgres       0 Nov 10 13:45 1220
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 1222
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 1227
-rw-------. 1 postgres postgres  139264 Nov 10 13:45 1247
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 1247_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 1249_fsm
-rw-------. 1 postgres postgres 1196032 Nov 10 13:45 1255
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 1255_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 1259_fsm
-rw-------. 1 postgres postgres   57344 Nov 10 13:45 13795
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13795_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13799
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 13800_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 13802
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13805
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13805_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13809
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 13810_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 13812
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13815
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13815_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13819
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 13820_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 13822
-rw-------. 1 postgres postgres       0 Nov 10 13:45 13825
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13829
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 13956_fsm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13966
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13966_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 1417_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 1418_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 14539
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 14542
-rw-------. 1 postgres postgres       0 Nov 10 13:45 14547
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 14550
-rw-------. 1 postgres postgres       0 Nov 10 13:45 14555
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15609
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15614
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15617
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15622
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15625
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15629
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15632
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15636
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15639
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15644
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15649
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15654
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15659
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15664
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 175
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2224
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2224_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2328_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2336
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2337
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2600
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2600_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2601_fsm
-rw-------. 1 postgres postgres   57344 Nov 10 13:45 2602
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2602_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2603_fsm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2604
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2604_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2605_fsm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2606
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2606_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2607_fsm
-rw-------. 1 postgres postgres  663552 Nov 10 13:45 2608
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2608_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2609_fsm
-rw-------. 1 postgres postgres   40960 Nov 10 13:45 2610
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2610_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2611_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2612_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2613
-rw-------. 1 postgres postgres   49152 Nov 10 13:45 2615
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2615_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2616_fsm
-rw-------. 1 postgres postgres  122880 Nov 10 13:45 2617
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2617_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2618_fsm
-rw-------. 1 postgres postgres  163840 Nov 10 13:45 2619
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2619_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2620_vm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2651
-rw-------. 1 postgres postgres   40960 Nov 10 13:45 2653
-rw-------. 1 postgres postgres   32768 Nov 10 13:45 2655
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2657
-rw-------. 1 postgres postgres  139264 Nov 10 13:45 2659
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2661
-rw-------. 1 postgres postgres   65536 Nov 10 13:45 2663
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2665
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2667
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2669
-rw-------. 1 postgres postgres  524288 Nov 10 13:45 2673
-rw-------. 1 postgres postgres  196608 Nov 10 13:45 2675
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2679
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2681
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2683
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2685
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2687
-rw-------. 1 postgres postgres   49152 Nov 10 13:45 2689
-rw-------. 1 postgres postgres  434176 Nov 10 13:45 2691
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2693
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2699
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2702
-rw-------. 1 postgres postgres   65536 Nov 10 13:45 2704
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2753_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2754
-rw-------. 1 postgres postgres   32768 Nov 10 13:45 2756
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2830
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2831
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2832_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2834
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2835
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2836_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2837
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2838_fsm
-rw-------. 1 postgres postgres   32768 Nov 10 13:45 2839
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2840_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2841
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2995_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3079
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3079_vm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3081
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3118
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3119
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3256
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3257
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3350
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3351
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3380
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3381_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 3394_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3395
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3439_vm
-rw-------. 1 postgres postgres   49152 Nov 10 13:45 3455
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 3456_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3466
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3467
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3501
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3501_vm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3503
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3541
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3541_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3574
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3576
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3596
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3597
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3598_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3600
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3600_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 3601_fsm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3602
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3602_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 3603_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3604
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3606
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3608
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3712
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 3764_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3766
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3997
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 4943
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 4951
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 4953
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 5002
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 548
-rw-------. 1 postgres postgres       0 Nov 10 13:45 6102
-rw-------. 1 postgres postgres       0 Nov 10 13:45 6104
-rw-------. 1 postgres postgres       0 Nov 10 13:45 6106
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 6110
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 6112
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 6117
-rw-------. 1 postgres postgres       0 Nov 10 13:45 7200_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 826
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 827
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 8889
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 8890_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 8891
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 8895_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 8896
-rw-------. 1 postgres postgres       0 Nov 10 13:45 8899
-rw-------. 1 postgres postgres       0 Nov 10 13:45 8900
-rw-------. 1 postgres postgres       0 Nov 10 13:45 9970
-rw-------. 1 postgres postgres       0 Nov 10 13:45 9971
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 9972
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 9972_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 9973_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 9984
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 9986
-rw-------. 1 postgres postgres       0 Nov 10 13:45 9988
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 9991
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 9993
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 9995
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 9997
-rw-------. 1 postgres postgres       3 Nov 10 13:45 PG_VERSION
[postgres@edbbart aa2]$ ls -la ../aa2/base/15711
total 6028
drwx------. 2 postgres postgres    4096 Nov 10 13:45 .
drwx------. 6 postgres postgres      54 Nov 10 13:45 ..
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 113
-rw-------. 1 postgres postgres       0 Nov 10 13:45 1221
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 1226
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 1228
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 1247_fsm
-rw-------. 1 postgres postgres  761856 Nov 10 13:45 1249
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 1249_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 1255_fsm
-rw-------. 1 postgres postgres  139264 Nov 10 13:45 1259
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 1259_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 13795_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 13797
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13800
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13800_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13804
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 13805_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 13807
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13810
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13810_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13814
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 13815_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 13817
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13820
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13820_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13824
-rw-------. 1 postgres postgres       0 Nov 10 13:45 13827
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13956
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 13956_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 13966_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 1417
-rw-------. 1 postgres postgres       0 Nov 10 13:45 1418
-rw-------. 1 postgres postgres       0 Nov 10 13:45 14536
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 14541
-rw-------. 1 postgres postgres       0 Nov 10 13:45 14544
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 14549
-rw-------. 1 postgres postgres       0 Nov 10 13:45 14552
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 14557
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15611
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15616
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15619
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15624
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15626
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15631
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15633
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 15638
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15641
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15646
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15651
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15656
-rw-------. 1 postgres postgres       0 Nov 10 13:45 15661
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 174
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2187
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2224_fsm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2328
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2328_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2336_vm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2579
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2600_fsm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2601
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2601_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2602_fsm
-rw-------. 1 postgres postgres   32768 Nov 10 13:45 2603
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2603_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2604_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2605
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2605_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2606_fsm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2607
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2607_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2608_fsm
-rw-------. 1 postgres postgres  360448 Nov 10 13:45 2609
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2609_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2610_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2611
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2612
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2612_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2613_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2615_fsm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2616
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2616_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2617_fsm
-rw-------. 1 postgres postgres  172032 Nov 10 13:45 2618
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2618_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 2619_fsm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2620
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2650
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2652
-rw-------. 1 postgres postgres   40960 Nov 10 13:45 2654
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2656
-rw-------. 1 postgres postgres  204800 Nov 10 13:45 2658
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2660
-rw-------. 1 postgres postgres   32768 Nov 10 13:45 2662
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2664
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2666
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2668
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2670
-rw-------. 1 postgres postgres  557056 Nov 10 13:45 2674
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2678
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2680
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2682
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2684
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2686
-rw-------. 1 postgres postgres   40960 Nov 10 13:45 2688
-rw-------. 1 postgres postgres  114688 Nov 10 13:45 2690
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2692
-rw-------. 1 postgres postgres   32768 Nov 10 13:45 2696
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2701
-rw-------. 1 postgres postgres   40960 Nov 10 13:45 2703
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2753
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2753_vm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 2755
-rw-------. 1 postgres postgres   32768 Nov 10 13:45 2757
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2830_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2832
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2833
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2834_vm
-rw-------. 1 postgres postgres   32768 Nov 10 13:45 2836
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2836_vm
-rw-------. 1 postgres postgres 1040384 Nov 10 13:45 2838
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2838_vm
-rw-------. 1 postgres postgres   49152 Nov 10 13:45 2840
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2840_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 2995
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 2996
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 3079_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3080
-rw-------. 1 postgres postgres   57344 Nov 10 13:45 3085
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3118_vm
-rw-------. 1 postgres postgres   90112 Nov 10 13:45 3164
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3256_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3258
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3350_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3379
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3381
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3394
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3394_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3439
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3440
-rw-------. 1 postgres postgres  507904 Nov 10 13:45 3456
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3456_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3466_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3468
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 3501_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3502
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3534
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 3541_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3542
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3575
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3576_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3596_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 3598
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3599
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 3600_fsm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3601
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3601_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 3602_fsm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3603
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3603_vm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3605
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3607
-rw-------. 1 postgres postgres   32768 Nov 10 13:45 3609
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3764
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 3764_vm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 3767
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 4942
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 4950
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 4952
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 4954
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 5007
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 549
-rw-------. 1 postgres postgres       0 Nov 10 13:45 6102_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 6104_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 6106_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 6111
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 6113
-rw-------. 1 postgres postgres       0 Nov 10 13:45 7200
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 7201
-rw-------. 1 postgres postgres       0 Nov 10 13:45 826_vm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 828
-rw-------. 1 postgres postgres   49152 Nov 10 13:45 8890
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 8890_vm
-rw-------. 1 postgres postgres   32768 Nov 10 13:45 8895
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 8895_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 8896_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 8899_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 8900_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 9970_vm
-rw-------. 1 postgres postgres       0 Nov 10 13:45 9971_vm
-rw-------. 1 postgres postgres   24576 Nov 10 13:45 9972_fsm
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 9973
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 9973_vm
-rw-------. 1 postgres postgres   32768 Nov 10 13:45 9985
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 9987
-rw-------. 1 postgres postgres       0 Nov 10 13:45 9988_vm
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 9992
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 9994
-rw-------. 1 postgres postgres   16384 Nov 10 13:45 9996
-rw-------. 1 postgres postgres    8192 Nov 10 13:45 9998
-rw-------. 1 postgres postgres     512 Nov 10 13:45 pg_filenode.map

When you reduce the “thread_count” to 1 you will get a normal pg_basebackup:

[postgres@edbbart aa2]$ cat /usr/edb/bart/etc/bart.cfg
[BART]              
bart_host = postgres@edbbart  
backup_path = /u90           
pg_basebackup_path = /usr/edb/as11/bin/pg_basebackup   
xlog_method = stream
retention_policy= 2 DAYS
logfile = /tmp/bart.log 
scanner_logfile = /tmp/scanner.log	   
thread_count = 2

[PG2]
backup_name = PG2_%year-%month-%dayT%hour:%minute
host = 192.168.22.60   
user = bart
port = 5433   
cluster_owner = postgres 
remote_host = postgres@192.168.22.60 
allow_incremental_backups = enabled
thread_count = 1
description = PG1 backuos 

[postgres@edbbart aa2]$ bart backup -s PG2
INFO:  DebugTarget - getVar(checkDiskSpace.bytesAvailable)
INFO:  creating full backup using pg_basebackup for server 'pg2'
INFO:  creating backup for server 'pg2'
INFO:  backup identifier: '1541856034356'
INFO:  backup completed successfully
INFO:  
BART VERSION: 2.2.0
BACKUP DETAILS:
BACKUP STATUS: active
BACKUP IDENTIFIER: 1541856034356
BACKUP NAME: PG2_2018-11-10T14:20
BACKUP PARENT: none
BACKUP LOCATION: /u90/pg2/1541856034356
BACKUP SIZE: 64.68 MB
BACKUP FORMAT: tar
BACKUP TIMEZONE: Europe/Zurich
XLOG METHOD: stream
BACKUP CHECKSUM(s): 0
TABLESPACE(s): 0
START WAL LOCATION: 000000010000000000000008
BACKUP METHOD: streamed
BACKUP FROM: master
START TIME: 2018-11-01 16:14:57 CET
STOP TIME: 2018-11-10 14:20:34 CET
TOTAL DURATION: 214.094 hour(s)

In the next post we’ll look at how we can do parallel incremental restores.

Leave a Reply

Daniel Westermann
Daniel Westermann

Senior Consultant and Technology Leader Open Infrastructure