74 PAT=${want:1}
75 if [[ -n $(echo ${diskname[$disk]} | egrep -e "$PAT") ]]; then
76 echo $disk
77 fi
78 ;;
79 esac
80 done
81 done
82 }
83 ListDisksAnd() {
84 EXPECT=$(( $(echo "$1" | sed -e 's/[^,]//g;' | wc -c) + 0))
85 for part in $(echo "$1" | sed -e 's/,/ /g;'); do
86 ListDisks $part
87 done | sort | uniq -c | awk '{if($1=='$EXPECT'){print $2;}}'
88 }
89 ListDisksUnique(){
90 for term in $*; do
91 ListDisksAnd $term
92 done | sort | uniq | xargs
93 }
94 SMIboot() {
95 DISK=$1
96 RDSK=/dev/rdsk/${DISK}p0
97 S2=/dev/rdsk/${DISK}s2
98 fdisk -B ${RDSK}
99 disks -C
100 prtvtoc -h ${RDSK} | awk '/./{p=0;} {if($1=="2"){size=$5;p=1;} if($1=="8"){start=$5;p=1;} if(p==1){print $1" "$2" "$3" "$4" "$5;}} END{size=size-start; print "0 2 00 "start" "size;}' | sort -n | fmthard -s /dev/stdin $S2
101 disks -C
102 }
103
104 BuildRpool() {
105 ztype=""
106 ztgt=""
107 disks=`ListDisksUnique $*`
108 log "Disks being used for rpool: $disks"
109 if [[ -z "$disks" ]]; then
110 bomb "No matching disks found to build rpool"
111 fi
112 for i in $disks
113 do
114 SMIboot $i
115 if [[ -n "$ztgt" ]]; then
116 ztype="mirror"
117 fi
118 ztgt="$ztgt ${i}s0"
119 INSTALL_GRUB_TGT="$INSTALL_GRUB_TGT /dev/rsdk/${i}s2"
120 done
121 log "zpool destroy rpool (just in case we've been run twice)"
122 zpool destroy rpool 2> /dev/null
123 log "Creating rpool with: zpool create -f rpool $ztype $ztgt"
124 zpool create -f rpool $ztype $ztgt || bomb "Failed to create rpool"
125 BuildBE
126 }
127 GetTargetVolSize() {
128 # Aim for 25% of physical memory (minimum 1G)
129 # prtconf always reports in megabytes
130 local mem=`/usr/sbin/prtconf | /bin/awk '/^Memory size/ { print $3 }'`
131 if [[ $mem -lt 4096 ]]; then
132 local vsize=1
133 else
134 local quart=`echo "scale=1;$mem/4096" | /bin/bc`
135 local vsize=`printf %0.f $quart`
136 fi
137 echo $vsize
138 }
139 GetRpoolFree() {
140 local zfsavail=`/sbin/zfs list -H -o avail rpool`
141 if [[ ${zfsavail:(-1)} = "G" ]]; then
142 local avail=`printf %0.f ${zfsavail::-1}`
143 elif [[ ${zfsavail:(-1)} = "T" ]]; then
|
74 PAT=${want:1}
75 if [[ -n $(echo ${diskname[$disk]} | egrep -e "$PAT") ]]; then
76 echo $disk
77 fi
78 ;;
79 esac
80 done
81 done
82 }
83 ListDisksAnd() {
84 EXPECT=$(( $(echo "$1" | sed -e 's/[^,]//g;' | wc -c) + 0))
85 for part in $(echo "$1" | sed -e 's/,/ /g;'); do
86 ListDisks $part
87 done | sort | uniq -c | awk '{if($1=='$EXPECT'){print $2;}}'
88 }
89 ListDisksUnique(){
90 for term in $*; do
91 ListDisksAnd $term
92 done | sort | uniq | xargs
93 }
94
95 BuildRpool() {
96 ztype=""
97 ztgt=""
98 disks=`ListDisksUnique $*`
99 log "Disks being used for rpool: $disks"
100 if [[ -z "$disks" ]]; then
101 bomb "No matching disks found to build rpool"
102 fi
103 rm -f /tmp/kayak-disk-list
104 for i in $disks
105 do
106 if [[ -n "$ztgt" ]]; then
107 ztype="mirror"
108 fi
109 ztgt="$ztgt ${i}"
110 # Keep track of disks for later...
111 echo ${i} >> /tmp/kayak-disk-list
112 done
113 log "zpool destroy rpool (just in case we've been run twice)"
114 zpool destroy rpool 2> /dev/null
115 log "Creating rpool with: zpool create -f rpool $ztype $ztgt"
116 # Just let "zpool create" do its thing. We want GPT disks now.
117 zpool create -f rpool $ztype $ztgt || bomb "Failed to create rpool"
118 BuildBE
119 }
120 GetTargetVolSize() {
121 # Aim for 25% of physical memory (minimum 1G)
122 # prtconf always reports in megabytes
123 local mem=`/usr/sbin/prtconf | /bin/awk '/^Memory size/ { print $3 }'`
124 if [[ $mem -lt 4096 ]]; then
125 local vsize=1
126 else
127 local quart=`echo "scale=1;$mem/4096" | /bin/bc`
128 local vsize=`printf %0.f $quart`
129 fi
130 echo $vsize
131 }
132 GetRpoolFree() {
133 local zfsavail=`/sbin/zfs list -H -o avail rpool`
134 if [[ ${zfsavail:(-1)} = "G" ]]; then
135 local avail=`printf %0.f ${zfsavail::-1}`
136 elif [[ ${zfsavail:(-1)} = "T" ]]; then
|