Date: Mon, 4 Feb 2002 15:50:02 -0800 (PST) From: Ian Dowse <iedowse@maths.tcd.ie> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/34604: restore fails with "Changing volumes on pipe input?" Message-ID: <200202042350.g14No2X24029@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/34604; it has been noted by GNATS. From: Ian Dowse <iedowse@maths.tcd.ie> To: "Georg-W. Koltermann" <gwk@mscsoftware.com> Cc: FreeBSD-gnats-submit@freebsd.org Subject: Re: bin/34604: restore fails with "Changing volumes on pipe input?" Date: Mon, 04 Feb 2002 23:46:43 +0000 In message <200202040936.g149aJg01133@hunter.muc.macsch.com>, "Georg-W. Kolterm ann" writes: > DUMP: level 0 dump on Mon Feb 4 09:54:45 2002 > DUMP: DUMP IS DONE >Changing volumes on pipe input? >abort? [yn] n >>How-To-Repeat: >Try to copy a live filesystem to a scratch partition, using dump/restore >over a pipe. Could you try applying the following patch in /usr/src/sbin/restore and then doing a "make; make install" there? I've been sitting on it for a while because I haven't had a chance to clean it up and check that it doesn't break multi-volume restores. Ian Index: restore.c =================================================================== RCS file: /home/iedowse/CVS/src/sbin/restore/restore.c,v retrieving revision 1.7 diff -u -r1.7 restore.c --- restore.c 28 Aug 1999 00:14:08 -0000 1.7 +++ restore.c 4 Feb 2002 23:43:46 -0000 @@ -689,6 +689,7 @@ vprintf(stdout, "Extract requested files\n"); curfile.action = SKIP; + curvol = -1; getvol((long)1); skipmaps(); skipdirs(); @@ -702,35 +703,40 @@ */ if (first > last) return; - /* - * Reject any volumes with inodes greater - * than the last one needed - */ - while (curfile.ino > last) { - curfile.action = SKIP; - getvol((long)0); - skipmaps(); - skipdirs(); + if (curvol != volno) { + /* + * If at the beginning of a volume, reject any + * volumes with inodes greater than the last one + * needed + */ + while (curfile.ino > last) { + curfile.action = SKIP; + getvol((long)0); + skipmaps(); + skipdirs(); + } + } + if (curfile.ino <= last) { + /* + * Decide on the next inode needed. + * Skip across the inodes until it is found + * or an out of order volume change is encountered + */ + next = lowerbnd(curfile.ino); + do { + curvol = volno; + while (next > curfile.ino && volno == curvol) + skipfile(); + skipmaps(); + skipdirs(); + } while (volno == curvol + 1); + /* + * If volume change out of order occurred the + * current state must be recalculated + */ + if (volno != curvol) + continue; } - /* - * Decide on the next inode needed. - * Skip across the inodes until it is found - * or an out of order volume change is encountered - */ - next = lowerbnd(curfile.ino); - do { - curvol = volno; - while (next > curfile.ino && volno == curvol) - skipfile(); - skipmaps(); - skipdirs(); - } while (volno == curvol + 1); - /* - * If volume change out of order occurred the - * current state must be recalculated - */ - if (volno != curvol) - continue; /* * If the current inode is greater than the one we were * looking for then we missed the one we were looking for. @@ -762,6 +768,7 @@ if (volno != curvol) skipmaps(); } + curvol = volno; } } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200202042350.g14No2X24029>