1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #!/bin/rc
- # fshalt [-r] - sync (flush) and, if possible, halt all file servers
- # and optionally reboot
- rfork e
- reboot=no
- switch ($#*) {
- case 0
- case 1
- reboot=yes
- case *
- echo usage: $0 '[-r]' >[1=2]
- exit usage
- }
- path=(/bin)
- builtin cd /
- unmount /mnt/consoles >[2]/dev/null
- kill consolefs | rc # don't compete with /mnt/consoles
- sleep 1
- f=`{ls /srv/fscons*>[2]/dev/null}
- k=`{ls /srv/kfs*cmd >[2]/dev/null|sort -r}
- echo -n syncing...
- for(i in $f){
- echo -n $i...
- {
- echo
- dial/drain
- echo fsys all sync
- if(! dial/expect -t 120 ': ')
- echo -n 'not synced...' > /dev/cons
- } < $i >> $i
- }
- echo -n venti...
- venti/sync >[2]/dev/null
- for (i in $k){
- echo -n $i...
- switch($i){
- case /srv/kfs.cmd
- disk/kfscmd sync
- case *
- disk/kfscmd -n `{echo $i | sed -n 's%/srv/kfs.(.*).cmd%\1%p'} sync
- }
- sleep 2
- }
- # halting (binaries we run can't be on the fs we're halting)
- ramfs
- builtin cd /tmp
- cp /bin/dial/expect /tmp
- cp /bin/echo /tmp
- cp /bin/disk/kfscmd /tmp
- cp /bin/rc /tmp
- cp /bin/sed /tmp
- cp /bin/ns /tmp
- cp /bin/iostats /tmp
- mkdir /tmp/lib
- cp /rc/lib/rcmain /tmp/lib
- bind /tmp /rc
- bind /tmp /bin
- # put this in a shell function so this rc script doesn't get read
- # when it's no longer accessible
- fn x {
- echo
- echo -n halting...
- for(i in $f){
- echo -n $i...
- {
- echo fsys all halt
- if(! expect -t 60 ': ')
- echo -n 'not halted...' > /dev/cons
- } < $i >> $i
- }
-
- for (i in $k){
- echo -n $i...
- switch($i){
- case /srv/kfs.cmd
- kfscmd halt
- case *
- kfscmd -n `{echo $i | sed -n 's%/srv/kfs.(.*).cmd%\1%p'} halt
- }
- }
- echo
- echo done halting
- if (~ $reboot yes) {
- echo rebooting...
- echo reboot >'#c/reboot'
- }
- }
- x
|