Linux TF卡ext4檔案系統錄製視訊檔案用拷貝不用移動的影響
阿新 • • 發佈:2018-12-28
環境
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讀卡器晶片可恢復,但是後面又不能恢復了,問題原因還不明確,後續繼續更新。