Statistiques
| Révision :

root / bin / create-volume @ 60

Historique | Voir | Annoter | Télécharger (4,23 ko)

1 1 kreverch
#!/bin/bash
2 39 ltaulell
# $Id$
3 51 ltaulell
# Copyright (C) 2013 Kevin Reverchon, Loïs Taulelle
4 51 ltaulell
# This file/program is part of gZFS free software
5 51 ltaulell
# See COPYING file for details
6 51 ltaulell
#
7 1 kreverch
8 49 kreverch
BINZFS="/sbin/zfs"
9 49 kreverch
BINZPOOL="/sbin/zpool"
10 49 kreverch
11 1 kreverch
function usage {
12 1 kreverch
echo "Syntax :" 1>&2
13 1 kreverch
echo "$0 [options]" 1>&2
14 1 kreverch
echo " -n : volume name" 1>&2
15 1 kreverch
echo " -p : pool name" 1>&2
16 52 ltaulell
echo " -b : block size. The size specified must be a power of two greater than or equal to 512 bytes and less than or equal to 128 Kbytes (8K or 128K recommended, see ZFS documentation for details)." 1>&2
17 1 kreverch
echo " -s : volume size. Permit unit : T, G, M"  1>&2
18 41 kreverch
echo " -o : set property list for a  zfs volume. Separate such property by a ','." 1>&2
19 52 ltaulell
echo "      Example : -o compression=off,snapdev=visible." 1>&2
20 52 ltaulell
echo "      see ZFS documentation for details." 1>&2
21 41 kreverch
echo " -i : interactive mode" 1>&2
22 1 kreverch
}
23 1 kreverch
24 1 kreverch
25 1 kreverch
function nointeractive {
26 1 kreverch
27 1 kreverch
if [[ -z $VOL_OPTION ]]
28 1 kreverch
then
29 49 kreverch
$BINZFS create -s -b $BLOCK_SIZE -V $SIZE $NAME_POOL/$NAME
30 1 kreverch
else
31 49 kreverch
$BINZFS create -s -b $BLOCK_SIZE -o $VOL_OPTION -V $SIZE $NAME_POOL/$NAME
32 1 kreverch
fi
33 1 kreverch
34 1 kreverch
}
35 1 kreverch
36 1 kreverch
37 1 kreverch
function interactive {
38 49 kreverch
$BINZFS list
39 46 kreverch
echo "*** Select the parent zpool : ***"
40 1 kreverch
41 1 kreverch
while read inputline
42 1 kreverch
do
43 1 kreverch
   if [ "$inputline" != "" ]
44 1 kreverch
   then
45 49 kreverch
      $BINZFS list |grep -i $inputline
46 1 kreverch
      if [ $? -eq 1 ]
47 1 kreverch
      then
48 46 kreverch
         echo "*** Select the parent zpool ***"
49 1 kreverch
      else
50 1 kreverch
51 40 ltaulell
         echo "*** Are you sure: $inputline ? (y/n) ***"
52 1 kreverch
         while read inputConfirm
53 1 kreverch
         do
54 1 kreverch
            if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
55 1 kreverch
            then
56 1 kreverch
              break
57 1 kreverch
            fi
58 40 ltaulell
            echo "*** Are you sure: $inputline ? (y/n) ***"
59 1 kreverch
          done
60 1 kreverch
61 1 kreverch
          if [ "$inputConfirm" = "y" ]
62 1 kreverch
          then
63 1 kreverch
             NAME_POOL=$inputline
64 40 ltaulell
             echo "volume name: "
65 1 kreverch
             while read inputVolume
66 1 kreverch
             do
67 1 kreverch
                if [ "$inputVolume" != "" ]
68 1 kreverch
                then
69 1 kreverch
                   test -d /dev/zvol
70 1 kreverch
                   if [ $? -eq 0 ]
71 1 kreverch
                   then
72 1 kreverch
                      ls -l /dev/zvol/$NAME_POOL/$inputVolume
73 1 kreverch
                      if [ $? -eq 0 ]
74 1 kreverch
                      then
75 38 kreverch
                         echo "volume name already exists"
76 1 kreverch
                         VOL_OK=1
77 1 kreverch
                      else
78 1 kreverch
                         VOL_OK=0
79 1 kreverch
                      fi
80 1 kreverch
                   else
81 1 kreverch
                      VOL_OK=0
82 1 kreverch
                   fi
83 1 kreverch
                   if [ $VOL_OK -eq 1 ]
84 1 kreverch
                   then
85 40 ltaulell
                      echo "volume name: "
86 1 kreverch
                   else
87 1 kreverch
                      NAME_VOL=$inputVolume
88 40 ltaulell
                      echo "volume size (Unit in T|G|M): "
89 1 kreverch
                      while read inputSize
90 1 kreverch
                      do
91 1 kreverch
                         if [ "$inputSize" != "" ]
92 1 kreverch
                         then
93 49 kreverch
                           $BINZFS create -s -b 128K -V $inputSize  $NAME_POOL/$inputVolume
94 1 kreverch
                           if [ $? -eq 0 ]
95 1 kreverch
                           then
96 38 kreverch
                              echo "*** ZFS volume creation [OK] ***"
97 49 kreverch
                              $BINZFS list
98 1 kreverch
                              break
99 1 kreverch
                           else
100 38 kreverch
                              echo "/!\\ ZFS volume creation [ERROR] /!\\"
101 1 kreverch
                           fi
102 1 kreverch
                        else
103 40 ltaulell
                           echo "volume size (Unit in T|G|M): "
104 1 kreverch
                        fi
105 1 kreverch
                      done
106 1 kreverch
                      break
107 1 kreverch
                    fi
108 1 kreverch
                else
109 40 ltaulell
                  echo "volume name: "
110 1 kreverch
                fi
111 1 kreverch
             done
112 1 kreverch
             break
113 1 kreverch
          fi
114 1 kreverch
          break
115 1 kreverch
      fi
116 1 kreverch
   else
117 46 kreverch
      echo "*** Select the parent zpool : ***"
118 1 kreverch
   fi
119 1 kreverch
done
120 1 kreverch
}
121 1 kreverch
122 1 kreverch
while getopts "in:p:b:s:o:h" OPTION
123 1 kreverch
do
124 1 kreverch
     case $OPTION in
125 1 kreverch
         h)
126 1 kreverch
             usage
127 1 kreverch
             exit 1
128 1 kreverch
             ;;
129 1 kreverch
         i)
130 1 kreverch
            interactive
131 1 kreverch
            exit 0
132 1 kreverch
            ;;
133 1 kreverch
         n)
134 1 kreverch
           NAME=$OPTARG
135 1 kreverch
           ;;
136 1 kreverch
         p)
137 1 kreverch
           NAME_POOL=$OPTARG
138 1 kreverch
           ;;
139 1 kreverch
         b)
140 1 kreverch
           BLOCK_SIZE=$OPTARG
141 1 kreverch
           ;;
142 1 kreverch
         s)
143 1 kreverch
           SIZE=$OPTARG
144 1 kreverch
           ;;
145 1 kreverch
         o)
146 1 kreverch
           VOL_OPTION=$OPTARG
147 1 kreverch
           VOL_OPTION=$(echo $VOL_OPTION|sed -e 's/,/ -o /g')
148 1 kreverch
           echo "$VOL_OPTION"
149 1 kreverch
           ;;
150 1 kreverch
         *)
151 1 kreverch
          usage
152 1 kreverch
          exit 1
153 1 kreverch
          ;;
154 1 kreverch
    esac
155 1 kreverch
done
156 1 kreverch
157 1 kreverch
158 1 kreverch
if [[ -z $NAME ]] || [[ -z $NAME_POOL ]] || [[ -z $BLOCK_SIZE ]] || [[ -z $SIZE ]]
159 1 kreverch
then
160 1 kreverch
     usage
161 1 kreverch
     exit 1
162 1 kreverch
fi
163 1 kreverch
nointeractive