Advertisement
Guest User

hdd info backup

a guest
Jun 16th, 2014
421
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.14 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. PASS='password';
  4.  
  5. FDISK='/sbin/fdisk -lu ';
  6. MDADM='/sbin/mdadm';
  7. LVM='/sbin/vgdisplay';
  8. MAIL_PRG='/usr/bin/sendEmail';
  9.  
  10. DIR='/tmp/hdd-info';
  11.  
  12. MBR_BYTES=2048;
  13. SEND_ATTEMPT_COUNT=3;
  14. SEND_ATTEMPT_PERIOD='1h';
  15. TEST_HOST='ya.ru';
  16. TEST_TRYS=3;
  17. TEST_DELAY='1h';
  18.  
  19. # ----------  Automatic params ----------
  20. HOST=`echo $FROM | cut -d@ -f 2`;
  21. USER=`echo $FROM | cut -d@ -f 1`;
  22. SERVER="smtp.$HOST";
  23. TITLE="hdd info (`hostname`)";
  24.  
  25.  
  26. # ==================== Functions ====================
  27.  
  28. debugInfo(){
  29.     [ 'qwerty' == "qwerty$VERBOSE" ] && return 0;
  30.     echo "$@";
  31. }
  32.  
  33. fname(){
  34.     echo $1 | grep -E -o [^/]+$ | sed -r 's/\.[^.]+$//';
  35. }
  36.  
  37. # Creates file in TMP with uniq (time based) name with given PREFIX.
  38. make_temp_file(){
  39.     local FUNC='makeTempFile()';
  40.  
  41.     [ 0 -eq $# ] && {
  42.         echo "$FUNC: prefix required" >&2;
  43.         exit 1;
  44.     }
  45.  
  46.     local PREFIX="$1";
  47.     local FILE="/tmp/$PREFIX-`date +%Y.%m.%d-%H.%M.%S`.txt";
  48.  
  49.     touch "$FILE" || {
  50.         echo "$FUNC: unable to create temp file '$FILE'" >&2;
  51.         exit 1;
  52.     }
  53.  
  54.     echo "$FILE";
  55. }
  56.  
  57. get_LVM_info(){
  58.     if [ -e $LVM -a -x $LVM ]; then
  59.         local FILE=`make_temp_file 'LVM'`;
  60.  
  61.         for cmd in vgdisplay lvdisplay pvdisplay; do
  62.             echo "---------- $cmd ----------" >> $FILE;
  63.             /sbin/$cmd --units b >> $FILE 2>/dev/null;
  64.             echo >> $FILE;
  65.         done
  66.  
  67.         for cmd in vgs lvs pvs; do
  68.             echo "---------- $cmd ----------" >> $FILE;
  69.             local OPT=$( echo $cmd | sed -r 's/s$/_all/' );
  70.             /sbin/$cmd --units b -o $OPT >> $FILE 2>/dev/null;
  71.             echo >> $FILE;
  72.         done
  73.     else
  74.         local FILE=`make_temp_file 'NO-LVM-HERE'`;
  75.     fi
  76.  
  77.     echo $FILE;
  78. }
  79.  
  80. get_RAID_info(){
  81.     if [ -e $MDADM -a -x $MDADM ]; then
  82.         local FILE=`make_temp_file 'RAID'`;
  83.  
  84.         for drive in /dev/sd* /dev/hd*; do
  85.             [ -b $drive ] || continue;
  86.        
  87.             echo "---------- $drive ----------" >> $FILE;
  88.             $MDADM --examine $drive >> $FILE 2>/dev/null;
  89.             echo >> $FILE;
  90.         done
  91.         unset drive;
  92.     else
  93.         local FILE=`make_temp_file 'NO-RAID-HERE'`;
  94.     fi
  95.  
  96.     echo $FILE;
  97. }
  98.  
  99. get_partitions_info(){
  100.     local FILE=`make_temp_file 'PARTITIONS'`;
  101.  
  102.     for drive in /dev/sd[a-z] /dev/hd[a-z]; do
  103.         [ -b $drive ] || continue;
  104.  
  105.         echo "---------- FDISK: $drive ----------" >> $FILE;
  106.         $FDISK $drive >> $FILE 2>/dev/null;
  107.         echo >> $FILE;
  108.     done
  109.     unset drive;
  110.  
  111.     echo $FILE;
  112. }
  113.  
  114. get_MBRs(){
  115.     local DIR=`make_temp_file 'MBR'` && rm -f $DIR;
  116.     DIR="/tmp/`fname $DIR`";
  117.     mkdir $DIR;
  118.  
  119.     for drive in /dev/sd[a-z] /dev/hd[a-z]; do
  120.         [ -b $drive ] || continue;
  121.  
  122.         local FILE="$DIR/mbr-`fname ${drive}-$MBR_BYTES`";
  123.         dd if=$drive of=$FILE bs=$MBR_BYTES count=1 2>/dev/null;
  124.     done
  125.  
  126.     local FILE="$DIR.tar.gz";
  127.     tar czf $FILE $DIR 2>/dev/null && \
  128.         rm -f $DIR/* && \
  129.         rmdir $DIR;
  130.  
  131.     echo $FILE;
  132. }
  133.  
  134.  
  135. # ==================== Logic ====================
  136. # ----- Настройка -----
  137. case $1 in
  138.     -v|--verbose|--debug)
  139.         echo "-= Debug mode =-";
  140.         VERBOSE='-v';
  141.         ;;
  142.     *)
  143.         VERBOSE='';
  144.         ;;
  145. esac
  146.  
  147.  
  148. # ----- Сбор инфы -----
  149. debugInfo "Info collect...";
  150.  
  151. PART_INFO=`get_partitions_info`;
  152. RAID_INFO=`get_RAID_info`;
  153. LVM_INFO=`get_LVM_info`;
  154. MBRs=`get_MBRs`;
  155.  
  156. [ -x $MAIL_PRG ] || {
  157.     echo "There is no email program '$MAIL_PRG'" >&2;
  158.     exit 1;
  159. }
  160.  
  161.  
  162. # ----- Проверка сети -----
  163. debugInfo "Network check...";
  164.  
  165. TEST_COUNT=0;
  166. while [ $TEST_COUNT -lt $TEST_TRYS ]; do
  167.     if ( ping -c 3 $TEST_HOST 1>/dev/null 2>/dev/null ); then
  168.         debugInfo "Network is UP";
  169.         break;
  170.     else
  171.         debugInfo "Network is DOWN, sleeping for $TEST_DELAY";
  172.         sleep $TEST_DELAY;
  173.     fi
  174.     TEST_COUNT=$(( TEST_COUNT + 1 ));
  175. done
  176.  
  177.  
  178. # ----- Отправка -----
  179. debugInfo "Sending...";
  180.  
  181. MAIL_CMD="$MAIL_PRG $VERBOSE -f $FROM -t $TO -s $SERVER -xu $USER -xp $PASS -o message-charset=UTF-8 -u '$TITLE' -m 'Будь счастлив' -a $PART_INFO -a $RAID_INFO -a $LVM_INFO -a $MBRs";
  182.  
  183. debugInfo "$MAIL_CMD";
  184.  
  185. $MAIL_CMD 1>/dev/null && debugInfo "HDD info is mailed successfully" || {
  186.     echo "Error sending email" >&2;
  187.     exit 1;
  188. }
  189.  
  190.  
  191. # ----- Заметание следов -----
  192. debugInfo "Removing temporary data...";
  193.  
  194. rm -f $PART_INFO;  
  195. rm -f $RAID_INFO;  
  196. rm -f $LVM_INFO;   
  197. rm -f $MBRs;
  198.  
  199. debugInfo "Good luck!";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement