backup 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #!/bin/rc
  2. # backup [-np] [-d dev] [-s set] - backup venti arenas to disc set using dev
  3. # and record that. also print recent fossil dump scores.
  4. rfork ne
  5. cd /sys/lib/backup
  6. . funcs
  7. bind -a . /bin
  8. done=0
  9. print=yes
  10. while (~ $done 0 && ! ~ $#* 0 && ~ $1 -*) {
  11. switch ($1) {
  12. case -d; rdev=$2; shift
  13. case -n; debug=yes # don't dump; use with -s test
  14. case -p; print=no
  15. case -s; set=$2 ; shift
  16. case --; done = 1 # no break in rc, alas
  17. case -*
  18. echo usage: $0 '[-np] [-d dev] [-s set]' >[1=2]
  19. exit usage
  20. }
  21. shift
  22. }
  23. fn sigint sighup sigterm {
  24. exit note
  25. }
  26. fn dobackuparenas {
  27. if (~ $debug yes) {
  28. echo pretending to backuparenas $*
  29. shift
  30. for (name)
  31. dumpdone arena0 $name
  32. }
  33. if not
  34. backuparenas $*
  35. }
  36. fn backupdisc {
  37. echo please insert disc $disc of set $set into $rdev and press return to backup
  38. echo -n $"*^': '
  39. if (! ~ $debug yes)
  40. junk=`{read}
  41. if not
  42. echo
  43. dobackuparenas $rdev $*
  44. }
  45. fn backup1 {
  46. progress=no
  47. disc1trks=`{hoc -e $ntracks-$tracks}
  48. disc1arenas=()
  49. if (! ~ $disc1trks 0)
  50. disc1arenas=`{sed $disc1trks^q arenas}
  51. if (! ~ $#disc1arenas 0 && ! ~ $disc1trks 0) {
  52. backupdisc $disc1arenas
  53. quitonfailure $status
  54. tracks = `{hoc -e $tracks+$#disc1arenas}
  55. if (test $tracks -ge $ntracks) {
  56. disc=`{hoc -e $disc+1}
  57. tracks=0
  58. }
  59. updprog
  60. sed 1,$disc1trks^d arenas >morearenas
  61. mv morearenas arenas
  62. arenas_todo=`{cat arenas}
  63. }
  64. }
  65. cd $set
  66. tobackup $set >arenas
  67. quitonfailure $status
  68. arenas_todo=`{cat arenas}
  69. if (~ $#arenas_todo 0) {
  70. echo no sealed arenas not yet on disc exist on $fs
  71. exit ''
  72. }
  73. if (test -s disc)
  74. . disc
  75. if not
  76. updprog
  77. if (! ~ $debug yes && ~ $set set1 && ~ $print yes) {
  78. 9fs log
  79. # don't hang in lp
  80. tail -50 /sys/log/fs.archive | pr -h 'recent fossil dump scores' | lp &
  81. echo fossil dump scores just printed.
  82. }
  83. progress=yes
  84. while (test $#arenas_todo -gt 0 && ~ $progress yes) {
  85. backup1
  86. quitonfailure $status
  87. }
  88. exit ''