#!/bin/rc # desc: initialize disks for a venti server # prereq: choosefs switch($1){ case checkready checkdone if(! ~ $fstype fossil+venti){ fmtventi=notdone export fmtventi exit } ff=`{ls /dev/sd*/v.arenas* /dev/fs/v.arenas* >[2]/dev/null} gg=() for(f in $ff) if(isventi $f) gg=($gg $f) if(~ $#gg 0){ fmtventi=notdone export fmtventi exit } fmtventi=done export fmtventi exit case go ff=`{ls /dev/sd*/v.arenas* /dev/fs/v.arenas* >[2]/dev/null} if(~ $#ff 0){ echo 'You need to create a partition or partitions to hold the Venti arenas.' echo 'The arena partition names must begin with "v.arenas".' echo fmtventi=notdone export fmtventi exit } default=(-d $"ff) if(! ~ $#ventiarena 0){ default=(-d $"ventiarena) } echo You have the following Venti index partitions. ls -l $ff echo prompt $default 'Venti arena partitions to use' aa=`{echo $rd} bad=no for(a in $aa){ if(! ~ $a $ff){ echo 'Bad venti arena partition' $a fmtventi=notdone export fmtventi exit } } ventiarena=$aa export ventiarena gg=`{ls /dev/sd*/v.index* /dev/fs/v.index* >[2]/dev/null} if(~ $#gg 0){ echo 'You need to create a partition or partitions to hold the Venti indices.' echo 'The index partition names must begin with "v.index".' echo fmtventi=notdone export fmtventi exit } default=(-d $"gg) if(! ~ $#ventiindex 0){ default=(-d $"ventiindex) } echo You have the following Venti index partitions. ls -l $gg echo prompt $default 'Venti arena partitions to use' aa=`{echo $rd} bad=no for(a in $aa){ if(! ~ $a $gg){ echo 'Bad venti index partition' $a fmtventi=notdone export fmtventi exit } } ventiindex=$aa export ventiindex n=-1 fmta=() for(a in $ventiarena){ do=yes n=`{hoc -e 1+$n} if(isventiarenas $a){ echo File $a is already formatted as a Venti arenas partition. prompt -d no 'Reformat '$a yes no do=$rd } if(~ $do yes) fmta=($fmta arenas$n:$a) } n=-1 fmti=() for(a in $ventiindex){ do=yes n=`{hoc -e 1+$n} if(isventiisect $a){ echo File $a is already formatted as a Venti index section. prompt -d no 'Reformat '$a yes no do=$rd } if(~ $do yes) fmti=($fmti isect$n:$a) } echo Formatting Venti arenas and indices (this takes a while). # do each disk in parallel echo good >/tmp/fmt dd=() for(a in $fmta $fmti){ d=`{echo $a | sed 's!.*:(/.*/).*!\1!'} if(! ~ $d $dd) $dd=($dd $d) } for(d in $dd){ { for(a in $fmta){ i=`{echo $a | sed 's!(.*):(/.*/)(.*)!\1 \2 \2\3!'} if(~ $i(2) $d){ echo $i(3) ... venti/fmtarenas $i(1) $i(3) || echo bad >/tmp/fmt echo done with $i(3) } } for(a in $fmti){ i=`{echo $a | sed 's!(.*):(/.*/)(.*)!\1 \2 \2\3!'} if(~ $i(2) $d){ echo $i(3) ... venti/isect $i(1) $i(3) || echo bad >/tmp/fmt echo done with $i(3) } } } & } wait if(~ bad `{cat /tmp/fmt}){ echo There were errors formatting the indices and arenas. fmtventi=ready export fmtventi exit errors } echo Done formatting Venti arenas and indices. v=$ventiarena(1) echo Storing Venti config on $v... { echo index main for(i in $ventiindex) echo isect $i for(a in $ventiarena) echo arenas $i } | venti/conf -w $v echo Initializing index... venti/fmtindex -c $v echo Done with Venti! }