Jag har haft minnesfel som har åstadkommit den typen av problem - dvs. fel som kunnat hittas med memtest86 - en del konstanta, andra fladdrar då och då, och det var samma här att det var BTRFS vid läsning som sa ifrån, som hintade om att det var ett bekymmer.
Skadade bara ett fåtal filer av backuptyp så ingen skada skedd, men utan detta så hade det kunna pågå lång tid utan att man förstått att filerna skadats och fått korruption under skrivning - typ först när man återläste komprimerade filer och det stanna halvvägs igenom med CRC-fel inom arkivet - då de klassiska filsystemen har ingen upptäcktsförmåga alls när sådant sker.
Läxan av det är när man har man lagring av mer känslig slag så kör man det på servrar som använder ECC-minne, då jag tror att inte ens ZFS klarar sig helskinnat om själva ramminnet börja krångla, men det viktiga med dessa filsystem (ZFS, BTRFS) är att de börja skrika när det blir fel, dock inte medans datat skrivs, utan först senare när det läses. Så är det kritiskt så bör man också köra en 'scrub' ganska ofta för att just läsa strukturerna och finna de som inte längre stämmer överens med sektorinnehållet och dess checksumma. Det är också hemska fel då om de tex. synkas mot molntjänst så blir filerna i molntjänsten också pajade.
Med din beskrivning tror jag huvudproblemet för dig inte var överföringarna mot diskarna som var problemet - utan att dina ramminnen började paja och korrupera datat medans du skrev den trasig TB-delen av filerna.
Hade det varit överföringsstrul på SATA/PCIe-snörena så hade du förmodligen fått reda på det, och om felet hade passerat obemärkt i överföringen så pratar vi om 1-2 bitfel per år vid kontinuerlig körning på max fart över SATA-bussen med den CRC32 som används där, med CRC32C som polynom som tex. SAS-bussen använder så tar det 1000 gånger längre tid mellan tillfällena, förmodligen något liknande på PCIe-bussen (har inte koll på vilken CRC-checksummepolynom eller hur många bit de använder där).
Metadatat på ext4, all data på BTRFS och CRC på SAS-bussen använder CRC32C som checksumma-polynom, medans ZFS har länge använt (vet inte vad som är default idag, men förhoppningsvis något annat än) fletcher som algoritm, vilket är helt hål i huvudet om avsikten var att fånga fel som missas av CRC32 som används av SATA-bussen.
Som analogi med checksummealgoritm som ett filterpapper som fångar skräp i ett flöde är CRC32 som ett kaffefilter i att fånga små partiklar, medans fletcher är ett glest fisknät - medans CRC32C är filter i klass för renrum inom IC-tillverkning... fletcher kan ju teoretiskt fånga ett fel som CRC32 i SATA-bussen missar, men då blir det att vänta lääääääänge...