X-Git-Url: https://git.siccegge.de//index.cgi?p=tools.git;a=blobdiff_plain;f=backup-zfs;h=4ebb78bc9bd292b4d23e89c763f8c9fbd33ad9d8;hp=7ac2f39ee2851b06103b771c450f18f5f180a3fa;hb=HEAD;hpb=6067d72fbe1f4f64aa9aa7a3cf9c130a69da6b0a diff --git a/backup-zfs b/backup-zfs index 7ac2f39..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 @@ -121,14 +123,21 @@ def sftp_send(dataset, reference=None): done = done + len(junk) # sys.stdout.write('#') # sys.stdout.flush() - 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() + if done != len(junk): + 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') - print_colored(" %.3f GB DONE (%.3f MB/s)" % ((1.0 * done) / (1024 ** 3), (done / (1024 ** 2 *(time.time() - startt)))), 'green') + 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') digestfile.write("%s %s\n" % (digest.hexdigest(), filename)) def syncronize(local_datasets, remote_datasets):