xref: /plan9/sys/lib/dist/pc/inst/fmtventi (revision f8d0ebfececfcaffbe7b603aec1dcaf2e4f18052)
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	}
13a22b0629SDavid du Colombier	if(! test -e /bin/venti/fmtarenas || ! test -e /bin/venti/fmtisect || ! test -e /bin/venti/fmtindex){
14a22b0629SDavid du Colombier		bind -a /n/dist/386/bin/venti /bin/venti
15a22b0629SDavid du Colombier		if(! test -e /bin/venti/fmtarenas || ! test -e /bin/venti/fmtisect || ! test -e /bin/venti/fmtindex){
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	}
58*f8d0ebfeSDavid 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
94*f8d0ebfeSDavid 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
10839734e7eSDavid du Colombier	n=-1
10939734e7eSDavid du Colombier	fmta=()
11039734e7eSDavid du Colombier	for(a in $ventiarena){
11139734e7eSDavid du Colombier		do=yes
11239734e7eSDavid du Colombier		n=`{hoc -e 1+$n}
11339734e7eSDavid du Colombier		if(isventiarenas $a){
11439734e7eSDavid du Colombier			echo File $a is already formatted as a Venti arenas partition.
11539734e7eSDavid du Colombier			prompt -d no 'Reformat '$a yes no
11639734e7eSDavid du Colombier			do=$rd
11739734e7eSDavid du Colombier		}
11839734e7eSDavid du Colombier		if(~ $do yes)
11939734e7eSDavid du Colombier			fmta=($fmta arenas$n:$a)
12039734e7eSDavid du Colombier	}
12139734e7eSDavid du Colombier
12239734e7eSDavid du Colombier	n=-1
12339734e7eSDavid du Colombier	fmti=()
12439734e7eSDavid du Colombier	for(a in $ventiindex){
12539734e7eSDavid du Colombier		do=yes
12639734e7eSDavid du Colombier		n=`{hoc -e 1+$n}
12739734e7eSDavid du Colombier		if(isventiisect $a){
12839734e7eSDavid du Colombier			echo File $a is already formatted as a Venti index section.
12939734e7eSDavid du Colombier			prompt -d no 'Reformat '$a yes no
13039734e7eSDavid du Colombier			do=$rd
13139734e7eSDavid du Colombier		}
13239734e7eSDavid du Colombier		if(~ $do yes)
13339734e7eSDavid du Colombier			fmti=($fmti isect$n:$a)
13439734e7eSDavid du Colombier	}
13539734e7eSDavid du Colombier
13639734e7eSDavid du Colombier	echo Formatting Venti arenas and indices (this takes a while).
13739734e7eSDavid du Colombier	# do each disk in parallel
13839734e7eSDavid du Colombier	echo good >/tmp/fmt
13939734e7eSDavid du Colombier	dd=()
14039734e7eSDavid du Colombier	for(a in $fmta $fmti){
14139734e7eSDavid du Colombier		d=`{echo $a | sed 's!.*:(/.*/).*!\1!'}
14239734e7eSDavid du Colombier		if(! ~ $d $dd)
143a22b0629SDavid du Colombier			dd=($dd $d)
14439734e7eSDavid du Colombier	}
14539734e7eSDavid du Colombier	for(d in $dd){
14639734e7eSDavid du Colombier		{
14739734e7eSDavid du Colombier			for(a in $fmta){
14839734e7eSDavid du Colombier				i=`{echo $a | sed 's!(.*):(/.*/)(.*)!\1 \2 \2\3!'}
14939734e7eSDavid du Colombier				if(~ $i(2) $d){
15039734e7eSDavid du Colombier					echo $i(3) ...
15139734e7eSDavid du Colombier					venti/fmtarenas $i(1) $i(3) || echo bad >/tmp/fmt
15239734e7eSDavid du Colombier					echo done with $i(3)
15339734e7eSDavid du Colombier				}
15439734e7eSDavid du Colombier			}
15539734e7eSDavid du Colombier			for(a in $fmti){
15639734e7eSDavid du Colombier				i=`{echo $a | sed 's!(.*):(/.*/)(.*)!\1 \2 \2\3!'}
15739734e7eSDavid du Colombier				if(~ $i(2) $d){
15839734e7eSDavid du Colombier					echo $i(3) ...
159a22b0629SDavid du Colombier					venti/fmtisect $i(1) $i(3) || echo bad >/tmp/fmt
16039734e7eSDavid du Colombier					echo done with $i(3)
16139734e7eSDavid du Colombier				}
16239734e7eSDavid du Colombier			}
16339734e7eSDavid du Colombier		} &
16439734e7eSDavid du Colombier	}
16539734e7eSDavid du Colombier	wait
16639734e7eSDavid du Colombier	if(~ bad `{cat /tmp/fmt}){
16739734e7eSDavid du Colombier		echo There were errors formatting the indices and arenas.
16839734e7eSDavid du Colombier		fmtventi=ready
16939734e7eSDavid du Colombier		export fmtventi
17039734e7eSDavid du Colombier		exit errors
17139734e7eSDavid du Colombier	}
17239734e7eSDavid du Colombier
17339734e7eSDavid du Colombier	echo Done formatting Venti arenas and indices.
17439734e7eSDavid du Colombier
17539734e7eSDavid du Colombier	v=$ventiarena(1)
17639734e7eSDavid du Colombier	echo Storing Venti config on $v...
17739734e7eSDavid du Colombier	{
17839734e7eSDavid du Colombier		echo index main
17939734e7eSDavid du Colombier		for(i in $ventiindex)
18039734e7eSDavid du Colombier			echo isect $i
18139734e7eSDavid du Colombier		for(a in $ventiarena)
182a22b0629SDavid du Colombier			echo arenas $a
18339734e7eSDavid du Colombier	} | venti/conf -w $v
18439734e7eSDavid du Colombier
18539734e7eSDavid du Colombier	echo Initializing index...
186a22b0629SDavid du Colombier	venti/fmtindex $v
18739734e7eSDavid du Colombier
18839734e7eSDavid du Colombier	echo Done with Venti!
18939734e7eSDavid du Colombier}
19039734e7eSDavid du Colombier
191