PToTape-1.1.0.sh 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #!/bin/bash
  2. clear
  3. LoclaIP="10.0.4.2"
  4. Rshot="Raid10_pool"
  5. RserverIP="10.0.4.2"
  6. Rserver="root@$RserverIP"
  7. Ldest="testpool/test"
  8. DATE=`date +%Y-%m-%d`
  9. logfile="/mnt/NFSUsers/thierry423/PToTape/$0_$DATE.log"
  10. #loadedtape="/mnt/NFSUsers/thierry423/loadedtape.cnf"
  11. testfile="/mnt/NFSUsers/thierry423/latest-p_run.log"
  12. loaderdev="/dev/sg7"
  13. c="0"
  14. mkdir /mnt/NFSUsers ; mount 10.0.4.1:/mnt/bigpart/Users /mnt/NFSUsers
  15. rm $logfile
  16. #ioslot="X"
  17. prepair () {
  18. #echo "prepair / rewind tape drive's" >> $logfile
  19. mt -f /dev/st0 rewind&
  20. mt -f /dev/st1 rewind
  21. wait
  22. }
  23. function choustape () {
  24. wk=$(date +%V)
  25. x=7;z=0;tp=1
  26. while [ $z -lt 1 ]
  27. do
  28. if [[ $wk -lt $x ]]; then
  29. break
  30. else
  31. x=$[$x+8]
  32. tp=$[$tp+1]
  33. fi
  34. done
  35. echo "tape period: " $tp >> $logfile
  36. echo $tp > $testfile
  37. if [[ $tp = 1 ]]; then tp=1; fi ###buggg work around next if....
  38. if [[ $tp = 2 ]]; then tp=9; fi
  39. if [[ $tp = 3 ]]; then tp=11; fi
  40. if [[ $tp = 4 ]]; then tp=21; fi
  41. if [[ $tp = 5 ]]; then tp=23; fi
  42. if [[ $tp = 6 ]]; then tp=33; fi
  43. if [[ $tp = 7 ]]; then tp=35; fi
  44. if [[ $1 = 1 ]]; then
  45. slotnr=$[1+$tp]
  46. ioslot="46"
  47. fi
  48. if [[ $1 = 2 ]]; then
  49. slotnr=$[5+$tp]
  50. if [[ $tp = 1 ]]; then slotnr=5; fi ###buggg work around
  51. ioslot="47"
  52. fi
  53. if [[ $1 = 3 ]]; then
  54. slotnr=$[9+$tp]
  55. if [[ $tp = 1 ]]; then slotnr=8; fi ###buggg work around
  56. ioslot="48"
  57. fi
  58. mtx -f $loaderdev load $[$slotnr ] 0 >> $logfile
  59. slotnr2=$[$slotnr+1]
  60. mtx -f $loaderdev load $[$slotnr2 ] 1 >> $logfile
  61. echo "$ioslot:$slotnr:$slotnr2"
  62. if [[ $? != 0 ]]; then
  63. echo "failed to change to next 2 Tape's"
  64. echo "failed to change to next 2 Tape's" >> $logfile
  65. exit
  66. else
  67. echo "$ioslot:$slotnr:$slotnr2"
  68. #echo "tapes $slotnr loaded"
  69. fi
  70. #return $slotnr
  71. }
  72. ejec () {
  73. mt -f /dev/st0 rewind&
  74. mt -f /dev/st1 rewind
  75. wait
  76. mtx -f $loaderdev unload $1 0
  77. mtx -f $loaderdev unload $2 1
  78. echo "rewind & ejected to slot $1 & $2 from drive 0 & 1" >> $logfile
  79. echo " " >> $logfile
  80. }
  81. writetotape () {
  82. #killall mbuffer
  83. b="0"
  84. a="0"
  85. c="$1"
  86. echo "created remote snapshot & start mbuffer" >> $logfile
  87. ssh $Rserver zfs snapshot -r $Rshot@tapeshot0 >> $logfile
  88. sleep 3
  89. ssh $Rserver zfs send -R $Rshot@tapeshot0 |mbuffer -L -Q -P 90 -s 8388608 -m 6G -o /dev/nst0 -l mbuftmp.tmp
  90. echo "writen full-snapshot to tape" >> $logfile
  91. cat mbuftmp.tmp >> $logfile
  92. wait
  93. c=$[$c+1]
  94. ssh $Rserver zfs destroy -r $Rshot@tapeshot0 >> $logfile
  95. echo "destroyed remote snapshot" >> $logfile
  96. echo "writen $Rshot to tape nr: $num_tape whit or whitout errors. Next?" >>$logfile
  97. echo " " >> $logfile
  98. return $c
  99. }
  100. CloneTape () {
  101. echo "Start Cloning of tapes"
  102. prepair
  103. a="1"
  104. b="0"
  105. c="$1"
  106. echo "clone tape $num_tape to $num_tape2 @ $(date)" >> $logfile
  107. while [ $c -gt 0 ]
  108. do
  109. dd if=/dev/nst0 bs=8388608 | mbuffer -L -P 75 -s 8388608 -m 6G -o /dev/nst1 -l mbuftmp.tmp
  110. cat mbuftmp.tmp >> $logfile
  111. echo "track $a from drive0 received" >> $logfile
  112. a=$[$a+1]
  113. c=$[$c-1]
  114. done
  115. echo "no more tracks on tape, total of $a tracks" >> $logfile
  116. }
  117. Writetozpool () {
  118. echo "Write To test Zpool"
  119. a="1"
  120. b="0"
  121. zfs destroy -r testpool
  122. sleep 3
  123. while [ $b -lt 1 ]
  124. do
  125. #mbuffer -L -Q -p 90 -s 8388608 -m 6G -i /dev/nst0 -l mbuftmp.tmp | zfs receive -F testpool/test-t1$a
  126. mbuffer -L -Q -p 90 -s 8388608 -m 6G -i /dev/nst1 -l mbuftmp.tmp | zfs receive -F testpool/test-t2$a
  127. #dd if=/dev/nst0 bs=8388608 status=progress | zfs receive -F testpool/test$a
  128. #dd if=/dev/nst1 bs=8M status=progress | zfs receive -F testpool/testt$a
  129. if [[ $? != 0 ]]; then
  130. a=$[$a-1]
  131. echo "No more snapshots on tape latest was $a"
  132. b="1"
  133. else
  134. echo "snapshot $a received"
  135. a=$[$a+1]
  136. fi
  137. done
  138. }
  139. echo "Start fule backup to tape @ $(date)" >> $logfile
  140. echo "running 7 week Backup @ $(date)" >> $logfile
  141. IFS=":"
  142. read ioslot num_tape num_tape2<<<"$(choustape 1)"
  143. Rshot="Raid10_pool/Users"
  144. prepair
  145. writetotape 0
  146. shots=$?
  147. CloneTape $shots
  148. ejec $num_tape $ioslot
  149. IFS=":"
  150. read ioslot num_tape num_tape2<<<"$(choustape 2)"
  151. Rshot="Raid10_pool/System"
  152. prepair
  153. writetotape 0
  154. shots=$?
  155. Rshot="Raid10_pool/var"
  156. writetotape $shots
  157. shots=$?
  158. Rshot="BIG_pool/Media/Podcast"
  159. writetotape $shots
  160. shots=$?
  161. CloneTape $shots
  162. ejec $num_tape $ioslot
  163. IFS=":"
  164. read ioslot num_tape num_tape2<<<"$(choustape 3)"
  165. #Rserver="root@10.0.4.2"
  166. Rshot="BIG_pool/Media/Video"
  167. prepair
  168. writetotape 0
  169. shots=$?
  170. Rshot="BIG_pool/Media/Music"
  171. writetotape $shots
  172. shots=$?
  173. CloneTape $shots
  174. ejec $num_tape $ioslot
  175. echo "finished fule backup to tape @ $(date)" >> $logfile
  176. echo "-----------------------------------------------------" >> $logfile
  177. echo " " >> $logfile
  178. echo " " >> $logfile
  179. #rm mbuftmp.tmp
  180. killall mbuffer -q
  181. wait
  182. # recover to single tape drive....: dd if=/dev/st0 bs=8M | zfs receive -F testpool/test2