- #!/bin/bash 
-   
- ### sticktest 
- ##              Dieses Skript testet angeschlossene Speichermedien darauf, wie viele Gibi-Bytes  
- ##              sich darauf speichern und wieder lesen lassen. 
- ##              Es hilft gefälschte oder kaputte USB-Sticks zu erkennen. 
-   
- ### Aufruf: 
- ##              sticktest /MountPoint [-r] 
-   
- ### Optionen 
- ##      -r      Löschen aller zum Test verwendeten Dateien 
-   
- ### Autor: 
- ## Jörg Reinholz, Kassel, Germany 
-   
- ### Lizenz: 
- ## GPL, LGPL or MPL: show https://code.fastix.org/lizenz.php 
-   
- if [ -z $1 ]; then 
-         echo "Fehler: Kein Mountpoint angegeben."; 
-         exit 2; 
- fi 
-   
- MountPoint=$1; 
- isMountPoint=$( grep -P "/dev/.* $MountPoint " < /proc/self/mounts| wc -l ); 
- if [ 1 -ne $isMountPoint ]; then 
-         echo "Fehler: $MountPoint ist kein Mountpoint oder kein gemountetes Gerät"; 
-         exit 4; 
- fi 
-   
- echo -e "Ok. Das wird jetzt eine Weile dauern...\n\n"; 
-   
- #set -x 
-   
- oldDir="${PWD}"; 
- TMPDIR="/tmp"; 
- BaseFile=$(mktemp); 
- TestFile=$(mktemp); 
- LogFile=/tmp/test.log; 
-   
- if [ -f ${LogFile} ]; then 
-         truncate -s 0 ${LogFile}; 
- else 
-         touch ${LogFile}; 
- fi 
-   
- err=0; 
- num=0; 
-   
- dd if=/dev/urandom of=${BaseFile} bs=4096 count=255744 status=none; 
-   
- while [ 0 -eq ${err} ]; do 
-         num=$((${num} + 1)); 
-         cp "${BaseFile}" "${TestFile}"; 
-         dd if=/dev/urandom bs=4096 count=$((256*25)) status=none >> $TestFile; 
-         cp --no-clobber "${TestFile}" "${MountPoint}/TestFile.${num}" || err=1; 
-         sync "${MountPoint}/TestFile.${num}"; 
-   
-         if [ 1 = $err ]; then 
-                 echo "(Kein Fehler:) ${MountPoint}/TestFile.${num} konnte nicht mehr oder nicht mehr vollständig geschrieben werden."; 
-                 echo "Prüfung nachfolgend."; 
-         fi 
-   
-         if [ -r "${MountPoint}/TestFile.${num}" ]; then 
-                 echo -n "${MountPoint}/TestFile.${num}:" >> ${LogFile}; 
-                 md5A=$(md5sum -b < ${TestFile} | tr -d " *-"); 
-                 md5B=$(md5sum -b < ${MountPoint}/TestFile.${num} | tr -d " *-"); 
-                 [ 0 = $err ] && echo ${md5A} >> ${LogFile}; 
-                 [ 1 = $err ] && echo ${md5B} >> ${LogFile}; 
-   
-                 if [ ${md5A} = ${md5B} ]; then 
-                         [ 0 = $err ] && echo "Das Schreiben von ${num} Gigabytes war SCHEINBAR erfolgreich."; 
-                 else 
-                         [ 0 = $err ] && echo "ALARM: Prüfsummenfehler in Datei ${MountPoint}/TestFile.${num}"; 
-                 fi 
-         fi 
- done 
-   
- files=($(cut -d':' -f1 ${LogFile})); 
- sums=($(cut -d':' -f2 ${LogFile})); 
-   
- echo -e "\nAbschließende Tests (Prüfen aller Dateien):"; 
-   
- err=0; 
- for i in $(seq 0 $((${#files[@]}-1))); do 
-         file=${files[${i}]}; 
-         sum=${sums[${i}]}; 
-         sumTest=$(md5sum -b < "${file}" | tr -d " *-"); 
-         echo -e "\nDatei: '${file}'"; 
-         echo "   Erwartete Prüfsumme: ${sum}"; 
-         echo "Tatsächliche Prüfsumme: ${sumTest}"; 
-         if [ "${sum}" = "${sumTest}" ]; then  
-                 echo "* Identisch: O.K.*"; 
-         else 
-                 echo "# FEHLER nach ${i} GigaBytes! #"; 
-         fi 
-         [ "$2" = "-r" ] && rm "${file}"; 
- done 
-   
- if [ 1 == $err ]; then 
-                 echo "###########################################"; 
-                 echo "# Der Stick hat den Test NICHT bestanden! #";                 
-                 echo "###########################################";              
- fi 
-   
- echo '------------------------------------'; 
- echo '| Der Stick hat den Test bestanden |';                 
- echo '------------------------------------'; 
-   
- if [ "$2" = "-r" ]; then 
-         rm $BaseFile; 
-         rm $TestFile; 
- fi 
- cd "$oldDir"; 
- exit $err; 
-