I think I'm now ready to pick up this old thread (if anybody's still
interested...)
On Jan 7, 2009, at 5:11 PM, erik quanstrom wrote:
Lets see. May be its my misinterpretation of what venti does. But so
far I understand that it boils down to: I give venti a block of any
length, it gives me a score back. Now internally, venti might decide
just a clarification. this is done by the client. from venti(6):
Files and Directories
Venti accepts blocks up to 56 kilobytes in size. By conven-
tion, Venti clients use hash trees of blocks to represent
arbitrary-size data files. [...]
Right. This, by the way, suggests that the onus is on the clients
to help venti reuse as much blocks as possible. Has there been
any established practices of finding the best "cut-here" points?
But even in the former case I don't see how the corruption could be
possible. Please elaborate.
i didn't say there would be corruption. i assumed corruption
and outlined how one could recover the maximal set of data
and have a consistent fs (assuming the damage doesn't cut a
full strip across all backups) by simply picking a good
block at each lba from the available damaged and/or incomplete
backups, which may originate at different times. (russ was the
first that i know of to put this into practice.)
in the case of zfs, my claim is that since zfs can reuse blocks, two
vdev backups, each with corruption or missing data in different places
are pretty well useless.
Got it. However, I'm still not fully convinced there's a definite edge
one way or the other. Don't get me wrong: I'm not trying to defend
ZFS (I don't think it needs defending, anyway) but rather I'm trying
to test my mental model of how both work.
We assume a damaged set of arenas for venti and a damaged set
of vdevs for ZFS. Everything is off-line at that point and we are
running
strictly in forensics mode. The show, basically, consists of three acts:
1. salvaging as many good data blocks as possible
2. building higher-order structures out of primary data blocks
3. trying to rebuild as much of a consistent FS as possible
using all the available blocks
It seems to me that #1 and #2 are 100% the same in terms of
the probability of success. In fact, one might claim that ZFS has
a slight edge because of:
a. "volume management" being part of the FS
b. the "ditto blocks" IOW every block pointer having up to
3 alternative locations for the block it points to
The net result is that you might end up with more good blocks
to choose from in ZFS world, than in venti's case. Which brings
us to #3.
Once again, we might have more blocks to choose from than
we want (including "free" blocks) but the generation number
should be enough of a clue to filter unwanted things out.
Thanks,
Roman.
P.S. Oh, and in case of ZFS a damaged vdev will be detected (and
possibly re-silvered) under normal working conditions, while
fossil might not even notice a corruption.