NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: bin/60521: dump(8): mystery of Hanoi



The following reply was made to PR bin/60521; it has been noted by GNATS.

From: Christos Zoulas <christos%zoulas.com@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost,
 campbell+netbsd%mumble.net@localhost
Subject: Re: bin/60521: dump(8): mystery of Hanoi
Date: Sat, 1 Aug 2026 14:40:53 +0300

 Here is what chatgpt has to say:
 
 The Tower of Hanoi backup scheme is used with tape backups because it provid=
 es a good balance between three competing goals:
 
 - Keeping many historical backup versions.
 - Using a relatively small number of tapes.
 - Ensuring older backups are retained for progressively longer periods.
 
 It is based on the same mathematical pattern as the classic Tower of Hanoi p=
 uzzle.
 
 How it works
 
 Suppose you have five tapes labeled A=E2=80=93E.
 
 Instead of reusing tapes in a simple rotation, each tape is used at differen=
 t intervals:
 
 Tape A: every 2 backups
 Tape B: every 4 backups
 Tape C: every 8 backups
 Tape D: every 16 backups
 Tape E: every 32 backups
 
 For daily backups, the schedule might look like this:
 
 Day  1: Tape A
 Day  2: Tape B
 Day  3: Tape A
 Day  4: Tape C
 Day  5: Tape A
 Day  6: Tape B
 Day  7: Tape A
 Day  8: Tape D
 Day  9: Tape A
 Day 10: Tape B
 Day 11: Tape A
 Day 12: Tape C
 Day 13: Tape A
 Day 14: Tape B
 Day 15: Tape A
 Day 16: Tape E
 
 Notice that:
 - Tape A is overwritten frequently.
 - Tape E isn't overwritten until day 32.
 - Some backups naturally become long-term recovery points.
 
 Why this is useful
 
 Imagine someone accidentally deletes a file.
 
 - If they notice tomorrow, yesterday's backup (Tape A) is available.
 - If they notice two weeks later, Tape D may still contain the data.
 - If they notice a month later, Tape E may still have it.
 
 A simple five-tape rotation would only let you go back five days before ever=
 ything had been overwritten.
 
 Advantages
 
 - Excellent history with few tapes.
 - Automatic aging. Older backups are naturally retained longer.
 - No calendar required. The schedule is purely mathematical.
 - Efficient for incremental backups.
 
 Disadvantages
 
 - The schedule is harder to understand than daily/weekly/monthly rotations.
 - Finding the newest backup before a particular date can require consulting t=
 he schedule.
 - It doesn't align with business reporting periods (month-end, quarter-end, y=
 ear-end).
 - Modern disk-based backup systems with deduplication often make this approa=
 ch unnecessary.
 
 Comparison with Grandfather-Father-Son (GFS)
 
 Tower of Hanoi
 - Mathematical schedule
 - Very tape-efficient
 - Automatic exponential retention
 - Best when tape count is limited
 
 Grandfather-Father-Son
 - Calendar schedule
 - Easier to understand
 - Explicit daily/weekly/monthly backups
 - Better for compliance and auditing
 
 Is it still used?
 
 Today it's relatively uncommon because disk-based backup appliances and clou=
 d storage allow organizations to keep many recovery points without carefully=
  managing physical media. However, the Tower of Hanoi scheme can still be us=
 eful when:
 - using physical tapes,
 - tape inventory is limited,
 - and long retention is desired without purchasing many additional tapes.
 
 It remains an elegant example of using exponential spacing to maximize the a=
 ge of recoverable backups while minimizing the number of tapes required.
 
 > On Aug 1, 2026, at 7:30=E2=80=AFAM, Taylor R Campbell via gnats <gnats-adm=
 in%netbsd.org@localhost> wrote:
 >=20
 > =EF=BB=BFThe following reply was made to PR bin/60521; it has been noted b=
 y GNATS.
 >=20
 > From: Taylor R Campbell <riastradh%NetBSD.org@localhost>
 > To: gnats-bugs%NetBSD.org@localhost, netbsd-bugs%NetBSD.org@localhost
 > Cc:
 > Subject: Re: bin/60521: dump(8): mystery of Hanoi
 > Date: Sat, 1 Aug 2026 04:28:14 +0000
 >=20
 > Aha!  Another Google Scholar search with slightly different query
 > (`hanoi backup tape') turned up a document that is...actually in our
 > source tree already(!), namely src/share/doc/smm/01.setup (installed
 > at /usr/share/doc/smm/setup), or the `Installing and Operating 4.4BSD
 > UNIX' manual, which has this excerpt:
 >=20
 >>     Dumping  of  the  filesystems should be done regularly,
 >> since once the system is going it is easy to become  compla-
 >> cent.   Complete  and incremental dumps are easily done with
 >> dump(8).  You should arrange to do  a  towers-of-hanoi  dump
 >> sequence;  we  tune ours so that almost all files are dumped
 >> on two tapes and kept for at least  a  week  in  most  every
 >> case.  We take full dumps every month (and keep these indef-
 >> initely).  Operators can execute ``dump w''  at  login  that
 >> will  tell  them  what  needs  to  be  dumped  (based on the
 >> /etc/fstab information).  Be sure to create a group operator
 >> in  the  file  /etc/group  so that dump can notify logged-in
 >> operators when it needs help.
 >>     More precisely, we have three sets of  dump  tapes:  10
 >> daily  tapes,  5  weekly  sets of 2 tapes, and fresh sets of
 >> three tapes monthly.  We do daily dumps  circularly  on  the
 >> daily tapes with sequence `3 2 5 4 7 6 9 8 9 9 9 ...'.  Each
 >> weekly is a level  1  and  the  daily  dump  sequence  level
 >> restarts after each weekly dump.  Full dumps are level 0 and
 >> the daily sequence restarts after each full dump also.
 >>     Thus a typical dump sequence would be:
 >> =3D20
 >> tape name   level number       date         opr      size
 >> ----------------------------------------------------------
 >>   FULL           0         Nov 24, 1992   operator   137K
 >>     D1           3         Nov 28, 1992   operator   29K
 >>     D2           2         Nov 29, 1992   operator   34K
 >>     D3           5         Nov 30, 1992   operator   19K
 >>     D4           4          Dec 1, 1992   operator   22K
 >>     W1           1          Dec 2, 1992   operator   40K
 >>     D5           3          Dec 4, 1992   operator   15K
 >>     D6           2          Dec 5, 1992   operator   25K
 >>     D7           5          Dec 6, 1992   operator   15K
 >>     D8           4          Dec 7, 1992   operator   19K
 >>     W2           1          Dec 9, 1992   operator   118K
 >>     D9           3         Dec 11, 1992   operator   15K
 >>    D10           2         Dec 12, 1992   operator   26K
 >>     D1           5         Dec 15, 1992   operator   14K
 >>     W3           1         Dec 17, 1992   operator   71K
 >>     D2           3         Dec 18, 1992   operator   13K
 >>   FULL           0         Dec 22, 1992   operator   135K
 >> =3D20
 >> We do weekly dumps often enough that daily dumps always  fit
 >> on one tape.
 >=20
 > This actually lays out the correspondence between tapes, levels, and
 > dates, and gives some criteria it is intended to satisfy:
 > - almost every file is dumped on at least two different tapes, and
 > - almost every file is kept for at least a week.
 >=20
 > The algorithm for dump levels on successive tapes appears to be 0 3 -1
 > +3 -1 +3 -1 ... (clamped at 9), which is somewhat like the naive 0 +1
 > +1 +1 +1 ... except that every other day, on the -1 days, we dump all
 > the same files as were dumped on the previous day, plus whatever else
 > has changed since then -- that seems to be how almost every file is
 > dumped on at least two different tapes...well, except for changes done
 > between a +3 daily and a -1 daily, which only get saved once until the
 > next weekly or full.
 >=20
 > I'm also confused by the omission of various dates in this sequence.
 > Perhaps Nov 25,26,27 are missing because Nov 26, 1992 was
 > Thanksgiving, but Nov 28 was a Saturday and Nov 29 was a Sunday, so
 > why are they included?  Then Dec 3 is missing, a non-holiday Thursday.
 >=20
 > The sequence matches a description I found in W. Curtis Preston, _Unix
 > Backup and Recovery_, O'Reilly, 1999, pp. 40--42, alongside a -1 +2
 > sequence (which repeats some dump levels as it goes, for reasons
 > unclear):
 >=20
 >> One of the goals of most backup schedules is to get changed files on
 >> more than one volume, while reducing total volume usage.  The Tower
 >> of Hanoi (TOH) accomplishes this better than any other schedule.  If
 >> you use a TOH progression for your backup levels, most changed files
 >> will get backed up twice---but only twice.
 >> =3D20
 >> Here are two different versions of the progression.  (They're
 >> related to the number of rings on the three pegs, by the way.)
 >> =3D20
 >> 0 3 2 5 4 7 6 9 8 9
 >> 0 3 2 4 3 5 4 6 5 7 6 8 7 9 8
 >> =3D20
 >> The mathematical progression is actually pretty easy. It's 0 2 3 4 5
 >> 6 7 8 9, intermixed with 3 4 5 6 7 8 9.
 >=20
 > https://books.google.com/books?id=3D3D_i1sO47qNnMC&q=3D3Dhanoi#v=3D3Dsnipp=
 et&q=3D3D=3D
 > hanoi&f=3D3Dfalse
 >=20
 > I don't really see any resemblance to the towers of Hanoi binary
 > progressions that are described elsewhere like in Wikipedia, though,
 > where the nth tape is recycled every 2^n days, i.e., on day d starting
 > at 1, you overwrite tape clz(d).  As a result, for n1 > n0, tape n1
 > gets overwritten 2^{n1 - n0} times as often as tape n0.  In contrast,
 > the sequence documented in the SMM overwrites every tape with the same
 > frequency.
 >=20
 > So the term `towers of Hanoi' seems to be being used for two
 > completely different classes of schedules.  The binary progression
 > strikes me as a closer analogy: if the tapes correspond to puzzle
 > discs numbered by size, and if moving a disc from one peg to another
 > in the standard towers of Hanoi algorithm means taking a backup with
 > the corresponding disc, the binary progression is what you get.
 >=20
 > It also remains unclear what dump levels the intent is for binary
 > progression `towers of Hanoi' rotation schemes -- if any intent can be
 > ascribed to this.
 >=20
 > One possibility is that you always do a full backup, so that with n
 > tapes, you can always recover 1, 2, 4, ..., 2^n days ago.  But is that
 > actually done in practice?
 >=20
 > Another possibility is that up to level L, on day d, you overwrite
 > tape clz(d) with a level-(L - clz(d)) backup.  With five tapes,
 > labelled A/B/C/D for the incrementals (treated as if numbered 0/1/2/3
 > for the clz correspondence) and F for the full, that would lead to the
 > following day/tape/level schedule, corresponding sequences of tapes
 > needed to restore to the latest backup at each point between backups,
 > and which days you can roll back to at each point between backups (if
 > I haven't made any mistakes, which I probably have):
 >=20
 > day      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16
 > tape     F  A  B  A  C  A  B  A  D  A  B  A  C  A  B  A  F
 > level    0  4  3  4  2  4  3  4  1  4  3  4  2  4  3  4  0
 > recovery  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F
 >              A  B  B  C  C  C  C  D  D  D  D  D  D  D  D
 >                    A     A  B  B     A  B  B  C  C  C  C
 >                                A           A     A  B  B
 >                                                        A
 > rollback  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 >              1  1  2  2  2  4  4  4  4  4  4  8  8  8  8
 >                 2  3  3  4  5  6  6  6  8  8  10 10 12 12
 >                       4  5  6  7  7  8  9  10 11 12 13 14
 >                                   8  9  10 11 12 13 14 15
 >=20
 > I'm not sure what criteria this optimizes either!  It approximates
 > being able to roll back 2^k days for each k up to the limit.  One
 > might intuitively expect that with a clever binary progression
 > involving n levels, you need only fetch at most lg L tapes in tape
 > libary to recover at any given time, but this clearly doesn't achieve
 > that.  Maybe something involving Gray codes reduces that metric.
 >=20
 



Home | Main Index | Thread Index | Old Index