139734e7eSDavid du Colombier#!/bin/rc 239734e7eSDavid du Colombier 339734e7eSDavid du Colombier# desc: initialize disks for a venti server 4a22b0629SDavid du Colombier# prereq: mountdist 539734e7eSDavid du Colombier 639734e7eSDavid du Colombierswitch($1){ 739734e7eSDavid du Colombiercase checkready checkdone 839734e7eSDavid du Colombier if(! ~ $fstype fossil+venti){ 939734e7eSDavid du Colombier fmtventi=notdone 1039734e7eSDavid du Colombier export fmtventi 1139734e7eSDavid du Colombier exit 1239734e7eSDavid du Colombier } 13*3cdeec5cSDavid du Colombier if(! test -e /bin/venti/fmtarenas || ! test -e /bin/venti/fmtisect || ! test -e /bin/venti/fmtindex || ! test -e /bin/venti/fmtbloom){ 14a22b0629SDavid du Colombier bind -a /n/dist/386/bin/venti /bin/venti 15*3cdeec5cSDavid du Colombier if(! test -e /bin/venti/fmtarenas || ! test -e /bin/venti/fmtisect || ! test -e /bin/venti/fmtindex || ! test -e /bin/venti/fmtbloom){ 16a22b0629SDavid du Colombier fmtventi=notdone 17a22b0629SDavid du Colombier export fmtventi 18a22b0629SDavid du Colombier exit 19a22b0629SDavid du Colombier } 20a22b0629SDavid du Colombier } 21a22b0629SDavid du Colombier ff=`{ls /dev/sd*/arenas* /dev/fs/arenas* >[2]/dev/null} 22a22b0629SDavid du Colombier if(~ $#ff 0){ 23a22b0629SDavid du Colombier fmtventi=notdone 24a22b0629SDavid du Colombier export fmtventi 25a22b0629SDavid du Colombier exit 26a22b0629SDavid du Colombier } 2739734e7eSDavid du Colombier gg=() 2839734e7eSDavid du Colombier for(f in $ff) 2939734e7eSDavid du Colombier if(isventi $f) 3039734e7eSDavid du Colombier gg=($gg $f) 3139734e7eSDavid du Colombier if(~ $#gg 0){ 32a22b0629SDavid du Colombier fmtventi=ready 3339734e7eSDavid du Colombier export fmtventi 3439734e7eSDavid du Colombier exit 3539734e7eSDavid du Colombier } 36a22b0629SDavid du Colombier 37a22b0629SDavid du Colombier ventiarena=$gg(1) 38a22b0629SDavid du Colombier export ventiarena 39a22b0629SDavid du Colombier 4039734e7eSDavid du Colombier fmtventi=done 4139734e7eSDavid du Colombier export fmtventi 4239734e7eSDavid du Colombier exit 4339734e7eSDavid du Colombier 4439734e7eSDavid du Colombiercase go 45a22b0629SDavid du Colombier ff=`{ls /dev/sd*/arenas* /dev/fs/arenas* >[2]/dev/null} 4639734e7eSDavid du Colombier if(~ $#ff 0){ 4739734e7eSDavid du Colombier echo 'You need to create a partition or partitions to hold the Venti arenas.' 48a22b0629SDavid du Colombier echo 'The arena partition names must begin with "arenas".' 4939734e7eSDavid du Colombier echo 5039734e7eSDavid du Colombier fmtventi=notdone 5139734e7eSDavid du Colombier export fmtventi 5239734e7eSDavid du Colombier exit 5339734e7eSDavid du Colombier } 5439734e7eSDavid du Colombier default=(-d $"ff) 5539734e7eSDavid du Colombier if(! ~ $#ventiarena 0){ 5639734e7eSDavid du Colombier default=(-d $"ventiarena) 5739734e7eSDavid du Colombier } 58f8d0ebfeSDavid du Colombier echo You have the following Venti arena partitions. 5939734e7eSDavid du Colombier ls -l $ff 6039734e7eSDavid du Colombier echo 6139734e7eSDavid du Colombier 6239734e7eSDavid du Colombier prompt $default 'Venti arena partitions to use' 6339734e7eSDavid du Colombier aa=`{echo $rd} 6439734e7eSDavid du Colombier bad=no 6539734e7eSDavid du Colombier for(a in $aa){ 6639734e7eSDavid du Colombier if(! ~ $a $ff){ 6739734e7eSDavid du Colombier echo 'Bad venti arena partition' $a 6839734e7eSDavid du Colombier fmtventi=notdone 6939734e7eSDavid du Colombier export fmtventi 7039734e7eSDavid du Colombier exit 7139734e7eSDavid du Colombier } 7239734e7eSDavid du Colombier } 7339734e7eSDavid du Colombier ventiarena=$aa 7439734e7eSDavid du Colombier export ventiarena 7539734e7eSDavid du Colombier 76a22b0629SDavid du Colombier gg=`{ls /dev/sd*/isect* /dev/fs/isect* >[2]/dev/null} 7739734e7eSDavid du Colombier if(~ $#gg 0){ 7839734e7eSDavid du Colombier echo 'You need to create a partition or partitions to hold the Venti indices.' 79a22b0629SDavid du Colombier echo 'The index partition names must begin with "isect".' 8039734e7eSDavid du Colombier echo 8139734e7eSDavid du Colombier fmtventi=notdone 8239734e7eSDavid du Colombier export fmtventi 8339734e7eSDavid du Colombier exit 8439734e7eSDavid du Colombier } 8539734e7eSDavid du Colombier default=(-d $"gg) 8639734e7eSDavid du Colombier if(! ~ $#ventiindex 0){ 8739734e7eSDavid du Colombier default=(-d $"ventiindex) 8839734e7eSDavid du Colombier } 8939734e7eSDavid du Colombier 9039734e7eSDavid du Colombier echo You have the following Venti index partitions. 9139734e7eSDavid du Colombier ls -l $gg 9239734e7eSDavid du Colombier echo 9339734e7eSDavid du Colombier 94f8d0ebfeSDavid du Colombier prompt $default 'Venti index partitions to use' 9539734e7eSDavid du Colombier aa=`{echo $rd} 9639734e7eSDavid du Colombier bad=no 9739734e7eSDavid du Colombier for(a in $aa){ 9839734e7eSDavid du Colombier if(! ~ $a $gg){ 9939734e7eSDavid du Colombier echo 'Bad venti index partition' $a 10039734e7eSDavid du Colombier fmtventi=notdone 10139734e7eSDavid du Colombier export fmtventi 10239734e7eSDavid du Colombier exit 10339734e7eSDavid du Colombier } 10439734e7eSDavid du Colombier } 10539734e7eSDavid du Colombier ventiindex=$aa 10639734e7eSDavid du Colombier export ventiindex 10739734e7eSDavid du Colombier 108*3cdeec5cSDavid du Colombier hh=`{ls /dev/sd*/bloom* /dev/fs/bloom* >[2]/dev/null} 109*3cdeec5cSDavid du Colombier if(~ $#hh 0){ 110*3cdeec5cSDavid du Colombier echo 'You need to create a partition or partitions to hold the Venti bloom.' 111*3cdeec5cSDavid du Colombier echo 'The bloom partition names must begin with "bloom".' 112*3cdeec5cSDavid du Colombier echo 113*3cdeec5cSDavid du Colombier fmtventi=notdone 114*3cdeec5cSDavid du Colombier export fmtventi 115*3cdeec5cSDavid du Colombier exit 116*3cdeec5cSDavid du Colombier } 117*3cdeec5cSDavid du Colombier default=(-d $"hh) 118*3cdeec5cSDavid du Colombier if(! ~ $#ventibloom 0){ 119*3cdeec5cSDavid du Colombier default=(-d $"ventibloom) 120*3cdeec5cSDavid du Colombier } 121*3cdeec5cSDavid du Colombier 122*3cdeec5cSDavid du Colombier echo You have the following Venti bloom partitions. 123*3cdeec5cSDavid du Colombier ls -l $hh 124*3cdeec5cSDavid du Colombier echo 125*3cdeec5cSDavid du Colombier 126*3cdeec5cSDavid du Colombier prompt $default 'Venti bloom partitions to use' 127*3cdeec5cSDavid du Colombier aa=`{echo $rd} 128*3cdeec5cSDavid du Colombier bad=no 129*3cdeec5cSDavid du Colombier for(a in $aa){ 130*3cdeec5cSDavid du Colombier if(! ~ $a $hh){ 131*3cdeec5cSDavid du Colombier echo 'Bad venti bloom partition' $a 132*3cdeec5cSDavid du Colombier fmtventi=notdone 133*3cdeec5cSDavid du Colombier export fmtventi 134*3cdeec5cSDavid du Colombier exit 135*3cdeec5cSDavid du Colombier } 136*3cdeec5cSDavid du Colombier } 137*3cdeec5cSDavid du Colombier ventibloom=$aa 138*3cdeec5cSDavid du Colombier export ventibloom 139*3cdeec5cSDavid du Colombier 14039734e7eSDavid du Colombier n=-1 14139734e7eSDavid du Colombier fmta=() 14239734e7eSDavid du Colombier for(a in $ventiarena){ 14339734e7eSDavid du Colombier do=yes 14439734e7eSDavid du Colombier n=`{hoc -e 1+$n} 14539734e7eSDavid du Colombier if(isventiarenas $a){ 14639734e7eSDavid du Colombier echo File $a is already formatted as a Venti arenas partition. 14739734e7eSDavid du Colombier prompt -d no 'Reformat '$a yes no 14839734e7eSDavid du Colombier do=$rd 14939734e7eSDavid du Colombier } 15039734e7eSDavid du Colombier if(~ $do yes) 15139734e7eSDavid du Colombier fmta=($fmta arenas$n:$a) 15239734e7eSDavid du Colombier } 15339734e7eSDavid du Colombier 15439734e7eSDavid du Colombier n=-1 15539734e7eSDavid du Colombier fmti=() 15639734e7eSDavid du Colombier for(a in $ventiindex){ 15739734e7eSDavid du Colombier do=yes 15839734e7eSDavid du Colombier n=`{hoc -e 1+$n} 15939734e7eSDavid du Colombier if(isventiisect $a){ 16039734e7eSDavid du Colombier echo File $a is already formatted as a Venti index section. 16139734e7eSDavid du Colombier prompt -d no 'Reformat '$a yes no 16239734e7eSDavid du Colombier do=$rd 16339734e7eSDavid du Colombier } 16439734e7eSDavid du Colombier if(~ $do yes) 16539734e7eSDavid du Colombier fmti=($fmti isect$n:$a) 16639734e7eSDavid du Colombier } 16739734e7eSDavid du Colombier 168*3cdeec5cSDavid du Colombier n=-1 169*3cdeec5cSDavid du Colombier fmtb=() 170*3cdeec5cSDavid du Colombier for(a in $ventibloom){ 171*3cdeec5cSDavid du Colombier do=yes 172*3cdeec5cSDavid du Colombier n=`{hoc -e 1+$n} 173*3cdeec5cSDavid du Colombier if(isventibloom $a){ 174*3cdeec5cSDavid du Colombier echo File $a is already formatted as a Venti bloom section. 175*3cdeec5cSDavid du Colombier prompt -d no 'Reformat '$a yes no 176*3cdeec5cSDavid du Colombier do=$rd 177*3cdeec5cSDavid du Colombier } 178*3cdeec5cSDavid du Colombier if(~ $do yes) 179*3cdeec5cSDavid du Colombier fmtb=($fmtb bloom$n:$a) 180*3cdeec5cSDavid du Colombier } 181*3cdeec5cSDavid du Colombier 18239734e7eSDavid du Colombier echo Formatting Venti arenas and indices (this takes a while). 18339734e7eSDavid du Colombier # do each disk in parallel 18439734e7eSDavid du Colombier echo good >/tmp/fmt 18539734e7eSDavid du Colombier dd=() 186*3cdeec5cSDavid du Colombier for(a in $fmta $fmti $fmtb){ 18739734e7eSDavid du Colombier d=`{echo $a | sed 's!.*:(/.*/).*!\1!'} 18839734e7eSDavid du Colombier if(! ~ $d $dd) 189a22b0629SDavid du Colombier dd=($dd $d) 19039734e7eSDavid du Colombier } 19139734e7eSDavid du Colombier for(d in $dd){ 19239734e7eSDavid du Colombier { 19339734e7eSDavid du Colombier for(a in $fmta){ 19439734e7eSDavid du Colombier i=`{echo $a | sed 's!(.*):(/.*/)(.*)!\1 \2 \2\3!'} 19539734e7eSDavid du Colombier if(~ $i(2) $d){ 19639734e7eSDavid du Colombier echo $i(3) ... 19739734e7eSDavid du Colombier venti/fmtarenas $i(1) $i(3) || echo bad >/tmp/fmt 19839734e7eSDavid du Colombier echo done with $i(3) 19939734e7eSDavid du Colombier } 20039734e7eSDavid du Colombier } 20139734e7eSDavid du Colombier for(a in $fmti){ 20239734e7eSDavid du Colombier i=`{echo $a | sed 's!(.*):(/.*/)(.*)!\1 \2 \2\3!'} 20339734e7eSDavid du Colombier if(~ $i(2) $d){ 20439734e7eSDavid du Colombier echo $i(3) ... 205a22b0629SDavid du Colombier venti/fmtisect $i(1) $i(3) || echo bad >/tmp/fmt 20639734e7eSDavid du Colombier echo done with $i(3) 20739734e7eSDavid du Colombier } 20839734e7eSDavid du Colombier } 209*3cdeec5cSDavid du Colombier for(a in $fmtb){ 210*3cdeec5cSDavid du Colombier i=`{echo $a | sed 's!(.*):(/.*/)(.*)!\1 \2 \2\3!'} 211*3cdeec5cSDavid du Colombier pgsize=`{grep pagesize /dev/swap | sed 's/^([0-9]+) .*$/\1/'} 212*3cdeec5cSDavid du Colombier userused=`{grep user /dev/swap | sed 's/^([0-9]+)\/([0-9]+) .*$/\1/'} 213*3cdeec5cSDavid du Colombier userpgs=`{grep user /dev/swap | sed 's/^([0-9]+)\/([0-9]+) .*$/\2/'} 214*3cdeec5cSDavid du Colombier userfree=`{hoc -e '('$userpgs-$userused')'*$pgsize} 215*3cdeec5cSDavid du Colombier bloomsize=`{hoc -e 2'^(int(log('$userfree/1024/1024*20/100*1/3')/log(2)))'} 216*3cdeec5cSDavid du Colombier partsize=`{ls -l $i(3) | awk '{print int($6/1024/1024)}' | hoc} 217*3cdeec5cSDavid du Colombier if(test $bloomsize -gt $partsize) 218*3cdeec5cSDavid du Colombier bloomsize=$partsize 219*3cdeec5cSDavid du Colombier if(test $bloomsize -lt 1) 220*3cdeec5cSDavid du Colombier bloomsize=1 221*3cdeec5cSDavid du Colombier if(~ $i(2) $d){ 222*3cdeec5cSDavid du Colombier echo $i(3) ... 223*3cdeec5cSDavid du Colombier venti/fmtbloom -s $bloomsize^m $i(3) || echo bad >/tmp/fmt 224*3cdeec5cSDavid du Colombier echo done with $i(3) 225*3cdeec5cSDavid du Colombier } 226*3cdeec5cSDavid du Colombier } 22739734e7eSDavid du Colombier } & 22839734e7eSDavid du Colombier } 22939734e7eSDavid du Colombier wait 23039734e7eSDavid du Colombier if(~ bad `{cat /tmp/fmt}){ 23139734e7eSDavid du Colombier echo There were errors formatting the indices and arenas. 23239734e7eSDavid du Colombier fmtventi=ready 23339734e7eSDavid du Colombier export fmtventi 23439734e7eSDavid du Colombier exit errors 23539734e7eSDavid du Colombier } 23639734e7eSDavid du Colombier 23739734e7eSDavid du Colombier echo Done formatting Venti arenas and indices. 23839734e7eSDavid du Colombier 23939734e7eSDavid du Colombier v=$ventiarena(1) 24039734e7eSDavid du Colombier echo Storing Venti config on $v... 24139734e7eSDavid du Colombier { 24239734e7eSDavid du Colombier echo index main 24339734e7eSDavid du Colombier for(i in $ventiindex) 24439734e7eSDavid du Colombier echo isect $i 245*3cdeec5cSDavid du Colombier for(b in $ventibloom) 246*3cdeec5cSDavid du Colombier echo bloom $b 24739734e7eSDavid du Colombier for(a in $ventiarena) 248a22b0629SDavid du Colombier echo arenas $a 24939734e7eSDavid du Colombier } | venti/conf -w $v 25039734e7eSDavid du Colombier 25139734e7eSDavid du Colombier echo Initializing index... 252a22b0629SDavid du Colombier venti/fmtindex $v 25339734e7eSDavid du Colombier 25439734e7eSDavid du Colombier echo Done with Venti! 25539734e7eSDavid du Colombier} 25639734e7eSDavid du Colombier 257