backup 1.7 KB

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