USBのスクリプトを循環コピーしてテストする

3598 ワード

この間、USBコピーのテストを行い、いくつかのテストスクリプトを蓄積しました.ディスク間のコピーもできます.ここに置いてバックアップします.
主な実現機能:
1つのストレージデバイスから別の場所にデータをコピーし、2回のコピーのデータが一致しているかどうかを比較し、システムにエラーが発生しているかどうかを判断する.
3つの方法を採用し,主にコピー状況を直感的に反映するためである.
説明は方法3を参照してください.
1、rsyncコマンドを使用してコピーし、パーセンテージプロンプトでファイルサイズを動的に表示します.
#!/bin/bash 

DEST_PATH=$1         #The dst path; Usually a /media/U-disk or /home
SOUR_PATH=$2         #The src file path; i.e the dir of testfile.tar.gz 
FILE=$3          #The tar file which will be copy
#eg:run like this: sh -x cp_usb_md5.sh /media/teclast/ /home/loongson/ testdir.tar.gz

loop=0

while true; do
echo begin copy 

#curl -# file:/$SOUR_PATH$FILE -o $DEST_PATH$FILE     #One method use curl
rsync -av --progress $SOUR_PATH$FILE $DEST_PATH      #Second method use rsync

dmesg | grep "Buffer I/O error"


if [ $? -eq 0 ];
then
    echo "error is happen"
    exit
else
    echo compare md5sum
    A=`md5sum $SOUR_PATH$FILE|awk -F ' ' '{print $1}'`
    B=`md5sum $DEST_PATH$FILE|awk -F ' ' '{print $1}'`
    echo $A >> md5A.txt
    echo $B >> md5B.txt
    test  $A == $B  && echo "md5sum1 = md5sum2"||echo "error"

    echo begin rm
    rm -rf $DEST_PATH$FILE
    echo "loop $((loop++))"
    sleep 3
fi

#echo 3 >/proc/sys/vm/drop_caches
done

2、curlコマンドでコピーする、
進捗バーのヒント:
#!/bin/bash 

DEST_PATH=$1         #The dst path; Usually a /media/U-disk or /home
SOUR_PATH=$2         #The src file path; i.e the dir of testfile.tar.gz 
FILE=$3          #The tar file which will be copy
#eg:run like this: sh -x curl_usb_md5.sh /media/teclast/testdir.tar.gz /home/loongson/testdir.tar.gz

loop=0

while true; do
echo begin copy 

curl -# file:$SOUR_PATH$FILE -o $DEST_PATH$FILE     #One method use curl


dmesg | grep "Buffer I/O error"


if [ $? -eq 0 ];
then
    echo "error is happen"
    exit
else
    echo compare md5sum
    A=`md5sum $SOUR_PATH$FILE|awk -F ' ' '{print $1}'`
    B=`md5sum $DEST_PATH$FILE|awk -F ' ' '{print $1}'`
    echo $A >> md5A.txt
    echo $B >> md5B.txt
    test  $A == $B  && echo "md5sum1 = md5sum2"||echo "error"

    echo begin rm
    rm -rf $DEST_PATH$FILE
    echo "loop $((loop++))"
    sleep 3
fi

#echo 3 >/proc/sys/vm/drop_caches
done

3、コマンドを使用してコピーし、ファイルの進捗状況を提示する:
#!/bin/bash 

DEST_PATH=$1         #The dst path; Usually a /media/U-disk or /home
SOUR_PATH=$2         #The src file path; i.e the dir of testfile.tar.gz 
FILE=$3          #The tar file which will be copy          # 
#eg:run like this: sh -x cp_usb_md5.sh /media/teclast/ /home/loongson/ testdir.tar.gz

loop=0         # 

while true; do        # 
echo begin copy 

cp -rv $SOUR_PATH$FILE  $DEST_PATH     #third method use cp

dmesg | grep "error"          # 


if [ $? -eq 0 ];          # 
then
    echo "error is happen"
    exit                        # 
else
    echo compare md5sum             # md5 , 
    A=`md5sum $SOUR_PATH$FILE|awk -F ' ' '{print $1}'`           # 
    B=`md5sum $DEST_PATH$FILE|awk -F ' ' '{print $1}'`
    echo $A >> md5A.txt
    echo $B >> md5B.txt
    test  $A == $B  && echo "md5sum1 = md5sum2"||echo "error" 

    echo begin rm
    rm -rf $DEST_PATH$FILE                # , 
    echo "loop $((loop++))"
    sleep 3
fi

#echo 3 >/proc/sys/vm/drop_caches      # 
done