From 799c3b6b5d2b63dd63f7eb0602275f70aa027ec0 Mon Sep 17 00:00:00 2001
From: Julian Rother <julianr@fsmpi.rwth-aachen.de>
Date: Thu, 4 Oct 2018 22:50:49 +0200
Subject: [PATCH] Upload check_dd_partially

---
 Check/check_dd_partially | 76 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 76 insertions(+)
 create mode 100644 Check/check_dd_partially

diff --git a/Check/check_dd_partially b/Check/check_dd_partially
new file mode 100644
index 0000000..57607d9
--- /dev/null
+++ b/Check/check_dd_partially
@@ -0,0 +1,76 @@
+#!/bin/bash
+
+usage="$(basename "$0") [-v] [-q] n src des -- verifies per sha256sum of n(>=2) equidistant distributed blocks of size 4096kB, that src was correctly written to des
+$(basename "$0") -h
+
+where:
+    -v  verbose: prints the sha256sums
+    -q  quite: suppresses the output of the result,
+        the return-Code remains as reponse
+    -h  prints this help message"
+
+quite=false;
+verbose=false;
+printHelp=false;
+for opt in "$@"
+do
+	case $opt in
+		-v) verbose=true ; shift 1 ;;
+		-q) quite=true ; shift 1 ;;
+		-h) printHelp=true ; shift 1 ;;
+		-?) printHelp=true ; shift 1 ;;
+	esac
+done
+
+if [ "$printHelp" = true ] || [ $# -ne 3 ] || [ $1 -le 1 ]
+then
+	echo "$usage";
+	exit -1;
+fi
+
+n=$1
+src=$2;
+des=$3;
+lengthSrc=$(($(stat -c '%s' $src) / 4096)); # length of the source (in 4096kB)
+if [ "$verbose" = true ]
+then
+	echo "length of the source (in 4096kB): $lengthSrc"
+fi
+failed=false;
+for i in $(seq 0 $(($n-1)))
+do
+	offset=$(echo "$i*($lengthSrc-1)/($n-1)" | bc );
+	if [ "$verbose" = true ]
+	then
+		echo "comparing blocks at offset $offset"
+	fi
+	sha256sumSrc=$(dd if=$src skip=$offset bs=4096 count=1 status=none | sha256sum)
+	if [ "$verbose" = true ]
+	then
+		echo "sha256sum of the source:      $sha256sumSrc"
+	fi
+	sha256sumDes=$(dd if=$des skip=$offset bs=4096 count=1 status=none | sha256sum)
+	if [ "$verbose" = true ]
+	then
+		echo "sha256sum of the destination: $sha256sumDes"
+	fi
+	if [ "$sha256sumSrc" != "$sha256sumDes" ]
+	then
+		failed=true;
+		break;
+	fi
+done
+if [ "$failed" = false ]
+then
+	if [ "$quite" = false ]
+	then
+		echo "OK!";
+	fi
+	exit 0;
+else
+	if [ "$quite" = false ]
+	then
+		echo "FAILED!";
+	fi
+	exit 1;
+fi
-- 
GitLab