PToTape-0.7.3.sh 5.8 KB

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