环境
TF卡ext4文件系统录制大量视频文件后,出现TF卡损坏不能写的情况,探究用拷贝不用移动的影响。
分析
录制5分钟视频,临时文件名为开始时间,录制结束后拷贝到TF卡其他目录,并把结束时间加在文件名上,然后删除临时文件;
通过打开SCSI_LOG查看写block发现,此方法会导致临时文件会重复的写某几个block,可能会导致没有负载均衡;
开打印:echo 4194304 > /proc/sys/dev/scsi/logging_level
压力测试脚本
#create - cp - rm - loop
#./press_test_board.sh dev camera_num &
#!/bin/sh
dev=$1
mnt_dir=/mnt/$dev
in_file=/dev/zero
out_dir=$mnt_dir/temp
store_dir=$mnt_dir/video
free_size=1048576 #1G
if [ ! -n "$1" ] ;then
echo "please input device num, ./sh dev cam, exit."
exit
fi
if [ ! -n "$2" ] ;then
echo "please input camera num, ./sh dev cam, exit."
exit
fi
echo "TF card perss testing! dev=$dev,cam=$2."
echo
mkdir -p $out_dir
mkdir -p $store_dir/camera$2
store_dir=$store_dir/camera$2
rm -rf $out_dir/*
rm -rf $store_dir/*
sync
while true
do
time_start=$(date +%Y%m%d%H%M%S 2>/dev/null)
file_start=camera$2-0-00000-00300_$time_start-endtime.mp4
dd if=$in_file of=$out_dir/$file_start bs=1M count=10 2>/dev/null >/dev/null
sync
time_end=$(date +%Y%m%d%H%M%S 2>/dev/null)
file_end=camera$2-0-00000-00300_$time_start-$time_end.mp4
cp -rf $out_dir/$file_start $store_dir/$file_end
sync
rm -rf $out_dir/$file_start
sync
available_size=$(df | grep $dev | awk '{print $4}' 2>/dev/null)
if [ $available_size -le $free_size ]
then
find $store_dir -name "*.mp4" | xargs ls -rt | head -n 10 | xargs rm -rf
sync
fi
done
经过测试发现,64G卡出现过3次Buffer I/O error的情况,出现的时间不固定,概率随机。
错误打印,请求2个block以上就会报错误,单独请求1个block是正常的,为啥?
Buffer I/O error on dev sdb1, logical block 0, lost async page write
Buffer I/O error on dev sdb1, logical block 1, lost async page write
Buffer I/O error on dev sdb1, logical block 2, lost async page write
Buffer I/O error on dev sdb1, logical block 3, lost async page write
Buffer I/O error on dev sdb1, logical block 4, lost async page write
Buffer I/O error on dev sdb1, logical block 5, lost async page write
Buffer I/O error on dev sdb1, logical block 6, lost async page write
Buffer I/O error on dev sdb1, logical block 7, lost async page write
Buffer I/O error on dev sdb1, logical block 8, lost async page write
总结
目前出现错误的64G卡使用无名2.0读卡器和GL835 2.0读卡器芯片可恢复,但是后面又不能恢复了,问题原因还不明确,后续继续更新。