Za me je k dalsimu hledani chyby (tj. vetveni - je to sitovka nebo je to disk) by pomohlo kdyby jste data na obou koncich spoje (jestli je mate tedy ve vlastni rezii) ukladal/stahoval/sdilel pouze z ramdisku (tj /dev/shm ). To pak rekne zda to je disk nebo sitovka. (za me sit/sitovka je pravdepodobnejsi, protoze chybnej disk by se taky projevil segfaultama aplikaci).
Síťovka mi přijde jako fakt nepravděpodobná, jak už jsem tu jednou psal. SSH, které mu předtím při přenosech blblo taky, má MAC. Stačí jediný bitflip ve zprávě po cestě a rozpadne se ti spojení. Na TCP hlavičkách máš taky CRC.
Tzn. pokud bez viditelné chyby a zastavení přenosu projde přes SCP/SFTP soubor, tak už je porušená integrita souboru, co se načítá z disku (resp. zapisuje při obráceném směru přenosu).
@DrFreeze
Takže můj tip je disk nebo něco souvisejícího. Na stranu druhou mi přijde že, pokud by to četlo a zapisovalo s chybami všechno (tzn. i / resp. /var oddíl), nejspíš by začaly také náhodně padat programy a systém.
Další věc, co mě trochu zaráží, že by opravdu nikde nebyla ani jedna hláška nebo indicie (dmesg, žurnál, filesystém, vzrůstající SMART countery u disků s CRC chybami...).
Opravdu bych zkusil to fio (mělo by to být v balíčcích)
Dá se to ozkoušet na různé disky, případně i do /tmp, který bývá tmpfs (ramdisk, můžete ověřit v /proc/mounts).
Nejdřív s jednoduchým patternem, kde se dobře hledá. Jakmile to nepřečte správně, skončí to chybou. Když pak odeberete verify_fatal=1 v prvním kroku, zapíše vždy celou velikost, což se hodí třeba na následnou analýzu.
# zapis+verifikace
fio --name=write --filename=testfile --rw=write --size=1G --bs=4k \
--direct=1 --ioengine=libaio --verify=pattern --verify_pattern=0xDEADBEEF --verify_fatal=1
# samostatna verifikace
fio --name=verify --filename=testfile --rw=read --bs=4k \
--direct=1 --ioengine=libaio --verify=pattern --verify_pattern=0xDEADBEEF --verify_fatal=1
# kontrola zapsaneho souboru hexdumpem (skipuje vsechny opakujici se radky, takze je hned videt chyba)
hexdump -C testfile
00000000 de ad be ef de ad be ef de ad be ef de ad be ef |................|
*
40000000
Případně ve stejném duchu zápis náhodných dat plus crc verifikace.
# zapis s vlozenym crc kodem a verifikace
fio --name=crcwrite --filename=testfile2 --rw=write --size=1G --bs=4k \
--direct=1 --ioengine=libaio --verify=crc32c --verify_interval=4k --verify_fatal=1
# samostatna verifikace crc
fio --name=crcverify --filename=testfile2 --rw=read --bs=4k \
--direct=1 --ioengine=libaio --verify=crc32c --verify_interval=4k --verify_fatal=1
Tohle se dá vesele opakovat s různými disky, oddíly po změnách konfigurace atp. Také s tím patternem můžete snadno zjistit, co se tam případně rozbíjí, jestli je to náhodné atp.