Statistiques
| Révision :

root / bin / create-volume @ 41

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

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