1. 程式人生 > >Linux TF卡ext4檔案系統錄製視訊檔案用拷貝不用移動的影響

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讀卡器晶片可恢復,但是後面又不能恢復了,問題原因還不明確,後續繼續更新。