Update: even without --block-size rsync hangs with 100% CPU.
# rsync -va --inplace --no-whole-file --progress --stats
/var/lib/libvirt/images/... /mnt/tmp4/
0x00005619df81a4c0 in hash_search (len=<optimized out>, buf=<optimized
out>, s=<optimized out>, f=<optimized out>) at match.c:206
206 match.c: Datei oder Verzeichnis nicht gefunden.
(gdb) bt
#0 0x00005619df81a4c0 in hash_search (len=<optimized out>,
buf=<optimized out>, s=<optimized out>, f=<optimized out>) at
match.c:206
#1 match_sums (f=f@entry=4, s=s@entry=0x5619e04333a0,
buf=buf@entry=0x5619e04333d0, len=107390828544) at match.c:396
#2 0x00005619df80e6c1 in send_files (f_in=f_in@entry=5,
f_out=f_out@entry=4) at sender.c:389
#3 0x00005619df8189ac in client_run (f_in=5, f_out=4,
pid=pid@entry=668556, argc=argc@entry=1, argv=argv@entry=0x5619e0409660)
at main.c:1317
#4 0x00005619df7f861a in start_client (argv=<optimized out>, argc=1) at
main.c:1580
#5 main (argc=<optimized out>, argv=<optimized out>) at main.c:1812
(gdb) info locals
l = <optimized out>
done_csum2 = 1
hash_entry = <optimized out>
i = 667490
prev = 0x7fbb95ded798
aligned_i = <optimized out>
more = <optimized out>
aligned_offset = <optimized out>
end = 107390697473
k = 131072
want_i = <optimized out>
backup = <optimized out>
s1 = 1310720
sum = <optimized out>
offset = 45707824536
sum2 = "1\205_\250A]\025\370SF\303\362\342>k\243"
s2 = 785055744
map = <optimized out>
offset = <optimized out>
aligned_offset = <optimized out>
end = <optimized out>
k = <optimized out>
want_i = <optimized out>
aligned_i = <optimized out>
backup = <optimized out>
sum2 = {<optimized out> <repeats 16 times>}
s1 = <optimized out>
s2 = <optimized out>
sum = <optimized out>
more = <optimized out>
map = <optimized out>
null_hash = <optimized out>
check_want_i = <optimized out>
done_csum2 = <optimized out>
hash_entry = <optimized out>
i = <optimized out>
prev = <optimized out>
l = <optimized out>
(gdb) info registers
rax 0xffffffff 4294967295
rbx 0x1 1
rcx 0x7fbb94477010 140443623321616
rdx 0x5 5
rsi 0x19aad850 430626896
rdi 0x855fa841
2237638721
rbp 0x7fbb95ded760 0x7fbb95ded760
rsp 0x7ffd76aa33b0 0x7ffd76aa33b0
r8 0x0 0
r9 0x1 1
r10 0x5619e04333a0 94669136671648
r11 0x7fbb95ded798 140443650021272
r12 0x1976750 26699600
r13 0xa2f62 667490
r14 0xa2f62 667490
r15 0xaa4660d98 45707824536
rip 0x5619df81a4c0 0x5619df81a4c0 <match_sums+1328>
eflags 0x283 [ CF SF IF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
Yeah, that's not that helpful... but that might be:
(gdb) l
warning: Source file is more recent than executable.
201 int32 l;
202
203 /* When updating in-place, the chunk's
offset must be
204 * either >= our offset or identical
data at that offset.
205 * Remove any bypassed entries that we
can never use. */
206 if (updating_basis_file &&
s->sums[i].offset < offset
207 && !(s->sums[i].flags &
SUMFLG_SAME_OFFSET)) {
208 *prev = s->sums[i].chain;
209 continue;
210 }
(gdb) n
211 prev = &s->sums[i].chain;
(gdb) n
213 if (sum != s->sums[i].sum1)
(gdb) n
217 l = (int32)MIN((OFF_T)s->blength,
len-offset);
(gdb) n
218 if (l != s->sums[i].len)
(gdb) n
221 if (DEBUG_GTE(DELTASUM, 3)) {
(gdb) n
227 if (!done_csum2) {
(gdb) n
233 if
(memcmp(sum2,s->sums[i].sum2,s->s2length) != 0) {
(gdb) n
234 false_alarms++;
(gdb) n
235 continue;
(gdb) n
307 } while ((i = s->sums[i].chain) >= 0);
(gdb) n
206 if (updating_basis_file &&
s->sums[i].offset < offset
(gdb) n
211 prev = &s->sums[i].chain;
(gdb) n
213 if (sum != s->sums[i].sum1)
(gdb) n
217 l = (int32)MIN((OFF_T)s->blength,
len-offset);
(gdb) n
218 if (l != s->sums[i].len)
(gdb) n
221 if (DEBUG_GTE(DELTASUM, 3)) {
(gdb) n
227 if (!done_csum2) {
(gdb) n
233 if
(memcmp(sum2,s->sums[i].sum2,s->s2length) != 0) {
(gdb) n
234 false_alarms++;
(gdb) print i
$1 = 667489
(gdb) print s->sums[i].chain
value has been optimized out
(gdb) print false_alarms
$2 = -745410538
(gdb) n
235 continue;
(gdb) n
307 } while ((i = s->sums[i].chain) >= 0);
(gdb) n
206 if (updating_basis_file &&
s->sums[i].offset < offset
(gdb) print i
$3 = 667488
(gdb) b 206
Breakpoint 1 at 0x5619df81a4a3: file match.c, line 206.
(gdb) c
Continuing.
Breakpoint 1, hash_search (len=<optimized out>, buf=<optimized out>,
s=<optimized out>, f=<optimized out>) at match.c:206
206 if (updating_basis_file &&
s->sums[i].offset < offset
(gdb) print i
$4 = 667487
(gdb) c
Continuing.
Breakpoint 1, hash_search (len=<optimized out>, buf=<optimized out>,
s=<optimized out>, f=<optimized out>) at match.c:206
206 if (updating_basis_file &&
s->sums[i].offset < offset
(gdb) print i
$5 = 667486
(gdb) c
Continuing.
Breakpoint 1, hash_search (len=<optimized out>, buf=<optimized out>,
s=<optimized out>, f=<optimized out>) at match.c:206
206 if (updating_basis_file &&
s->sums[i].offset < offset
(gdb) print i
$6 = 667485
(gdb) c
Continuing.
Breakpoint 1, hash_search (len=<optimized out>, buf=<optimized out>,
s=<optimized out>, f=<optimized out>) at match.c:206
206 if (updating_basis_file &&
s->sums[i].offset < offset
(gdb) print i
$7 = 667484
This time rsync was hung at
45,706,764,560 42% 16.99MB/s 0:59:06 ^C