Linux TF卡ext4文件系统录制视频文件用拷贝不用移动的影响

环境

    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读卡器芯片可恢复,但是后面又不能恢复了,问题原因还不明确,后续继续更新。

猜你喜欢

转载自blog.csdn.net/TSZ0000/article/details/85108188