[Xiaomi Redmi Note 4 Questions & Answers] samarium:
I had this problem on a Redmi Note 3 Pro/Qualcomm recently. It seems to me to be loosely correlated to the /data backup size, and seems to manifest just below 4GB, looks suspiciously like some 32bit counter/offset ... but .... in my case this seems to happen only in the first tar/win file which much < 2GB uncompressed anyway.

Interestingly, not all tar binaries are equal. The binary from LineageOS 14.1 crashes reading win000 files often if I try to test this from a terminal session when the phone is booted normally, however tar from TWRP does work and doesn't crash. Using tar from ubuntu 18.04 I can see all the files, however there are numerous reports of

tar: Malformed extended header: missing equal sign

Maybe this tar crash is also what is happening for the TWRP GUI using it's internal tar? Although this seems to be crashing when the recovery is nearing 4GB, however my tar crash seems to happen on the first segmented win000 file? Maybe it is related in some way to pigz which seems to be used by the TWRP GUI to compress/uncompress and it does multi-threading. I haven't looked at TWRP code.

I tried TWRP 3.1.1-0, and downloaded the latest 3.2.3-0 from twrp.me. Both failed in the same way.

I inspected some of the backups I had, finding decrypted /data space usage less /data/media:

$ ls -1
2018-09-06--12-41-18_lineage_kenzo-userdebug_7.1.2_NJH47F_02865f
2018-11-10--11-08-53_lineage_kenzo-userdebug_7.1.2_NJH47F_02865f
2019-01-10--10-01-22_lineage_kenzo-userdebug_7.1.2_NJH47F_02865f
2019-01-26--16-04-54_lineage_kenzo-userdebug_7.1.2_NJH47F_02865f
$ grep Data.backup.size */recovery.log|uniq|sed 's/\// /;s/--[^ ]* / /;s/:/ /'
2018-09-06 recovery.log I:Data backup size is 3464MB, free: 14062MB.
2018-09-06 recovery.log I:Data backup size is 3464MB, free: 11552MB.
2018-11-10 recovery.log I:Data backup size is 4622MB, free: 11065MB.
2018-11-10 recovery.log I:Data backup size is 4622MB, free: 7576MB.
2019-01-10 recovery.log I:Data backup size is 4041MB, free: 11284MB.
2019-01-10 recovery.log I:Data backup size is 4041MB, free: 8192MB.
2019-01-26 recovery.log I:Data backup size is 652MB, free: 24414MB.
$

I could restore 2018-09-06 and 2019-01-26 using TWRP GUI while the other 2 failed with error=255. Of the backups I could restore with the TWRP GUI, both backups are easily < 4GB. 2019-01-10 is just below, still no idea if it is related to 4GB. In each case I formatted /data before hand, so /data/media was empty, so there was 24GB of free space, so there was always at least 2 times, sometimes 5 times, the actual space required for the recovery available.

Irrespective of the actual failure mode, I was able to restore the other backups manually.

Interestingly when I examine the .win and .win000 files with

tar tvf file | sed 5q

I find that the single .win file backups need to be restored while current directory is /data whereas the multipart backups need to be restored while current directory is /.

Manual restore process from TWRP recovery shell :

Backup everything to storage external the phone, and then backup the backup.

Wipe /data. I prefer to format /data while also wipes /data/media = /sdcard as this guarantees /data is clean, however if your backups are stored in /sdcard/TWRP then you are going to need to either not format /data or restore them from your PC, or not store them in /sdcard/TWRP and store them on an external sdcard or external USB OTG drive. Actual location may vary depending on TWRP build. Determine the b= lines below appropriately.

Connect using adb shell. You could type this in using the TWRP Advanced Terminal, but error prone.

Make sure you have enough free space on /data to do the restore. You should have, but this is the manual process so cross check.

Restore the .win0?? files with tar.

... # PS1="# " # optional
# cd /location/TWRP/BACKUPS/serialnumber/2019-01-10* # location: sdcard sdcard1 usb-otg
# pwd # verify backup directory
/location/TWRP/BACKUPS/.../2019-01-10--10-01-22_...
# b=$(pwd) # remeber backup folder location
# ls -l data.*.win000 # verify backup file exists
-rw-rw---- 1 root sdcard_rw 1109681843 2019-01-26 11:02 data.ext4.win000
# for m in data*md5; do md5sum -c $m; done # verify md5 checksums of each tar/win file.
data.ext4.win000: OK
data.ext4.win001: OK
data.ext4.win002: OK
# cd /
# for w in $b/data*win0??; do echo recover $w; tar xpvf $w > $w.rec; echo; done
recover /.../data...win000
tar: removing leading '/' from member names

recover /.../data...win001
tar: removing leading '/' from member names

recover /.../data...win002
tar: removing leading '/' from member names

# cd $b
# wc -l data*rec # verify recovery of reasonable number of files
29346 data.ext4.win000.rec
343 data.ext4.win001.rec
1831 data.ext4.win002.rec
31520 total
# df /data
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/block/dm-0 25667344 15051056 10599904 59% /data
#

Reboot