最近一直在树莓派上调试一些软件,然后发现了一个问题,今天能执行的程序,明天就不能执行了,或者明天能执行后天也未必能执行,刚开始还没太过在意这个问题,直到现在越来越严重,可能是现在可以,一小时后就不行,而整个过程树莓派根本没有重启断电过.
大概错误是 error while loading shared libraries: ****.so: Unable to run arch-specific checks (反正没遇到过其他错误!)
因为一开始这些错误从来不会出现在系统库,所以就怀疑是自己程序不对,直到最近,某些系统库也会出问题,比如libc,表现直接开不了机.
但是通常重烧系统就能大概率解决,但是这样也不是办法,后来就把程序都往外部储存器放,结果放在外部储存器的程序从来不出问题,开始怀疑是储存器问题.
然后尝试fsck.ext4修复树莓派本身文件系统,问题竟然也能解决,更能确定是储存器问题.
求证过程:
- 错误后用fsck.ext4大概率可以修复.(文件系统出问题了,可能是储存,也可以能是逻辑.)
- 用urwtest测试TF卡读写几圈.(报告没有错误,但是速度很不稳定,时快时慢,有时候甚至卡死.)
- 用urwtest测试其他TF卡读写几圈.(顺畅没问题,然后这张卡用来树莓派启动完全没问题,基本确定是TF卡问题.)
- 把疑似问题的TF卡烧了系统后不要启动,放置2小时,基本不能启动.(现在这张TF卡烧好系统启动不到一小时也会出问题了.)
- 同样树莓派更换好的TF卡,再也没出过问题.(99%确认是储存问题)
- 用坏的TF卡启动后,把代码存在外部储存器,然后等系统坏了之后又重新烧录系统,代码没问题.
- 用坏的TF卡启动后,把系统关键的几个lib的hash记录下来,2小时后对比,发生了改变.
所以啊,遇到这种莫名其妙问题,特别是上面那句错误,先看看是不是TF卡挂了.