Rclone webdav Storage path test/ does not exist

planned

#1

Hi all,

sorry for the literature, I have tried to provide as much information as possible.

Please describe what you are doing to trigger the bug:
Trying to set up duplicacy webdav respository through rclone webdav sharing.

In order to do so, I have configured a remote storage (oneDrive, openDrive, JottaCloud, does not matter) and I am sharing it through rclone serve webdav . I can access through davfs to the share and create files and folders however if I try to set up a repository with webdav support within duplicacy, it fails with the error:
ERROR STORAGE_CREATE Failed to load the WebDAV storage at webdav://iguana@localhost/test: Storage path test/ does not exist

Please describe what you expect to happen (but doesn’t):

being able to create and access a webdav repository served though rclone serve webdav like any other webdav access.

Please describe what actually happens (the wrong behaviour):

Example of access through webdav.

Setup:

rclone side (htpasswd file contains username and pass, rootCA keys are added to the trusted root CA certs within the system and Duplicacy seems to accept the rootCA correctly). For any other interested in… Auto generated certs for localhost and include your rootCA locally

Webdav serve:
# /usr/bin/rclone serve webdav oneDrive:/Duplicacy/dataReady64/ --addr localhost:443 --htpasswd /root/certs/htpasswd --cert /root/certs/rootCA.pem --key /root/certs/rootCA.key -v -v

Access through davfs.

# mount.davfs   https://127.0.0.1:443/ /mnt/temporal
Please enter the username to authenticate with server
https://127.0.0.1:443/ or hit enter for none.
  Username: username
Please enter the password to authenticate user iguana with server
https://127.0.0.1:443/ or hit enter for none.
  Password:
# ls /mnt/temporal
lost+found test
# mkdir /mnt/temporal/deleteme
# ls /mnt/temporal
deleteme  lost+found test

However, using duplicacy with webdav on the same service:

duplicacy -d -v -v -v -log  init -e -c 8M -max 16M -min 4M  dataDroid webdav://iguana@localhost/test
2019-02-21 11:12:30.460 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_WEBDAV_PASSWORD
2019-02-21 11:12:31.016 ERROR STORAGE_CREATE Failed to load the WebDAV storage at webdav://iguana@localhost/test: Storage path test/ does not exist

In the rclone debug side everything looks fine with davfs (i.e listing files and creating a folder deleteme)

2019/02/21 11:57:24 DEBUG : Using config file from "/root/.config/rclone/rclone.conf"
2019/02/21 11:57:27 INFO  : One drive root 'Duplicacy/dataReady64': poll-interval is not supported by this remote
2019/02/21 11:57:27 DEBUG : Adding path "vfs/forget" to remote control registry
2019/02/21 11:57:27 DEBUG : Adding path "vfs/refresh" to remote control registry
2019/02/21 11:57:27 DEBUG : Adding path "vfs/poll-interval" to remote control registry
2019/02/21 11:57:27 INFO  : Using "/root/certs/htpasswd" as htpasswd storage
2019/02/21 11:57:27 NOTICE: One drive root 'Duplicacy/dataReady64': WebDav Server started on https://127.0.0.1:443/
2019/02/21 11:57:41 INFO  : /test/: 127.0.0.1:50648: Basic auth challenge sent
2019/02/21 11:57:41 DEBUG : /test/: Stat:
2019/02/21 11:57:41 DEBUG : /test/: >Stat: fi={FileInfo:test/}, err = <nil>
2019/02/21 11:57:41 INFO  : /test/: OPTIONS from 127.0.0.1:50648
2019/02/21 11:57:41 DEBUG : /test/: Stat:
2019/02/21 11:57:41 DEBUG : /test/: >Stat: fi={FileInfo:test/}, err = <nil>
2019/02/21 11:57:41 DEBUG : /test/: OpenFile: flags=0, perm=----------
2019/02/21 11:57:41 DEBUG : /test/: OpenFile: flags=O_RDONLY, perm=----------
2019/02/21 11:57:41 DEBUG : /test/: >OpenFile: fd=test/ (r), err=<nil>
2019/02/21 11:57:41 DEBUG : /test/: >OpenFile: err = <nil>
2019/02/21 11:57:41 DEBUG : /test/: OpenFile: flags=0, perm=----------
2019/02/21 11:57:41 DEBUG : /test/: OpenFile: flags=O_RDONLY, perm=----------
2019/02/21 11:57:41 DEBUG : /test/: >OpenFile: fd=test/ (r), err=<nil>
2019/02/21 11:57:41 DEBUG : /test/: >OpenFile: err = <nil>
2019/02/21 11:57:42 INFO  : /test/: PROPFIND from 127.0.0.1:50648
2019/02/21 11:57:42 DEBUG : /test/: Stat:
2019/02/21 11:57:42 DEBUG : /test/: >Stat: fi={FileInfo:test/}, err = <nil>
2019/02/21 11:57:42 DEBUG : /test/: OpenFile: flags=0, perm=----------
2019/02/21 11:57:42 DEBUG : /test/: OpenFile: flags=O_RDONLY, perm=----------
2019/02/21 11:57:42 DEBUG : /test/: >OpenFile: fd=test/ (r), err=<nil>
2019/02/21 11:57:42 DEBUG : /test/: >OpenFile: err = <nil>
2019/02/21 11:57:42 INFO  : /test/: PROPFIND from 127.0.0.1:50648
2019/02/21 11:57:51 DEBUG : /test/: Stat:
2019/02/21 11:57:51 DEBUG : /test/: >Stat: fi={FileInfo:test/}, err = <nil>
2019/02/21 11:57:51 DEBUG : /test/: OpenFile: flags=0, perm=----------
2019/02/21 11:57:51 DEBUG : /test/: OpenFile: flags=O_RDONLY, perm=----------
2019/02/21 11:57:51 DEBUG : /test/: >OpenFile: fd=test/ (r), err=<nil>
2019/02/21 11:57:51 DEBUG : /test/: >OpenFile: err = <nil>
2019/02/21 11:57:51 DEBUG : /test/: OpenFile: flags=0, perm=----------
2019/02/21 11:57:51 DEBUG : /test/: OpenFile: flags=O_RDONLY, perm=----------
2019/02/21 11:57:51 DEBUG : /test/: >OpenFile: fd=test/ (r), err=<nil>
2019/02/21 11:57:51 DEBUG : /test/: >OpenFile: err = <nil>
2019/02/21 11:57:51 INFO  : /test/: PROPFIND from 127.0.0.1:50648
2019/02/21 11:57:51 DEBUG : /test/deleteme/: Mkdir: perm=-rwxrwxrwx
2019/02/21 11:57:54 DEBUG : /test/deleteme/: >Mkdir: err = <nil>
2019/02/21 11:57:54 INFO  : /test/deleteme/: MKCOL from 127.0.0.1:50648

duplicacy seems to access to with no errors from rclone side…

2019/02/21 11:58:55 DEBUG : /test/: Stat:
2019/02/21 11:58:55 DEBUG : /test/: >Stat: fi={FileInfo:test/}, err = <nil>
2019/02/21 11:58:55 DEBUG : /test/: OpenFile: flags=0, perm=----------
2019/02/21 11:58:55 DEBUG : /test/: OpenFile: flags=O_RDONLY, perm=----------
2019/02/21 11:58:55 DEBUG : /test/: >OpenFile: fd=test/ (r), err=<nil>
2019/02/21 11:58:55 DEBUG : /test/: >OpenFile: err = <nil>
2019/02/21 11:58:55 INFO  : /test/: PROPFIND from 127.0.0.1:50698

but it generates the error initializing or accessing any folder…

2019-02-21 12:00:07.253 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_WEBDAV_PASSWORD
2019-02-21 12:00:07.774 ERROR STORAGE_CREATE Failed to load the WebDAV storage at webdav://iguana@localhost/test: Storage path test/ does not exist

If I try to run init from the webdav root folder (/)

duplicacy -d -v -v -v -log init -e -c 8M -max 16M -min 4M dataDroid webdav://iguana@localhost/

It just fail with…

runtime error: index out of range
goroutine 1 [running]:
runtime/debug.Stack(0x22, 0x0, 0x0)
        /usr/local/go/src/runtime/debug/stack.go:24 +0x88
runtime/debug.PrintStack()
        /usr/local/go/src/runtime/debug/stack.go:16 +0x18
github.com/gilbertchen/duplicacy/src.CatchLogException()
        /Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy/src/duplicacy_log.go:183 +0x118
panic(0x761580, 0xdd0290)
        /usr/local/go/src/runtime/panic.go:502 +0x1f0
github.com/gilbertchen/duplicacy/src.CreateWebDAVStorage(0x7fd2f49df0, 0x9, 0x0, 0x7fd2f49de9, 0x6, 0x442003204a, 0x7, 0x0, 0x0, 0x0, ...)
        /Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy/src/duplicacy_webdavstorage.go:52 +0x4f4
github.com/gilbertchen/duplicacy/src.CreateStorage(0x87c4dd, 0x7, 0x7fd2f49dd6, 0x9, 0x0, 0x0, 0x7fd2f49de0, 0x1a, 0x1, 0x0, ...)
        /Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy/src/duplicacy_storage.go:625 +0x2ce0
main.configRepository(0x44200a30e0, 0x44200a3001)
        /Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy/duplicacy/duplicacy_main.go:319 +0x3e4
main.initRepository(0x44200a30e0)
        /Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy/duplicacy/duplicacy_main.go:214 +0x28
github.com/gilbertchen/duplicacy/vendor/github.com/gilbertchen/cli.Command.Run(0x879957, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8acfe9, 0x4f, 0x0, ...)
        /Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy/vendor/github.com/gilbertchen/cli/command.go:160 +0x5a4
github.com/gilbertchen/duplicacy/vendor/github.com/gilbertchen/cli.(*App).Run(0x442026a7e0, 0x442002e100, 0x10, 0x10, 0x0, 0x0)
        /Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy/vendor/github.com/gilbertchen/cli/app.go:179 +0x5a0
main.main()
        /Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy/duplicacy/duplicacy_main.go:2008 +0x4110

Any clue? Any help will be much appreciated. I have include it in Bug, however, maybe is not a bug and it is just my peanut brain who is doing something wrong (I hope not :wink: )

I have another webdav setup within rclone for openDrive serving files to duplicacy and I was able to initialize and access the storage correctly.


#2

I guess it is the trailing / that is not accepted by rclone. The crash caused by an empty remote dir is obviously a bug and should be fixed.


#3

Thanks for your repply @gchen .

I did not paste here all the tests, but I did many attempts (with and without / at the end of duplicacy init command), does not matter as all of them ended up in same error.

Within the rclone logs it always shows the trailing / , but davfs does not show the trailing / at the end listing folders (see below log)

Do you think I shall open a bug with rclone also for its implementation of webdav?

This is how are showed the created folders within the storage in rclone’s davfs logs:

2019/02/21 23:38:13 DEBUG : /test/deleteme: Stat:
2019/02/21 23:38:13 DEBUG : /test/deleteme: >Stat: fi={FileInfo:test/deleteme/}, err = <nil>
2019/02/21 23:38:13 DEBUG : /test/deleteme: OpenFile: flags=0, perm=----------
2019/02/21 23:38:13 DEBUG : /test/deleteme: OpenFile: flags=O_RDONLY, perm=----------
2019/02/21 23:38:13 DEBUG : /test/deleteme: >OpenFile: fd=test/deleteme/ (r), err=<nil>
2019/02/21 23:38:13 DEBUG : /test/deleteme: >OpenFile: err = <nil>
2019/02/21 23:38:13 DEBUG : /test/test: Stat:
2019/02/21 23:38:13 DEBUG : /test/test: >Stat: fi={FileInfo:test/test/}, err = <nil>
2019/02/21 23:38:13 DEBUG : /test/test: OpenFile: flags=0, perm=----------
2019/02/21 23:38:13 DEBUG : /test/test: OpenFile: flags=O_RDONLY, perm=----------
2019/02/21 23:38:13 DEBUG : /test/test: >OpenFile: fd=test/test/ (r), err=<nil>
2019/02/21 23:38:13 DEBUG : /test/test: >OpenFile: err = <nil>

And those are two attempts to init with

localhost/test

2019/02/21 23:39:25 INFO  : /test/: PROPFIND from 127.0.0.1:40148
2019/02/21 23:41:10 DEBUG : /test/: Stat:
2019/02/21 23:41:10 DEBUG : /test/: >Stat: fi={FileInfo:test/}, err = <nil>
2019/02/21 23:41:10 DEBUG : /test/: OpenFile: flags=0, perm=----------
2019/02/21 23:41:10 DEBUG : /test/: OpenFile: flags=O_RDONLY, perm=----------
2019/02/21 23:41:10 DEBUG : /test/: >OpenFile: fd=test/ (r), err=<nil>
2019/02/21 23:41:10 DEBUG : /test/: >OpenFile: err = <nil>

and with /test/deleteme

2019/02/21 23:41:10 INFO  : /test/: PROPFIND from 127.0.0.1:40156
2019/02/21 23:41:26 DEBUG : /test/deleteme/: Stat:
2019/02/21 23:41:26 DEBUG : /test/deleteme/: >Stat: fi={FileInfo:test/deleteme/}, err = <nil>
2019/02/21 23:41:26 DEBUG : /test/deleteme/: OpenFile: flags=0, perm=----------
2019/02/21 23:41:26 DEBUG : /test/deleteme/: OpenFile: flags=O_RDONLY, perm=----------
2019/02/21 23:41:26 DEBUG : /test/deleteme/: >OpenFile: fd=test/deleteme/ (r), err=<nil>
2019/02/21 23:41:26 DEBUG : /test/deleteme/: >OpenFile: err = <nil>
2019/02/21 23:41:26 INFO  : /test/deleteme/: PROPFIND from 127.0.0.1:40160

Maybe both (rclone and duplicacy) are including the trailing / however, looks davfs is fine as does not show any trailing / within the log accessing the same folders…

I would be very grateful if there is a solution for this. I am looking forward to cover some storage backup solutions.

Thanks again for your reply and time!


#4

@gchen,

please, find here my parallel conversation about the rclone webdav implementation for rclone serve for Duplicacy, that I have opened in parallel with rclone team.

Nick states the webdav protocol isn’t particularly well specified so there are lots of divergences in the implementation.

The webdav server rclone uses is webdav - GoDoc

as suggested by Nick, I am going to open a new issue in github for rclone.

Maybe that helps to identify the issue and why the weird error trying to use webdav.


#5

This should be fixed by Fixed a webdav compatibility issue with rclone and other bugs · gilbertchen/duplicacy@2b56d57 · GitHub

Basically when Duplicacy looked for a path like storage/, the webdav implementation in rclone returned information about storage (with the trailing slash removed), so Duplicacy thought the path doesn’t exist.

With this commit, you should be able to use the backend webdav-http:// to avoid setting up HTTPS certificates.


#6

I am impressed @gchen,

thank so much for you work. When do you think we could have available this commit for testing?

By when the new duplicacy version? (I am expectant for testing it).


#7

You could always build from source if you’d like to test it.


#8

This sounds like a bug in rclone or the webdav serving library to me.

Though I’m confused the trace above shows that rclone found the directory with a trailing /.

So the stat returned OK for /test/

I’m wondering whether I should attempt to fix this in rclone - what do you think?


#9

Sorry (LOL)

I was busy downloading the git content and compiling it and when I came here to update everyone I realized you already say it here :wink:


#10

It worked like a charm!

here is the output (with oneDrive for instance) with the new binary recently compiled…

 # duplicacy init  -e -c 8M -max 16M -min 4M  --storage-name  oneDrive_rclone_webdav dataDroid webdav-http://iguana@localhost:9193/
Enter the WebDAV password: webdavpass
Enter storage password for webdav-http://iguana@localhost:9193/:*********************
Re-enter storage password:*********************
/data will be backed up to webdav-http://iguana@localhost:9193/ with id dataDroid

and the log from rclone side (htpass file created with htpasswd -c /root/htpass iguana) :

# /usr/bin/rclone serve webdav dRock-oneDriveB:/Duplicacy/dataReady64 --addr localhost:9193 --htpasswd /root/htpass --no-modtime --max-hea
der-bytes 16384 --buffer-size 64M --checkers 3 --checksum  --transfers 20 --low-level-retries 5 --update  -v -v -v
2019/02/27 17:27:46 DEBUG : rclone: Version "v1.46.0-027-g8f4ea77c-beta" starting with parameters ["/usr/bin/rclone" "serve" "webdav" "dRock-oneDriveB:/Duplicacy/dataRe
ady64" "--addr" "localhost:9193" "--htpasswd" "/root/htpass" "--no-modtime" "--max-header-bytes" "16384" "--buffer-size" "64M" "--checkers" "3" "--checksum" "--transfer
s" "20" "--low-level-retries" "5" "--update" "-v" "-v" "-v"]
2019/02/27 17:27:46 DEBUG : Using config file from "/root/.config/rclone/rclone.conf"



2019/02/27 17:27:51 INFO  : One drive root 'Duplicacy/dataReady64': poll-interval is not supported by this remote
2019/02/27 17:27:51 DEBUG : Adding path "vfs/forget" to remote control registry
2019/02/27 17:27:51 DEBUG : Adding path "vfs/refresh" to remote control registry
2019/02/27 17:27:51 DEBUG : Adding path "vfs/poll-interval" to remote control registry
2019/02/27 17:27:51 INFO  : Using "/root/htpass" as htpasswd storage
2019/02/27 17:27:51 NOTICE: One drive root 'Duplicacy/dataReady64': WebDav Server started on http://127.0.0.1:9193/
2019/02/27 17:27:58 DEBUG : /: Stat:
2019/02/27 17:27:58 DEBUG : /: >Stat: fi={FileInfo:/}, err = <nil>
2019/02/27 17:27:58 DEBUG : /: OpenFile: flags=0, perm=----------
2019/02/27 17:27:58 DEBUG : /: OpenFile: flags=O_RDONLY, perm=----------
2019/02/27 17:27:58 DEBUG : /: >OpenFile: fd=/ (r), err=<nil>
2019/02/27 17:27:58 DEBUG : /: >OpenFile: err = <nil>
2019/02/27 17:27:58 INFO  : /: PROPFIND from 127.0.0.1:57254
2019/02/27 17:27:58 DEBUG : /snapshots: Mkdir: perm=-rwxrwxrwx
2019/02/27 17:28:01 DEBUG : /snapshots: >Mkdir: err = <nil>
2019/02/27 17:28:01 INFO  : /snapshots: MKCOL from 127.0.0.1:57254
2019/02/27 17:28:01 DEBUG : /chunks: Mkdir: perm=-rwxrwxrwx
2019/02/27 17:28:04 DEBUG : /chunks: >Mkdir: err = <nil>
2019/02/27 17:28:04 INFO  : /chunks: MKCOL from 127.0.0.1:57258
2019/02/27 17:28:21 DEBUG : /config: Stat:
2019/02/27 17:28:22 DEBUG : /config: >Stat: fi=<nil>, err = file does not exist
2019/02/27 17:28:22 INFO  : /config: PROPFIND from 127.0.0.1:57282
2019/02/27 17:28:27 DEBUG : /config: Stat:
2019/02/27 17:28:27 DEBUG : /config: >Stat: fi=<nil>, err = file does not exist
2019/02/27 17:28:27 INFO  : /config: PROPFIND from 127.0.0.1:57288
2019/02/27 17:28:27 DEBUG : /config: OpenFile: flags=578, perm=-rw-rw-rw-
2019/02/27 17:28:27 DEBUG : /config: OpenFile: flags=O_RDWR|O_CREATE|O_TRUNC, perm=-rw-rw-rw-
2019/02/27 17:28:27 DEBUG : config: Open: flags=O_RDWR|O_CREATE|O_TRUNC
2019/02/27 17:28:27 DEBUG : config: >Open: fd=config (w), err=<nil>
2019/02/27 17:28:27 DEBUG : /config: >OpenFile: fd=config (w), err=<nil>
2019/02/27 17:28:27 DEBUG : /config: >OpenFile: err = <nil>
2019/02/27 17:28:27 DEBUG : One drive root 'Duplicacy/dataReady64': File to upload is small (842 bytes), uploading instead of streaming
2019/02/27 17:28:27 DEBUG : config: Starting multipart upload

Wonderful!!! I can see all duplicacy structure created in oneDrive folders.

Super!!


#11

Thanks for review this webdav issue.

I have been doing some tests after compile the new version and not sure why but the performance is very low compared with a normal upload before (using rclone mount) that was around 5 or 6 Mbs…

Uploaded chunk 28 size 4776790, 757KB/s 01:59:11 1.7%

My upload tests were around 10 to 15 mins to upload 5Gbs. Now the estimation time gives me 1 hour.

just for those who would like to test it.

rclone:

/usr/bin/rclone serve webdav oDroidOpenDriveNative:/Test/newapproach --addr localhost:9491 --htpasswd /root/htpass --no-modtime -v --cache-dir /mnt/cache/opendrive --vfs-cache-max-age 1m --vfs-cache-mode full

Webdav definition in preferences:

   {
        "name": "openDrive_webdav",
        "id": "dataDroid",
        "repository": "",
        "storage": "webdav-http://user@localhost:9491/",
        "encrypted": true,
        "no_backup": false,
        "no_restore": false,
        "no_save_password": false,
        "nobackup_file": "",
        "keys": null
    },

duplicacy command:

duplicacy -v backup -stats -threads 30 -storage “openDrive_webdav”

At least, we could find a solution for the webdav implementation. Thanks for the efforts on that!!

I have also tried initializing the openDrive webdav (https://webdav.opendrive.com) through duplicacy, however, everytime I did it just generated a 0Kb config file in remote.

I guess there is something else on the webdav implementation that requires checks.

Again, thanks.


#12

This checkin Set the content length for upload · gilbertchen/duplicacy@d16273f · GitHub fixed the issue for opendrive. Their webdav server wants the content length field to be set correctly.


#13

Thanks @gchen,

I will check it as soon I will save some time and keep you informed.

Thanks for your efforts!!


#14

Hi @gchen ,

it worked for me!! Downloaded new updates (go get -u github.com/gilbertchen/duplicacy/
)

root@datadroid:/data/Downloads/duplicacy_test# /mnt/cache/duplicacy_arm/src/github.com/gilbertchen/duplicacy/duplicacy_main init -e -c 8M -max 16M -min 4M -storage-name openDrive_webdav dataDroid webdav://username@dom.com@webdav.opendrive.com/Test/newapproach
Enter the WebDAV password:webadv_pass
Enter storage password for webdav://username@dom.com@webdav.opendrive.com/Test/newapproach:**************************
Re-enter storage password:**************************
/data/Downloads/duplicacy_test will be backed up to webdav://username@dom.com@webdav.opendrive.com/Test/newapproach with id dataDroid

config file has now size of 842kb in remote

config_842kb

Compared with previous tests… where config file in remote was 0 kb.

config_0kb

I am doing a test now of uploading 1G (will take some time, looks like the performance in opendrive is not that good. Using -threads 30, any recommendation to speed up? :slight_smile: ) and I will restore to fully test it. I will keep you informed.

Well done!


#15

Backup successful. 1.1Gb of data in 7 files (different sizes)

Backup:

Backup for /data/Downloads/duplicacy_test at revision 1 completed
Files: 8 total, 1,125M bytes; 8 new, 1,125M bytes
File chunks: 119 total, 1,125M bytes; 119 new, 1,125M bytes, 1,104M bytes uploaded
Metadata chunks: 3 total, 10K bytes; 3 new, 10K bytes, 10K bytes uploaded
All chunks: 122 total, 1,125M bytes; 122 new, 1,125M bytes, 1,104M bytes uploaded
Total running time: 00:20:26

maximum peak performance (average was around 900kb):

Uploaded chunk 106 size 7191330, 1.08MB/s 00:02:09 87.7%
Uploaded chunk 107 size 7765299, 1.08MB/s 00:02:02 88.3%
Uploaded chunk 100 size 16195236, 1.10MB/s 00:01:46 89.7%

Restore:

Restored /data/Downloads/duplicacy_test to revision 1
Files: 7 total, 1125.16M bytes
Downloaded 7 file, 1125.16M bytes, 119 chunks
Total running time: 00:06:50

Maximum peak performance downloading (average was around 2Mb to 3.5Mb):

Downloaded chunk 48 size 16777216, 4.86MB/s 00:02:00 48.3%
Downloaded chunk 64 size 9733057, 4.90MB/s 00:01:57 49.1%
Downloaded chunk 44 size 16777216, 4.82MB/s 00:01:56 50.5%

Thanks again for all your efforts.