Statistiques
| Révision :

root / bin / create-volume @ 49

Historique | Voir | Annoter | Télécharger (3,99 ko)

1
#!/bin/bash
2
# $Id: create-volume 49 2013-10-10 08:59:11Z kreverch $
3

    
4
BINZFS="/sbin/zfs"
5
BINZPOOL="/sbin/zpool"
6

    
7
function usage {
8
echo "Syntax :" 1>&2
9
echo "$0 [options]" 1>&2
10
echo " -n : volume name" 1>&2
11
echo " -p : pool name" 1>&2
12
echo " -b : block size. Permit value : 32K, 64K, 128K (recommanded)" 1>&2
13
echo " -s : volume size. Permit unit : T, G, M"  1>&2
14
echo " -o : set property list for a  zfs volume. Separate such property by a ','." 1>&2
15
echo "      Example : -o compression=off,snapdev=visble." 1>&2
16
echo "      Read the man zfs to get the list of the valid properties" 1>&2
17
echo " -i : interactive mode" 1>&2
18
}
19

    
20

    
21
function nointeractive {
22

    
23
if [[ -z $VOL_OPTION ]]
24
then
25
$BINZFS create -s -b $BLOCK_SIZE -V $SIZE $NAME_POOL/$NAME
26
else
27
$BINZFS create -s -b $BLOCK_SIZE -o $VOL_OPTION -V $SIZE $NAME_POOL/$NAME
28
fi
29

    
30
}
31

    
32

    
33
function interactive {
34
$BINZFS list
35
echo "*** Select the parent zpool : ***"
36

    
37
while read inputline
38
do
39
   if [ "$inputline" != "" ]
40
   then
41
      $BINZFS list |grep -i $inputline
42
      if [ $? -eq 1 ]
43
      then
44
         echo "*** Select the parent zpool ***"
45
      else
46

    
47
         echo "*** Are you sure: $inputline ? (y/n) ***"
48
         while read inputConfirm
49
         do
50
            if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
51
            then
52
              break
53
            fi
54
            echo "*** Are you sure: $inputline ? (y/n) ***"
55
          done
56

    
57
          if [ "$inputConfirm" = "y" ]
58
          then
59
             NAME_POOL=$inputline
60
             echo "volume name: "
61
             while read inputVolume
62
             do
63
                if [ "$inputVolume" != "" ]
64
                then
65
                   test -d /dev/zvol
66
                   if [ $? -eq 0 ]
67
                   then
68
                      ls -l /dev/zvol/$NAME_POOL/$inputVolume
69
                      if [ $? -eq 0 ]
70
                      then
71
                         echo "volume name already exists"
72
                         VOL_OK=1   
73
                      else
74
                         VOL_OK=0
75
                      fi
76
                   else
77
                      VOL_OK=0 
78
                   fi
79
                   if [ $VOL_OK -eq 1 ]
80
                   then
81
                      echo "volume name: "
82
                   else
83
                      NAME_VOL=$inputVolume
84
                      echo "volume size (Unit in T|G|M): "
85
                      while read inputSize
86
                      do
87
                         if [ "$inputSize" != "" ]
88
                         then
89
                           $BINZFS create -s -b 128K -V $inputSize  $NAME_POOL/$inputVolume
90
                           if [ $? -eq 0 ]
91
                           then
92
                              echo "*** ZFS volume creation [OK] ***" 
93
                              $BINZFS list
94
                              break
95
                           else
96
                              echo "/!\\ ZFS volume creation [ERROR] /!\\"
97
                           fi
98
                        else
99
                           echo "volume size (Unit in T|G|M): "   
100
                        fi
101
                      done
102
                      break
103
                    fi
104
                else
105
                  echo "volume name: "
106
                fi
107
             done
108
             break
109
          fi
110
          break
111
      fi
112
   else
113
      echo "*** Select the parent zpool : ***"
114
   fi
115
done
116
}
117

    
118
while getopts "in:p:b:s:o:h" OPTION
119
do
120
     case $OPTION in
121
         h)
122
             usage
123
             exit 1
124
             ;;
125
         i)
126
            interactive
127
            exit 0
128
            ;;
129
         n)
130
           NAME=$OPTARG
131
           ;;
132
         p)
133
           NAME_POOL=$OPTARG
134
           ;;
135
         b)
136
           BLOCK_SIZE=$OPTARG
137
           ;;
138
         s)
139
           SIZE=$OPTARG
140
           ;;
141
         o)
142
           VOL_OPTION=$OPTARG
143
           VOL_OPTION=$(echo $VOL_OPTION|sed -e 's/,/ -o /g')
144
           echo "$VOL_OPTION"
145
           ;;
146
         *)
147
          usage
148
          exit 1
149
          ;;
150
    esac
151
done
152

    
153

    
154
if [[ -z $NAME ]] || [[ -z $NAME_POOL ]] || [[ -z $BLOCK_SIZE ]] || [[ -z $SIZE ]]
155
then
156
     usage
157
     exit 1
158
fi
159
nointeractive