X-Git-Url: https://git.siccegge.de//index.cgi?p=tools.git;a=blobdiff_plain;f=backup-zfs;h=4ebb78bc9bd292b4d23e89c763f8c9fbd33ad9d8;hp=9d52e0635cf82b37fa3f9a28f5142a4ebbf59e8a;hb=HEAD;hpb=c4e66206d0cd9ab1c152d99fe1d5c91cb9c88868 diff --git a/backup-zfs b/backup-zfs index 9d52e06..4ebb78b 100755 --- a/backup-zfs +++ b/backup-zfs @@ -10,7 +10,7 @@ SFTP_DIR = '/srv/backup/mitoraj' SFTP_USER = 'root' ZPOOL = 'base' GPGUSER = '9FED5C6CE206B70A585770CA965522B9D49AE731' -BUFFER = 1024 * 1024 +BUFFER = 4 * 1024 * 1024 # #################### @@ -58,8 +58,8 @@ def sftp_connect(): agent = paramiko.Agent() transport = paramiko.Transport((SFTP_HOST, 22), - default_window_size=1024*BUFFER, - default_max_packet_size=64*BUFFER) + default_window_size=128*BUFFER, + default_max_packet_size=BUFFER) # transport.max_packet_size = BUFFER # transport.window_size = BUFFER * 64 transport.connect(hostkey=hostkey) @@ -93,7 +93,7 @@ def sftp_send(dataset, reference=None): zfs = subprocess.Popen(zfscommand, stdout=subprocess.PIPE, bufsize=2*BUFFER) print(zfscommand) - gpgcommand = [ 'gpg', '--batch', '--compress-algo', 'ZLIB', + gpgcommand = [ 'gpg2', '--batch', '--compress-algo', 'ZLIB', '--sign', '--encrypt', '--recipient', GPGUSER ] gpg = subprocess.Popen(gpgcommand, bufsize=2*BUFFER, stdout=subprocess.PIPE, @@ -107,8 +107,10 @@ def sftp_send(dataset, reference=None): print_colored("Error:\n\n" + gpg.stderr, 'red') return + lastflush = 0 with open('/tmp/SHA256SUM', 'a') as digestfile: with sftp.open(filename, 'xw', BUFFER) as remotefile: + remotefile.set_pipelined() digest = hashlib.sha256() sys.stdout.write(term['purple']) done = 0 @@ -125,12 +127,17 @@ def sftp_send(dataset, reference=None): sys.stdout.write(" \r%s %.3f GB (%.3f MB/s)" % (term['green'], (1.0 * done) / (1024 ** 3), (done / (1024 ** 2 *(time.time() - startt))))) sys.stdout.flush() remotefile.write(junk) + + if done - lastflush > 128 * 1024**2: + remotefile.flush() + lastflush = done + digest.update(junk) junk = gpg.stdout.read(BUFFER) sys.stdout.write('\r') timedelta = time.time() - startt - print_colored(" %.3f GB DONE (%.3f MB/s) Total: %02d%02d:%02d" % ((1.0 * done) / (1024 ** 3), (done / (1024 ** 2 *timedelta)), timedelta/3600, (timedelta/60)%60, timedelta%60), 'green') + print_colored(" %.3f GB DONE (%.3f MB/s) Total: %02d:%02d:%02d" % ((1.0 * done) / (1024 ** 3), (done / (1024 ** 2 *timedelta)), timedelta/3600, (timedelta/60)%60, timedelta%60), 'green') digestfile.write("%s %s\n" % (digest.hexdigest(), filename)) def syncronize(local_datasets, remote_datasets):