191 lines
3.6 KiB
Plaintext
191 lines
3.6 KiB
Plaintext
|
#!/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!
|
||
|
}
|
||
|
|