15c4758afSDavid du Colombier#!/bin/rc 21c9e5a6cSDavid du Colombier# restore arena# [dev] - load venti with arenas on dev, stored one per track 31c9e5a6cSDavid du Colombier# starting with arena#. must have run fmtarenas before restoring 41c9e5a6cSDavid du Colombier# the first arena in the partition. 51c9e5a6cSDavid du Colombier# this must be run on the venti server, without venti running on the 61c9e5a6cSDavid du Colombier# affected arena partition(s). 75c4758afSDavid du Colombierrfork ne 85c4758afSDavid du Colombierif (test -e /sys/lib/backup/funcs) 95c4758afSDavid du Colombier . /sys/lib/backup/funcs 105c4758afSDavid du Colombierswitch ($#*) { 115c4758afSDavid du Colombiercase 1 121c9e5a6cSDavid du Colombiercase 2 131c9e5a6cSDavid du Colombier rdev=$2 145c4758afSDavid du Colombiercase * 151c9e5a6cSDavid du Colombier echo usage: $0 arena-num '[dev]' >[1=2] 165c4758afSDavid du Colombier exit usage 175c4758afSDavid du Colombier} 181c9e5a6cSDavid du Colombierstarena=$1 191c9e5a6cSDavid du Colombierif (! ~ $starena [0-9] [0-9][0-9] [0-9][0-9][0-9]) { 201c9e5a6cSDavid du Colombier echo $0: bad starting arena: $starena >[1=2] 211c9e5a6cSDavid du Colombier exit bad-arena-num 221c9e5a6cSDavid du Colombier} 235c4758afSDavid du Colombier 241c9e5a6cSDavid du Colombier# clear any dregs from a previous run 255c4758afSDavid du Colombierunmount /mnt/cd >[2]/dev/null 261c9e5a6cSDavid du Colombiersleep 1 271c9e5a6cSDavid du Colombierkill cdfs | rc 281c9e5a6cSDavid du Colombiersleep 1 295c4758afSDavid du Colombiercdfs -d $rdev || exit 305c4758afSDavid du Colombiercd /mnt/cd 311c9e5a6cSDavid du Colombier 321c9e5a6cSDavid du Colombier#for (track in d[0-9]*) 331c9e5a6cSDavid du Colombier# venti/wrarena $track # slow; takes about 12½ mins. per GB 341c9e5a6cSDavid du Colombier 351c9e5a6cSDavid du Colombierarena = $starena 361c9e5a6cSDavid du Colombier# set arenabase for arenastart 371c9e5a6cSDavid du Colombierarenabase = `{ venti/printarenapart $arenas | sed -e 's/.*arenabase=//' -e 1q } 381c9e5a6cSDavid du Colombierkill printarenapart | rc # printarenapart leaves a process behind 391c9e5a6cSDavid du Colombier# echo arenabase $arenabase 401c9e5a6cSDavid du Colombier 411c9e5a6cSDavid du Colombierskipping=yes 421c9e5a6cSDavid du Colombierfor (track in d[0-9]*) { 431c9e5a6cSDavid du Colombier if (~ track 'd[0-9]*') { 441c9e5a6cSDavid du Colombier echo $0: no tracks in /mnt/cd >[1=2] 451c9e5a6cSDavid du Colombier exit no-tracks 461c9e5a6cSDavid du Colombier } 471c9e5a6cSDavid du Colombier if (~ $skipping yes) { 481c9e5a6cSDavid du Colombier # verify that first track is the expected one 491c9e5a6cSDavid du Colombier type=`{file $track} 501c9e5a6cSDavid du Colombier switch ($"type) { 511c9e5a6cSDavid du Colombier case *': venti arena' 521c9e5a6cSDavid du Colombier name=`{ venti/printarena $track >[2=1] | 531c9e5a6cSDavid du Colombier sed -e 's/.*name=([^ =]+).*/\1/' -e 1q } 541c9e5a6cSDavid du Colombier case * 551c9e5a6cSDavid du Colombier name=NOT-A-VENTI-ARENA 561c9e5a6cSDavid du Colombier } 571c9e5a6cSDavid du Colombier kill printarena | rc # printarena leaves a process behind 581c9e5a6cSDavid du Colombier 591c9e5a6cSDavid du Colombier echo -n first track is $"name'; is that right? ' 601c9e5a6cSDavid du Colombier switch (`{read}) { 611c9e5a6cSDavid du Colombier case [yY]* 621c9e5a6cSDavid du Colombier skipping=no 631c9e5a6cSDavid du Colombier case skip 641c9e5a6cSDavid du Colombier skipping=yes 651c9e5a6cSDavid du Colombier case * 661c9e5a6cSDavid du Colombier echo aborting, arena is unchanged. >[1=2] 671c9e5a6cSDavid du Colombier exit 'wrong track' 681c9e5a6cSDavid du Colombier } 691c9e5a6cSDavid du Colombier } 701c9e5a6cSDavid du Colombier 711c9e5a6cSDavid du Colombier if (! ~ $skipping yes) { 721c9e5a6cSDavid du Colombier # copy each track into its slot in the arena partition 731c9e5a6cSDavid du Colombier venti/printarena $track >[2=1] | sed 1q | tr -d '\12' 741c9e5a6cSDavid du Colombier kill printarena | rc # printarena leaves a process behind 751c9e5a6cSDavid du Colombier 761c9e5a6cSDavid du Colombier off = `{arenastart $arena} 771c9e5a6cSDavid du Colombier # echo -n writing $track to $arenas at 8K-block offset $off: 781c9e5a6cSDavid du Colombier sleep 3 791c9e5a6cSDavid du Colombier echo 801c9e5a6cSDavid du Colombier # argh! something (cdfs?) appends 60K of *stuff* to each 811c9e5a6cSDavid du Colombier # arena on optical disc. restrain dd. 821c9e5a6cSDavid du Colombier count=`{ echo $arenasize/$blocksize | bc } 83*ba8542f7SDavid du Colombier pump -i 1048576 -o 65536 -d 10 <$track | 84*ba8542f7SDavid du Colombier dd -quiet 1 -count $count -bs $blocksize -of $arenas \ 85*ba8542f7SDavid du Colombier -oseek $off 861c9e5a6cSDavid du Colombier arena = `{hoc -e $arena+1} 871c9e5a6cSDavid du Colombier } 881c9e5a6cSDavid du Colombier} 891c9e5a6cSDavid du Colombier# when all done, must run venti/checkarenas, fmtisect, fmtbloom, fmtindex, 901c9e5a6cSDavid du Colombier# and (the big one) venti/buildindex -b /cfg/pie/venti.conf 91