123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- #!/bin/rc
- # desc: initialize disks for a venti server
- # prereq: mountdist
- switch($1){
- case checkready checkdone
- if(! ~ $fstype fossil+venti){
- fmtventi=notdone
- export fmtventi
- exit
- }
- if(! test -e /bin/venti/fmtarenas || ! test -e /bin/venti/fmtisect || ! test -e /bin/venti/fmtindex){
- bind -a /n/dist/386/bin/venti /bin/venti
- if(! test -e /bin/venti/fmtarenas || ! test -e /bin/venti/fmtisect || ! test -e /bin/venti/fmtindex){
- fmtventi=notdone
- export fmtventi
- exit
- }
- }
- ff=`{ls /dev/sd*/arenas* /dev/fs/arenas* >[2]/dev/null}
- if(~ $#ff 0){
- fmtventi=notdone
- export fmtventi
- exit
- }
- gg=()
- for(f in $ff)
- if(isventi $f)
- gg=($gg $f)
- if(~ $#gg 0){
- fmtventi=ready
- export fmtventi
- exit
- }
- ventiarena=$gg(1)
- export ventiarena
- fmtventi=done
- export fmtventi
- exit
- case go
- ff=`{ls /dev/sd*/arenas* /dev/fs/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 "arenas".'
- echo
- fmtventi=notdone
- export fmtventi
- exit
- }
- default=(-d $"ff)
- if(! ~ $#ventiarena 0){
- default=(-d $"ventiarena)
- }
- echo You have the following Venti arena 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*/isect* /dev/fs/isect* >[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 "isect".'
- 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 index 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/fmtisect $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 $a
- } | venti/conf -w $v
- echo Initializing index...
- venti/fmtindex $v
- echo Done with Venti!
- }
|