the block bitmap on a fakeworm is at the end of the sub
device/partition. see fworm.c:
int
fwormread(Device *d, Off b, void *c)
{
Iobuf *p;
Device *fdev;
Devsize l;
if(chatty > 1)
fprint(2, "fworm read %lld\n", (Wideoff)b);
fdev = FDEV(d);
l = devsize(fdev);
l -= l/(BUFSIZE*8) + 1;
if(b >= l)
panic("fworm: rbounds %lld", (Wideoff)b);
l += b/(BUFSIZE*8);
p = getbuf(fdev, l, Brd|Bres);
if(!p || checktag(p, Tvirgo, l))
panic("fworm: checktag %lld", (Wideoff)l);
l = b % (BUFSIZE*8);
if(!(p->iobuf[l/8] & (1<<(l%8)))) {
putbuf(p);
fprint(2, "fworm: read %lld\n", (Wideoff)b);
return 1;
}
putbuf(p);
return devread(fdev, b, c);
}
the block tags do not really matter for the backup. you use the
fakeworm only as a backend for the cw device so you can just
copy all the blocks that got ther bit set in the bitmap compared
to the backup.
--
cinap